Spec-Zone.ru › scikit-learn

Примечание

Перейти к концу для скачивания полного кода примера или запуска этого примера в браузере через JupyterLite или Binder

Примеры использования FrozenEstimator

Этот пример демонстрирует некоторые варианты использования FrozenEstimator.

FrozenEstimator — это утилитарный класс, который позволяет заморозить обученную модель. Это полезно, например, когда необходимо передать обученную модель в мета-модель, такую как FixedThresholdClassifier, не позволяя мета-модели переобучать модель.

# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

Установка порога принятия решения для предварительно обученного классификатора

Обученные классификаторы в scikit-learn используют произвольный порог принятия решения, чтобы определить, к какому классу относится данный образец. Порог принятия решения основан либо на значении, возвращаемом decision_function, либо на вероятности, возвращаемой 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,018 секунды)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_frozen_examples.ipynb

Download Python source code: plot_frozen_examples.py

Download zipped: plot_frozen_examples.zip

Связанные примеры

Основные моменты выпуска scikit-learn 1.5

Калибровка вероятностей классификаторов

Кривые калибровки вероятности

Последовательная настройка порога функции принятия решений

© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/frozen/plot_frozen_examples.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API