Spec-Zone.ru › scikit-learn

Примечание

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

Кривая ошибок обнаружения (DET)

В этом примере сравниваются два метрики многопороговой бинарной классификации: кривая ROC (Receiver Operating Characteristic) и кривая DET (Detection Error Tradeoff). С этой целью мы оцениваем два разных классификатора для одной и той же задачи классификации.

Кривые ROC отображают истинную положительную скорость (TPR) по оси Y и скорость ложной тревоги (FPR) по оси X. Это означает, что верхний левый угол графика является «идеальной» точкой – FPR равна нулю, а TPR равна единице.

Кривые DET представляют собой вариацию кривых ROC, где вместо TPR по оси Y отображается скорость ложного отказа (FNR). В этом случае начало координат (левый нижний угол) является «идеальной» точкой.

Примечание

  • См. sklearn.metrics.roc_curve для получения дополнительной информации о кривых ROC.
  • См. sklearn.metrics.det_curve для получения дополнительной информации о кривых DET.
  • Этот пример частично основан на примере Сравнение классификаторов.
  • См. Кривая ROC (Receiver Operating Characteristic) с перекрестной проверкой для примера оценки дисперсии кривых ROC и ROC-AUC.
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

Генерация синтетических данных

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

X, y = make_classification(
    n_samples=1_000,
    n_features=2,
    n_redundant=0,
    n_informative=2,
    random_state=1,
    n_clusters_per_class=1,
)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=0)

Определение классификаторов

Здесь мы определяем два разных классификатора. Цель – визуально сравнить их статистическую производительность на разных порогах с помощью кривых ROC и DET. Нет конкретной причины, по которой выбраны именно эти классификаторы, так как в scikit-learn доступны и другие.

from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import make_pipeline
from sklearn.svm import LinearSVC

classifiers = {
    "Linear SVM": make_pipeline(StandardScaler(), LinearSVC(C=0.025)),
    "Random Forest": RandomForestClassifier(
        max_depth=5, n_estimators=10, max_features=1
    ),
}

Построение кривых ROC и DET

Кривые DET обычно строятся в шкале нормального отклонения. Для достижения этого отображение DET преобразует скорости ошибок, возвращенные функцией det_curve, и масштаб осей с использованием scipy.stats.norm.

import matplotlib.pyplot as plt

from sklearn.metrics import DetCurveDisplay, RocCurveDisplay

fig, [ax_roc, ax_det] = plt.subplots(1, 2, figsize=(11, 5))

for name, clf in classifiers.items():
    clf.fit(X_train, y_train)

    RocCurveDisplay.from_estimator(clf, X_test, y_test, ax=ax_roc, name=name)
    DetCurveDisplay.from_estimator(clf, X_test, y_test, ax=ax_det, name=name)

ax_roc.set_title("Receiver Operating Characteristic (ROC) curves")
ax_det.set_title("Detection Error Tradeoff (DET) curves")

ax_roc.grid(linestyle="--")
ax_det.grid(linestyle="--")

plt.legend()
plt.show()
Receiver Operating Characteristic (ROC) curves, Detection Error Tradeoff (DET) curves

Обратите внимание, что визуальная оценка общей производительности различных алгоритмов классификации с помощью кривых DET проще, чем с помощью кривых ROC. Так как кривые ROC строятся в линейной шкале, разные классификаторы часто выглядят похожими в большой части графика и различаются сильнее только в верхнем левом углу графика. С другой стороны, так как кривые DET представляют прямые линии в шкале нормального отклонения, они имеют тенденцию быть различимыми в целом, а область интереса охватывает большую часть графика.

Кривые DET предоставляют прямую обратную связь о компромиссе ошибок обнаружения, что помогает в анализе рабочей точки. Затем пользователь может принять решение о том, какую FNR он готов принять в ущерб FPR (или наоборот).

Общее время выполнения скрипта: (0 минут 0.259 секунд)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_det.ipynb

Download Python source code: plot_det.py

Download zipped: plot_det.zip

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

Кривая ROC (Receiver Operating Characteristic) с перекрестной проверкой

Кривая ROC с API визуализации

Многоклассовая кривая ROC (Receiver Operating Characteristic)

Преобразование признаков с помощью ансамблей деревьев

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

Spec-Zone.ru

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