Примечание
Перейти в конец чтобы скачать полный пример кода или запустить этот пример в браузере через 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.017 секунд)
Связанные примеры
Пост-фактумная настройка точки отсечения функции принятия решений