Примечание
Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере с помощью JupyterLite или Binder.
Примеры использования FrozenEstimator
В этом примере показаны некоторые варианты использования FrozenEstimator.
FrozenEstimator — это вспомогательный класс, позволяющий зафиксировать обученный оценщик. Это полезно, например, когда нужно передать обученный оценщик метаоценщику, такому как FixedThresholdClassifier, не позволяя метаоценщику повторно обучать оценщик.
# Authors: The scikit-learn developers # SPDX-License-Identifier: BSD-3-Clause
Настройка порога принятия решения для предварительно обученного классификатора
Обученные классификаторы в scikit-learn используют произвольный порог принятия решения, чтобы определить, к какому классу относится заданный образец. Порог принятия решения определяется либо 0.0 по значению, возвращаемому decision_function, либо 0.5 по вероятности, возвращаемой predict_proba.
Однако может потребоваться задать собственный порог принятия решения. Это можно сделать с помощью FixedThresholdClassifier, обернув классификатор в FrozenEstimator.
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]
Теперь представим, что нужно задать другой порог принятия решения для оценок вероятности. Это можно сделать, обернув классификатор в FrozenEstimator и передав его в FixedThresholdClassifier.
threshold_classifier = FixedThresholdClassifier(
estimator=FrozenEstimator(classifier), threshold=0.9
)
Обратите внимание, что в приведённом выше фрагменте кода вызов fit для FixedThresholdClassifier не приводит к повторному обучению базового классификатора.
Посмотрим, как изменились предсказания при изменении порога вероятности.
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]
Мы видим, что оценки вероятности остались прежними, но из-за использования другого порога принятия решения предсказанные классы изменились.
См. раздел Настройка порога принятия решения после обучения для обучения с учётом стоимости ошибок, чтобы узнать больше об обучении с учётом стоимости ошибок и настройке порога принятия решения.
Калибровка предварительно обученного классификатора
Можно использовать FrozenEstimator для калибровки предварительно обученного классификатора с помощью CalibratedClassifierCV.
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
Общее время выполнения скрипта: (0 минут 0.022 секунды)
Связанные примеры
© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/auto_examples/frozen/plot_frozen_examples.html