Spec-Zone.ru › scikit-learn

Примечание

Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере с помощью JupyterLite или Binder.

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

Scikit-learn предоставляет простой API для создания визуализаций в машинном обучении. Ключевые возможности этого API позволяют быстро строить графики и изменять их внешний вид без повторных вычислений. В этом примере мы покажем, как использовать API визуализации, сравнив ROC-кривые.

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

Загрузка данных и обучение SVC

Сначала загрузим набор данных Wine и преобразуем его в задачу бинарной классификации. Затем обучим классификатор опорных векторов на обучающем наборе данных.

import matplotlib.pyplot as plt

from sklearn.datasets import load_wine
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import RocCurveDisplay
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC

X, y = load_wine(return_X_y=True)
y = y == 2

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
svc = SVC(random_state=42)
svc.fit(X_train, y_train)
SVC(random_state=42)
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить представление HTML, или доверьте работу блокноту.
На GitHub представление HTML не отображается; попробуйте открыть эту страницу с помощью nbviewer.org.
Параметры
random_state random_state: int, экземпляр RandomState или None, по умолчанию=None

Управляет генерацией псевдослучайных чисел для перемешивания данных при вычислении оценок вероятности. Игнорируется, если `probability` равно False.
Передайте целое число, чтобы получать воспроизводимые результаты при нескольких вызовах функции.
См. :term:`Глоссарий <random_state>`.
42
C C: float, по умолчанию=1.0

Параметр регуляризации. Сила регуляризации обратно пропорциональна C. Значение должно быть строго положительным. Используется квадратичный штраф l2. Интуитивную визуализацию влияния масштабирования параметра регуляризации C см. в разделе :ref:`sphx_glr_auto_examples_svm_plot_svm_scale_c.py`.
1.0
kernel kernel: {'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'} или вызываемый объект, по умолчанию='rbf'

Определяет тип ядра, используемого алгоритмом. Если значение не задано, используется 'rbf'. Если передан вызываемый объект, с его помощью предварительно вычисляется матрица ядра по матрицам данных; эта матрица должна быть массивом формы ``(n_samples, n_samples)``. Интуитивную визуализацию различных типов ядер см. в разделе :ref:`sphx_glr_auto_examples_svm_plot_svm_kernels.py`.
'rbf'
degree degree: int, по умолчанию=3

Степень полиномиальной функции ядра ('poly').
Должна быть неотрицательной. Игнорируется для всех остальных ядер.
3
gamma gamma: {'scale', 'auto'} или float, по умолчанию='scale'

Коэффициент ядра для 'rbf', 'poly' и 'sigmoid'.

- если передано ``gamma='scale'`` (по умолчанию), в качестве значения gamma используется
1 / (n_features * X.var()),
- если задано 'auto', используется 1 / n_features
- если задано число с плавающей точкой, оно должно быть неотрицательным.

.. versionchanged:: 0.22
Значение ``gamma`` по умолчанию изменено с 'auto' на 'scale'.
'scale'
coef0 coef0: float, по умолчанию=0.0

Свободный член в функции ядра.
Имеет значение только для 'poly' и 'sigmoid'.
0.0
shrinking shrinking: bool, по умолчанию=True

Использовать ли эвристику сокращения.
См. :ref:`Руководство пользователя <shrinking_svm>`.
True
probability probability: bool, по умолчанию=False

Включить ли вычисление оценок вероятности. Этот параметр необходимо включить до вызова `fit`; он замедлит работу этого метода, поскольку внутри используется перекрёстная проверка с 5 блоками, а результаты `predict_proba` могут не совпадать с результатами `predict`. Подробнее см. в :ref:`Руководстве пользователя <scores_probabilities>`.

..deprecated:: 1.9
Параметр `probability` устарел и будет удалён в версии 1.11.
Вместо `SVC(probability=True)` используйте `CalibratedClassifierCV(SVC(), ensemble=False)`.
'deprecated'
tol tol: float, по умолчанию=1e-3

Допуск для критерия остановки.
0.001
cache_size cache_size: float, по умолчанию=200

Размер кэша ядра (в МБ).
200
class_weight class_weight: dict или 'balanced', по умолчанию=None

Задаёт параметр C для класса i равным class_weight[i]*C для SVC. Если значение не задано, предполагается, что вес всех классов равен единице.
В режиме "balanced" значения y используются для автоматической настройки весов, обратно пропорциональных частотам классов во входных данных, по формуле ``n_samples / (n_classes * np.bincount(y))``.
None
verbose verbose: bool, по умолчанию=False

Включить подробный вывод. Обратите внимание: эта настройка использует параметр среды выполнения в libsvm, который задаётся для всего процесса и может работать некорректно в многопоточном режиме.
False
max_iter max_iter: int, по умолчанию=-1

Жёсткое ограничение на число итераций решателя; значение -1 означает отсутствие ограничения.
-1
decision_function_shape decision_function_shape: {'ovo', 'ovr'}, по умолчанию='ovr'

Определяет, возвращать ли функцию принятия решений «один против остальных» ('ovr') формы (n_samples, n_classes), как у всех остальных классификаторов, или исходную функцию принятия решений «один против одного» ('ovo') из libsvm, имеющую форму (n_samples, n_classes * (n_classes - 1) / 2). Однако обратите внимание, что внутри для обучения моделей всегда используется стратегия «один против одного» ('ovo') для многоклассовой классификации; матрица ovr строится только на основе матрицы ovo.
Для бинарной классификации параметр игнорируется.

.. versionchanged:: 0.19
Значение decision_function_shape по умолчанию — 'ovr'.

.. versionadded:: 0.17
Рекомендуется *decision_function_shape='ovr'*.

.. versionchanged:: 0.17
Варианты *decision_function_shape='ovo' и None* устарели.
'ovr'
break_ties break_ties: bool, по умолчанию=False

Если задано значение true, ``decision_function_shape='ovr'`` и число классов > 2, :term:`predict` будет разрешать равенство результатов с учётом значений достоверности :term:`decision_function`; в противном случае будет возвращён первый из классов с равными результатами. Обратите внимание: разрешение равенства требует значительно больше вычислений, чем обычный predict. Пример использования с ``decision_function_shape='ovr'`` см. в разделе :ref:`sphx_glr_auto_examples_svm_plot_svm_tie_breaking.py`.

.. versionadded:: 0.22
False
Обученные атрибуты
Имя Тип Значение
class_weight_ class_weight_: ndarray формы (n_classes,)

Множители параметра C для каждого класса.
Вычисляются на основе параметра ``class_weight``.
ndarray[float64](2,) [1.,1.]
classes_ classes_: ndarray формы (n_classes,)

Метки классов.
ndarray[bool](2,) [False, True]
dual_coef_ dual_coef_: ndarray или разреженный массив/матрица формы (n_classes -1, n_SV)

Двойственные коэффициенты опорных векторов в решающей
функции (см. :ref:`sgd_mathematical_formulation`), умноженные на
их целевые значения.
Для многоклассовой классификации — коэффициенты для всех классификаторов «один против одного».
Расположение коэффициентов в многоклассовом случае несколько
нетривиально. Подробности см. в :ref:`разделе о многоклассовой классификации руководства пользователя
<svm_multi_class>`.
Если `X` является разреженной матрицей, эти коэффициенты также будут разреженными.
ndarray[float64](1, 73) [[-1.,-1.,-1.,..., 1., 1., 1.]]
fit_status_ fit_status_: int

0, если обучение прошло успешно, иначе 1 (будет выдано предупреждение)
int 0
intercept_ intercept_: ndarray формы (n_classes * (n_classes - 1) / 2,)

Свободные члены решающей функции.
ndarray[float64](1,) [-1.1]
n_features_in_ n_features_in_: int

Количество признаков, полученных при :term:`обучении`.

.. добавлено в версии:: 0.24
int 13
n_iter_ n_iter_: ndarray формы (n_classes * (n_classes - 1) // 2,)

Количество итераций, выполненных алгоритмом оптимизации при обучении модели.
Форма этого атрибута зависит от числа оптимизированных моделей,
которое, в свою очередь, зависит от количества классов.

.. добавлено в версии:: 1.1
ndarray[int32](1,) [45]
n_support_ n_support_: ndarray формы (n_classes,), dtype=int32

Количество опорных векторов для каждого класса.
ndarray[int32](2,) [37,36]
probA_ probA_: ndarray формы (n_classes * (n_classes - 1) / 2)

Если `probability=True`, содержит параметры, полученные при
масштабировании Платта для вычисления оценок вероятности по значениям решающей функции.
Если `probability=False`, массив пуст. Масштабирование Платта использует
логистическую функцию
ndarray[float64](0,) []
probB_ probB_: ndarray формы (n_classes * (n_classes - 1) / 2)

Если `probability=True`, содержит параметры, полученные при
масштабировании Платта. Масштабирование Платта использует логистическую функцию
``1 / (1 + exp(decision_value * probA_ + probB_))``
где ``probA_`` и ``probB_`` вычисляются по набору данных [2]_. Подробнее
о многоклассовом случае и процедуре обучения см. в
разделе 8 работы [1]_.

.. устарело:: 1.9
Атрибуты `probA_` и `probB_` устарели в версии 1.9 и будут
удалены в версии 1.11.
ndarray[float64](0,) []
shape_fit_ shape_fit_: кортеж целых чисел формы (n_dimensions_of_X,)

Размерности массива обучающих данных ``X``.
tuple (133, 13)
support_ support_: ndarray формы (n_SV)

Индексы опорных векторов.
ndarray[int32](73,) [ 1, 10, 11,...,118,119,126]
support_vectors_ support_vectors_: ndarray или разреженный массив/матрица формы (n_SV, n_features)

Опорные векторы. Если ядро вычислено заранее, массив пуст.
Если `X` является разреженной матрицей, эти векторы также будут разреженными.
ndarray[float64](73, 13) [[ 12.08, 2.08, 1.7 ,..., 1.27, 2.96,710. ], [ 12.51, 1.73, 1.98,..., 1.04, 3.57,672. ], [ 12.33, 0.99, 1.95,..., 1.06, 2.31,750. ], ..., [ 12.86, 1.35, 2.32,..., 0.76, 1.29,630. ], [ 12.79, 2.67, 2.48,..., 0.48, 1.47,480. ], [ 14.13, 4.1 , 2.74,..., 0.61, 1.6 ,560. ]]


Построение ROC-кривой

Затем построим ROC-кривую одним вызовом sklearn.metrics.RocCurveDisplay.from_estimator. Возвращённый объект svc_disp позволяет использовать уже вычисленную ROC-кривую для SVC в последующих графиках.

svc_disp = RocCurveDisplay.from_estimator(svc, X_test, y_test)
plt.show()
plot roc curve visualization api

Обучение случайного леса и построение ROC-кривой

Обучим классификатор на основе случайного леса и построим график, сравнивающий его с ROC-кривой SVC. Обратите внимание, что svc_disp использует plot, чтобы построить ROC-кривую SVC без повторного вычисления её значений. Кроме того, передадим alpha=0.8 функциям построения графиков, чтобы настроить значения alpha для кривых.

rfc = RandomForestClassifier(n_estimators=10, random_state=42)
rfc.fit(X_train, y_train)
ax = plt.gca()
rfc_disp = RocCurveDisplay.from_estimator(
    rfc, X_test, y_test, ax=ax, curve_kwargs=dict(alpha=0.8)
)
svc_disp.plot(ax=ax, curve_kwargs=dict(alpha=0.8))
plt.show()
plot roc curve visualization api

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_roc_curve_visualization_api.ipynb

Download Python source code: plot_roc_curve_visualization_api.py

Download zipped: plot_roc_curve_visualization_api.zip

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

Receiver Operating Characteristic (ROC) с перекрёстной проверкой

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

Основные нововведения scikit-learn 0.22

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

© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/auto_examples/miscellaneous/plot_roc_curve_visualization_api.html

Spec-Zone.ru

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