Spec-Zone.ru › scikit-learn

Примечание

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

Визуализация с помощью объектов отображения

В этом примере мы создадим объекты отображения: ConfusionMatrixDisplay, RocCurveDisplay и PrecisionRecallDisplay — непосредственно на основе соответствующих метрик. Это альтернатива использованию соответствующих функций построения графиков, если предсказания модели уже вычислены или их вычисление требует больших затрат. Обратите внимание, что это расширенный способ использования, и в целом мы рекомендуем применять соответствующие функции построения графиков.

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

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

В этом примере мы загружаем набор данных центра службы переливания крови с сайта OpenML. Это задача бинарной классификации, в которой целевой признак указывает, сдавал ли человек кровь. Затем данные разделяются на обучающую и тестовую выборки, а логистическая регрессия обучается на обучающей выборке.

from sklearn.datasets import fetch_openml
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

X, y = fetch_openml(data_id=1464, return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y)

clf = make_pipeline(StandardScaler(), LogisticRegression(random_state=0))
clf.fit(X_train, y_train)
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression(random_state=0))])
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить представление HTML, или доверьте работе содержимое записной книжки.
На GitHub представление HTML отобразить не удаётся. Попробуйте загрузить эту страницу с помощью nbviewer.org.
Параметры
steps steps: список кортежей

Список кортежей (имя шага, оцениватель), которые объединяются в
последовательность. Для совместимости с API scikit-learn все шаги
должны определять `fit`. Все шаги, кроме последнего, также должны определять `transform`. Дополнительные сведения см. в разделе
:ref:`Объединение оценивателей <combining_estimators>`.
[('standardscaler', ...), ('logisticregression', ...)]
transform_input transform_input: список строк, по умолчанию None

Имена параметров :term:`метаданных`, которые должны быть преобразованы конвейером перед передачей шагу, который их использует.

Это позволяет преобразовывать некоторые аргументы, передаваемые в ``fit`` (кроме ``X``), с помощью шагов конвейера вплоть до шага, которому они нужны. Требование задаётся с помощью :ref:`маршрутизации метаданных <metadata_routing>`.
Например, это можно использовать для передачи проверочной выборки через конвейер.

Этот параметр можно задать, только если включена маршрутизация метаданных. Её можно включить с помощью ``sklearn.set_config(enable_metadata_routing=True)``.

.. добавлено в версии:: 1.6
None
memory memory: строка или объект с интерфейсом joblib.Memory, по умолчанию None

Используется для кэширования обученных преобразователей конвейера. Последний шаг никогда не кэшируется, даже если он является преобразователем. По умолчанию кэширование не выполняется. Если указана строка, она задаёт путь к каталогу кэширования. Включение кэширования приводит к созданию копий преобразователей перед обучением. Поэтому экземпляр преобразователя, переданный конвейеру, нельзя проверить напрямую. Для проверки оценивателей внутри конвейера используйте атрибут ``named_steps`` или ``steps``. Кэширование преобразователей полезно, если обучение занимает много времени. Пример включения кэширования см. в разделе
:ref:`sphx_glr_auto_examples_neighbors_plot_caching_nearest_neighbors.py`.
None
verbose verbose: bool, по умолчанию False

Если значение равно True, по завершении каждого шага выводится время, затраченное на его обучение.
False
Обученные атрибуты
Имя Тип Значение
classes_ classes_: ndarray формы (n_classes,)

Метки классов. Существует только в том случае, если последний шаг конвейера является классификатором.
ndarray[object](2,) ['1','2']
feature_names_in_ feature_names_in_: ndarray формы (`n_features_in_`,)

Имена признаков, обнаруженных во время :term:`fit`. Определяется, только если нижележащий оцениватель предоставляет такой атрибут при обучении.

.. добавлено в версии:: 1.0
ndarray[object](4,) ['V1','V2','V3','V4']
n_features_in_ n_features_in_: int

Количество признаков, обнаруженных во время :term:`fit`. Определяется, только если первый нижележащий оцениватель в `steps` предоставляет такой атрибут при обучении.

.. добавлено в версии:: 0.24
int 4
Параметры
copy copy: bool, по умолчанию True

Если значение равно False, предпринимается попытка избежать копирования и выполнить масштабирование на месте.
Это не всегда гарантировано; например, если данные не являются массивом NumPy или разреженной матрицей scipy.sparse CSR, может быть возвращена копия.
True
with_mean with_mean: bool, по умолчанию True

Если значение равно True, перед масштабированием данные центрируются.
Это не работает (и вызывает исключение) для разреженных матриц, поскольку центрирование требует создания плотной матрицы, которая в типичных случаях может оказаться слишком большой для размещения в памяти.
True
with_std with_std: bool, по умолчанию True

Если значение равно True, данные масштабируются до единичной дисперсии (или, что эквивалентно, единичного стандартного отклонения).
True
Обученные атрибуты
Имя Тип Значение
feature_names_in_ feature_names_in_: ndarray формы (`n_features_in_`,)

Имена признаков, обнаруженных во время :term:`fit`. Определяется, только если `X` содержит имена признаков, представленные строками.

.. добавлено в версии:: 1.0
ndarray[object](4,) ['V1','V2','V3','V4']
mean_ mean_: ndarray формы (n_features,) или None

Среднее значение для каждого признака в обучающем наборе.
Равно ``None``, если ``with_mean=False`` и ``with_std=False``.
ndarray[float64](4,) [ 9.82, 5.32,1330.66, 34.18]
n_features_in_ n_features_in_: int

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

.. добавлено в версии:: 0.24
int 4
n_samples_seen_ n_samples_seen_: int или ndarray формы (n_features,)

Количество образцов, обработанных оценивателем для каждого признака.
Если пропущенных образцов нет, ``n_samples_seen`` будет целым числом, иначе — массивом типа int. Если используются `sample_weights`, значение будет числом с плавающей точкой (при отсутствии пропусков) или массивом типа float, содержащим сумму весов, учтённых на данный момент.
Сбрасывается при новых вызовах fit, но увеличивается при вызовах ``partial_fit``.
float64 561
scale_ scale_: ndarray формы (n_features,) или None

Индивидуальный коэффициент масштабирования данных для каждого признака, обеспечивающий нулевое среднее и единичную дисперсию. Обычно он вычисляется с помощью `np.sqrt(var_)`. Если дисперсия равна нулю, добиться единичной дисперсии невозможно, поэтому данные остаются без изменений, а коэффициент масштабирования равен 1. `scale_` равен `None`, если `with_std=False`.

.. добавлено в версии:: 0.17
*scale_*
ndarray[float64](4,) [ 8.3 , 5.34,1335.97, 23.33]
var_ var_: ndarray формы (n_features,) или None

Дисперсия каждого признака в обучающем наборе. Используется для вычисления `scale_`. Равно ``None``, если ``with_mean=False`` и ``with_std=False``.
ndarray[float64](4,) [ 68.95, 28.56,1784826.48, 544.31]
4 признака
V1
V2
V3
V4
Параметры
random_state random_state: int, экземпляр RandomState, по умолчанию=None

Используется, когда ``solver`` == 'sag', 'saga' или 'liblinear', для перемешивания
данных. Подробнее см. :term:`Глоссарий <random_state>`.
0
penalty penalty: {'l1', 'l2', 'elasticnet', None}, по умолчанию='l2'

Указывает норму штрафа:

- `None`: штраф не добавляется;
- `'l2'`: добавляется штрафной член L2; это вариант по умолчанию;
- `'l1'`: добавляется штрафной член L1;
- `'elasticnet'`: добавляются штрафные члены L1 и L2.

.. warning::
Некоторые штрафы могут быть несовместимы с отдельными решателями. См. параметр
`solver` ниже, чтобы узнать о совместимости штрафа и
решателя.

.. versionadded:: 0.19
штраф L1 с решателем SAGA (поддержка 'multinomial' + L1)

.. deprecated:: 1.8
`penalty` объявлен устаревшим в версии 1.8 и будет удалён в версии 1.10.
Вместо него используйте `l1_ratio` и `C`. Для `penalty='l2'` задайте `l1_ratio=0`,
для `penalty='l1'` — `l1_ratio=1`, для `penalty='elasticnet'` задайте `l1_ratio`
любым числом с плавающей точкой от 0 до 1, а для `penalty=None` — `C=np.inf`.
'deprecated'
C C: число с плавающей точкой, по умолчанию=1.0

Обратная величина силы регуляризации; должна быть положительным числом с плавающей точкой.
Как и в машинах опорных векторов, меньшие значения означают более сильную
регуляризацию. При `C=np.inf` логистическая регрессия не штрафуется.
Визуальный пример влияния настройки параметра `C`
при штрафе L1 см. в разделе:
:ref:`sphx_glr_auto_examples_linear_model_plot_logistic_path.py`.
1.0
l1_ratio l1_ratio: число с плавающей точкой, по умолчанию=0.0

Параметр смешивания Elastic-Net, где `0 <= l1_ratio <= 1`. Значение
`l1_ratio=1` задаёт чистый штраф L1, а `l1_ratio=0` — чистый штраф L2.
Любое значение от 0 до 1 задаёт штраф Elastic-Net вида
`l1_ratio * L1 + (1 - l1_ratio) * L2`.

.. warning::
Некоторые значения `l1_ratio`, то есть некоторые штрафы, могут быть несовместимы
с отдельными решателями. См. параметр `solver` ниже, чтобы узнать о совместимости
штрафа и решателя.

.. versionchanged:: 1.8
Значение по умолчанию изменено с None на 0.0.

.. deprecated:: 1.8
`None` объявлен устаревшим и будет удалён в версии 1.10. Всегда используйте
`l1_ratio` для указания типа штрафа.
0.0
dual dual: bool, по умолчанию=False

Двойственная (с ограничениями) или прямая (регуляризованная, см. также
:ref:`это уравнение <regularized-logistic-loss>`) формулировка. Двойственная формулировка
реализована только для штрафа L2 с решателем liblinear. Предпочтительно задавать `dual=False`,
если n_samples > n_features.
False
tol tol: число с плавающей точкой, по умолчанию=1e-4

Допуск для критерия остановки.
0.0001
fit_intercept fit_intercept: bool, по умолчанию=True

Указывает, следует ли добавлять константу (также называемую смещением или свободным членом)
в функцию принятия решения.
True
intercept_scaling intercept_scaling: число с плавающей точкой, по умолчанию=1

Имеет значение только при использовании решателя `liblinear`
и если `self.fit_intercept` имеет значение `True`. В этом случае `x` становится
`[x, self.intercept_scaling]`,
то есть к вектору экземпляра добавляется «синтетический» признак с постоянным значением,
равным `intercept_scaling`.
Свободный член становится равен
``intercept_scaling * synthetic_feature_weight``.

.. note::
Вес синтетического признака подвергается регуляризации L1 или L2,
как и все остальные признаки.
Чтобы уменьшить влияние регуляризации на вес синтетического признака
(и, следовательно, на свободный член), необходимо увеличить `intercept_scaling`.
1
class_weight class_weight: dict или 'balanced', по умолчанию=None

Веса классов в формате ``{class_label: weight}``.
Если не задано, считается, что вес каждого класса равен единице.

Режим "balanced" автоматически использует значения y, чтобы назначить
веса, обратно пропорциональные частотам классов во входных данных,
по формуле ``n_samples / (n_classes * np.bincount(y))``.

Если задан параметр sample_weight, эти веса будут умножены на него (он передаётся
через метод fit).

.. versionadded:: 0.17
*class_weight='balanced'*
None
solver solver: {'lbfgs', 'liblinear', 'newton-cg', 'newton-cholesky', 'sag', 'saga'}, по умолчанию='lbfgs'

Алгоритм, используемый для решения задачи оптимизации. По умолчанию — 'lbfgs'.
При выборе решателя можно учитывать следующие факторы:

- 'lbfgs' — хороший решатель по умолчанию, поскольку он достаточно хорошо работает с широким
классом задач.
- Для задач :term:`многоклассовой классификации` (`n_classes >= 3`) все решатели, кроме
'liblinear', минимизируют полную мультиномиальную функцию потерь; 'liblinear' вызовет
ошибку.
- 'newton-cholesky' — хороший выбор, если
`n_samples` >> `n_features * n_classes`, особенно для категориальных признаков с редкими категориями,
закодированных методом one-hot. Учтите, что использование памяти этим решателем
квадратично зависит от `n_features * n_classes`,
поскольку он явно вычисляет полную матрицу Гессе.
- Для небольших наборов данных хорошо подходит 'liblinear', тогда как 'sag'
и 'saga' быстрее работают на больших наборах;
- 'liblinear' по умолчанию поддерживает только бинарную классификацию. Чтобы применить схему
«один против остальных» для многоклассовой классификации, его можно обернуть в
:class:`~sklearn.multiclass.OneVsRestClassifier`.

.. warning::
Выбор алгоритма зависит от выбранного штрафа (`l1_ratio=0`
для штрафа L2, `l1_ratio=1` для штрафа L1 и `0 < l1_ratio < 1` для
Elastic-Net), а также от поддержки (мультиномиальной) многоклассовой классификации:

================= ======================== ======================
решатель l1_ratio мультиномиальная многоклассовая классификация
================= ======================== ======================
'lbfgs' l1_ratio=0 да
'liblinear' l1_ratio=1 или l1_ratio=0 нет
'newton-cg' l1_ratio=0 да
'newton-cholesky' l1_ratio=0 да
'sag' l1_ratio=0 да
'saga' 0<=l1_ratio<=1 да
================= ======================== ======================

.. note::
Быстрая сходимость 'sag' и 'saga' гарантируется только для признаков
с примерно одинаковым масштабом. Данные можно предварительно обработать
с помощью средства масштабирования из :mod:`sklearn.preprocessing`.

.. seealso::
Дополнительные сведения о :class:`LogisticRegression` см. в :ref:`Руководстве пользователя <Logistic_regression>`,
а также в :ref:`таблице <logistic_regression_solvers>`,
где приведена сводка по поддержке решателей и штрафов.

.. versionadded:: 0.17
Решатель стохастического градиента со средним (SAG). Поддержка мультиномиальной классификации добавлена в
версии 0.18.
.. versionadded:: 0.19
Решатель SAGA.
.. versionchanged:: 0.22
В версии 0.22 решатель по умолчанию изменён с 'liblinear' на 'lbfgs'.
.. versionadded:: 1.2
Решатель newton-cholesky. Поддержка мультиномиальной классификации добавлена в версии 1.6.
'lbfgs'
max_iter max_iter: int, по умолчанию=100

Максимальное число итераций, выполняемых решателями для достижения сходимости.
100
verbose verbose: int, по умолчанию=0

Для решателей liblinear и lbfgs задайте любое положительное
число, чтобы включить подробный вывод.
0
warm_start warm_start: bool, по умолчанию=False

Если задано значение True, решение предыдущего вызова fit используется
как начальное приближение; в противном случае предыдущее решение просто удаляется.
Не используется для решателя liblinear. См. :term:`глоссарий <warm_start>`.

.. versionadded:: 0.17
*warm_start* для поддержки решателей *lbfgs*, *newton-cg*, *sag*, *saga*.
False
n_jobs n_jobs: int, по умолчанию=None

Не оказывает никакого эффекта.

.. deprecated:: 1.8
`n_jobs` объявлен устаревшим в версии 1.8 и будет удалён в версии 1.10.
None
Атрибуты обученной модели
Имя Тип Значение
classes_ classes_: ndarray размера (n_classes, )

Список меток классов, известных классификатору.
ndarray[object](2,) ['1','2']
coef_ coef_: ndarray или CSR-матрица размера (1, n_features) или (n_classes, n_features)

Коэффициенты признаков в функции принятия решения.

`coef_` имеет размер (1, n_features), если рассматриваемая задача является бинарной.

По умолчанию создаётся плотный массив, но его можно преобразовать в
разреженный формат (CSR) с помощью :meth:`sparsify` (это может быть полезно
при регуляризации L1, когда многие коэффициенты равны нулю), а затем снова в
плотный с помощью :meth:`densify`.
ndarray[float64](1, 4) [[-0.74, 0.38, 0.38,-0.53]]
intercept_ intercept_: ndarray размера (1,) или (n_classes,)

Свободный член (также называемый смещением), добавляемый к функции принятия решения.

Если для `fit_intercept` задано значение False, свободный член равен нулю.
intercept_ имеет размер (1,), если рассматриваемая задача является бинарной.
ndarray[float64](1,) [-1.41]
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 4
n_iter_ n_iter_: ndarray размера (1, )

Фактическое количество итераций для всех классов.

.. versionchanged:: 0.20

В SciPy <= 1.0.0 количество итераций lbfgs могло превышать
``max_iter``. Теперь ``n_iter_`` будет показывать не более ``max_iter``.
ndarray[int32](1,) [8]


Создание ConfusionMatrixDisplay

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

from sklearn.metrics import ConfusionMatrixDisplay, confusion_matrix

y_pred = clf.predict(X_test)
cm = confusion_matrix(y_test, y_pred)

cm_display = ConfusionMatrixDisplay(cm).plot()
plot display object visualization

Создание RocCurveDisplay

Для построения ROC-кривой требуются либо вероятности, либо значения решения оценщика без применения порога. Поскольку логистическая регрессия предоставляет функцию принятия решения, используем её для построения ROC-кривой:

from sklearn.metrics import RocCurveDisplay, roc_curve

y_score = clf.decision_function(X_test)

fpr, tpr, _ = roc_curve(y_test, y_score, pos_label=clf.classes_[1])
roc_display = RocCurveDisplay(fpr=fpr, tpr=tpr).plot()
plot display object visualization

Создание PrecisionRecallDisplay

Аналогичным образом, кривую точности и полноты можно построить, используя y_score из предыдущих разделов о прогнозировании.

from sklearn.metrics import PrecisionRecallDisplay, precision_recall_curve

prec, recall, _ = precision_recall_curve(y_test, y_score, pos_label=clf.classes_[1])
pr_display = PrecisionRecallDisplay(precision=prec, recall=recall).plot()
plot display object visualization

Объединение объектов визуализации на одном графике

Объекты визуализации хранят вычисленные значения, переданные в качестве аргументов. Благодаря этому визуализации можно легко объединять с помощью API matplotlib. В следующем примере мы размещаем объекты визуализации рядом друг с другом в одном ряду.

import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 8))

roc_display.plot(ax=ax1)
pr_display.plot(ax=ax2)
plt.show()
plot display object visualization

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_display_object_visualization.ipynb

Download Python source code: plot_display_object_visualization.py

Download zipped: plot_display_object_visualization.zip

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

Precision-Recall

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

Многоклассовая характеристика работы приёмника (ROC)

Настройка порога принятия решения для обучения с учётом затрат

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

Spec-Zone.ru

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