Hinweis
Zum Ende gehen, um den vollständigen Beispielcode herunterzuladen oder dieses Beispiel über JupyterLite oder Binder in Ihrem Browser auszuführen.
Beispiele für die Verwendung von FrozenEstimator#
Dieses Beispiel zeigt einige Anwendungsfälle von FrozenEstimator.
FrozenEstimator ist eine Hilfsklasse, die es ermöglicht, einen trainierten Schätzer einzufrieren. Dies ist beispielsweise nützlich, wenn wir einen trainierten Schätzer an einen Meta-Schätzer wie FixedThresholdClassifier übergeben möchten, ohne dass der Meta-Schätzer den Schätzer neu trainiert.
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause
Festlegen eines Entscheidungsschwellenwerts für einen vortrainierten Klassifikator#
Trainierte Klassifikatoren in scikit-learn verwenden einen beliebigen Entscheidungsschwellenwert, um zu entscheiden, zu welcher Klasse die gegebene Stichprobe gehört. Der Entscheidungsschwellenwert ist entweder 0.0 auf den Wert, der von der decision_function zurückgegeben wird, oder 0.5 auf die Wahrscheinlichkeit, die von predict_proba zurückgegeben wird.
Manchmal möchte man jedoch einen benutzerdefinierten Entscheidungsschwellenwert festlegen. Dies können wir tun, indem wir FixedThresholdClassifier verwenden und den Klassifikator mit FrozenEstimator umschließen.
from sklearn.datasets import make_classification
from sklearn.frozen import FrozenEstimator
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import FixedThresholdClassifier, train_test_split
X, y = make_classification(n_samples=1000, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
classifier = LogisticRegression().fit(X_train, y_train)
print(
"Probability estimates for three data points:\n"
f"{classifier.predict_proba(X_test[-3:]).round(3)}"
)
print(
"Predicted class for the same three data points:\n"
f"{classifier.predict(X_test[-3:])}"
)
Probability estimates for three data points:
[[0.18 0.82]
[0.29 0.71]
[0. 1. ]]
Predicted class for the same three data points:
[1 1 1]
Stellen Sie sich nun vor, Sie möchten einen anderen Entscheidungsschwellenwert für die Wahrscheinlichkeitsschätzungen festlegen. Dies können wir tun, indem wir den Klassifikator mit FrozenEstimator umschließen und ihn an FixedThresholdClassifier übergeben.
threshold_classifier = FixedThresholdClassifier(
estimator=FrozenEstimator(classifier), threshold=0.9
)
Beachten Sie, dass das Aufrufen von fit auf FixedThresholdClassifier im obigen Codeausschnitt den zugrunde liegenden Klassifikator nicht neu trainiert.
Schauen wir uns nun an, wie sich die Vorhersagen im Verhältnis zum Wahrscheinlichkeitsschwellenwert geändert haben.
print(
"Probability estimates for three data points with FixedThresholdClassifier:\n"
f"{threshold_classifier.predict_proba(X_test[-3:]).round(3)}"
)
print(
"Predicted class for the same three data points with FixedThresholdClassifier:\n"
f"{threshold_classifier.predict(X_test[-3:])}"
)
Probability estimates for three data points with FixedThresholdClassifier:
[[0.18 0.82]
[0.29 0.71]
[0. 1. ]]
Predicted class for the same three data points with FixedThresholdClassifier:
[0 0 1]
Wir sehen, dass die Wahrscheinlichkeitsschätzungen gleich bleiben, aber da ein anderer Entscheidungsschwellenwert verwendet wird, sind die vorhergesagten Klassen unterschiedlich.
Bitte beachten Sie Anpassen des Entscheidungsschwellenwerts für kostenempfindliches Lernen, um mehr über kostenempfindliches Lernen und die Anpassung von Entscheidungsschwellenwerten zu erfahren.
Kalibrierung eines vortrainierten Klassifikators#
Sie können FrozenEstimator verwenden, um einen vortrainierten Klassifikator mit CalibratedClassifierCV zu kalibrieren.
from sklearn.calibration import CalibratedClassifierCV
from sklearn.metrics import brier_score_loss
calibrated_classifier = CalibratedClassifierCV(
estimator=FrozenEstimator(classifier)
).fit(X_train, y_train)
prob_pos_clf = classifier.predict_proba(X_test)[:, 1]
clf_score = brier_score_loss(y_test, prob_pos_clf)
print(f"No calibration: {clf_score:.3f}")
prob_pos_calibrated = calibrated_classifier.predict_proba(X_test)[:, 1]
calibrated_score = brier_score_loss(y_test, prob_pos_calibrated)
print(f"With calibration: {calibrated_score:.3f}")
No calibration: 0.033
With calibration: 0.032
Gesamtlaufzeit des Skripts: (0 Minuten 0,016 Sekunden)
Verwandte Beispiele
Wahrscheinlichkeitskalibrierung von Klassifikatoren
Post-hoc-Anpassung des Cut-off-Punkts der Entscheidungskfunktion