Spec-Zone.ru › scikit-learn

Примечание

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

Выбор метода снижения размерности с помощью Pipeline и GridSearchCV

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

Кроме того, Pipeline можно создать с аргументом memory, чтобы кэшировать преобразователи в конвейере и не обучать одни и те же преобразователи снова и снова.

Обратите внимание, что использование memory для включения кэширования становится актуальным, когда обучение преобразователя требует значительных затрат.

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

Иллюстрация Pipeline и GridSearchCV

import matplotlib.pyplot as plt
import numpy as np

from sklearn.datasets import load_digits
from sklearn.decomposition import NMF, PCA
from sklearn.feature_selection import SelectKBest, mutual_info_classif
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import MinMaxScaler
from sklearn.svm import LinearSVC

X, y = load_digits(return_X_y=True)

pipe = Pipeline(
    [
        ("scaling", MinMaxScaler()),
        # the reduce_dim stage is populated by the param_grid
        ("reduce_dim", "passthrough"),
        ("classify", LinearSVC(dual=False, max_iter=10000)),
    ]
)

N_FEATURES_OPTIONS = [2, 4, 8]
C_OPTIONS = [1, 10, 100, 1000]
param_grid = [
    {
        "reduce_dim": [PCA(iterated_power=7), NMF(max_iter=1_000)],
        "reduce_dim__n_components": N_FEATURES_OPTIONS,
        "classify__C": C_OPTIONS,
    },
    {
        "reduce_dim": [SelectKBest(mutual_info_classif)],
        "reduce_dim__k": N_FEATURES_OPTIONS,
        "classify__C": C_OPTIONS,
    },
]
reducer_labels = ["PCA", "NMF", "KBest(mutual_info_classif)"]

grid = GridSearchCV(pipe, n_jobs=1, param_grid=param_grid)
grid.fit(X, y)
GridSearchCV(estimator=Pipeline(steps=[('scaling', MinMaxScaler()),
                                       ('reduce_dim', 'passthrough'),
                                       ('classify',
                                        LinearSVC(dual=False,
                                                  max_iter=10000))]),
             n_jobs=1,
             param_grid=[{'classify__C': [1, 10, 100, 1000],
                          'reduce_dim': [PCA(iterated_power=7),
                                         NMF(max_iter=1000)],
                          'reduce_dim__n_components': [2, 4, 8]},
                         {'classify__C': [1, 10, 100, 1000],
                          'reduce_dim': [SelectKBest(score_func=<function mutual_info_classif at 0x7841675022a0>)],
                          'reduce_dim__k': [2, 4, 8]}])
В среде Jupyter повторно запустите эту ячейку, чтобы отобразить HTML-представление, или доверьте работу ноутбуку.
На GitHub HTML-представление не отображается; попробуйте загрузить эту страницу с помощью nbviewer.org.
Параметры
estimator estimator: объект оценщика

Предполагается, что он реализует интерфейс оценщика scikit-learn.
Оценщик должен предоставлять функцию ``score``
или необходимо передать ``scoring``.
Pipeline(step...iter=10000))])
param_grid param_grid: словарь или список словарей

Словарь, в котором имена параметров (`str`) являются ключами, а списки
значений параметров, которые следует проверить, — значениями; либо список таких
словарей. В последнем случае исследуются сетки, заданные каждым словарем
в списке. Это позволяет выполнять поиск по любой последовательности
значений параметров.
[{'classify__C': [1, 10, ...], 'reduce_dim': [PCA(iterated_power=7), NMF(max_iter=1000)], 'reduce_dim__n_components': [2, 4, ...]}, {'classify__C': [1, 10, ...], 'reduce_dim': [SelectKBest(s...7841675022a0>)], 'reduce_dim__k': [2, 4, ...]}]
n_jobs n_jobs: int, по умолчанию=None

Количество задач для параллельного выполнения.
``None`` означает 1, если только выполнение не происходит в контексте :obj:`joblib.parallel_backend`.
``-1`` означает использование всех процессоров. Подробнее см. :term:`Глоссарий <n_jobs>`.

.. versionchanged:: v0.20
Значение `n_jobs` по умолчанию изменено с 1 на None
1
scoring scoring: str, вызываемый объект, список, кортеж или dict, по умолчанию=None

Стратегия оценки эффективности модели, проверенной методом перекрестной проверки, на
тестовом наборе.

Если `scoring` задает одну метрику, можно использовать:

- одну строку (см. :ref:`scoring_string_names`);
- вызываемый объект (см. :ref:`scoring_callable`), возвращающий одно значение;
- `None`: используется :ref:`критерий оценки по умолчанию <scoring_api_overview>` для `estimator`.

Если `scoring` задает несколько метрик, можно использовать:

- список или кортеж уникальных строк;
- вызываемый объект, возвращающий словарь, в котором ключи — названия метрик,
а значения — результаты вычисления метрик;
- словарь, в котором названия метрик являются ключами, а вызываемые объекты — значениями.

Пример см. в разделе :ref:`multimetric_grid_search`.
None
refit refit: bool, str или вызываемый объект, по умолчанию=True

Повторно обучить оценщик на всем наборе данных с использованием
найденных лучших параметров.

При оценке по нескольким метрикам здесь нужно указать `str` с именем
оценщика, который будет использоваться для поиска лучших параметров при повторном обучении
оценщика в конце.

Если при выборе лучшего оценщика важны не только максимальные оценки,
для ``refit`` можно задать функцию, которая возвращает выбранный ``best_index_`` на основе ``cv_results_``. В этом
случае ``best_estimator_`` и ``best_params_`` будут установлены
согласно возвращенному ``best_index_``, а атрибут ``best_score_``
будет недоступен.

Повторно обученный оценщик доступен через атрибут ``best_estimator_``
и позволяет напрямую вызывать ``predict`` для этого экземпляра
``GridSearchCV``.

При оценке по нескольким метрикам атрибуты ``best_index_``,
``best_score_`` и ``best_params_`` будут доступны только в том случае,
если задан ``refit``; все они будут определены относительно указанной метрики.

Дополнительные сведения об оценке по нескольким метрикам см. в описании параметра ``scoring``.

О том, как разработать пользовательскую стратегию выбора с помощью вызываемого объекта
в параметре `refit`, см. :ref:`sphx_glr_auto_examples_model_selection_plot_grid_search_digits.py`.

Пример использования ``refit=callable`` для балансировки сложности модели
и оценки при перекрестной проверке см. в :ref:`этом примере
<sphx_glr_auto_examples_model_selection_plot_grid_search_refit_callable.py>`.

.. versionchanged:: 0.20
Добавлена поддержка вызываемых объектов.
True
cv cv: int, генератор перекрестной проверки или итерируемый объект, по умолчанию=None

Определяет стратегию разбиения для перекрестной проверки.
Возможные значения cv:

- None — использовать перекрестную проверку с 5 блоками по умолчанию;
- целое число — задать количество блоков в `(Stratified)KFold`;
- :term:`разделитель CV`;
- итерируемый объект, выдающий разбиения (train, test) в виде массивов индексов.

Для целочисленных значений/None, если оценщик является классификатором, а ``y`` —
бинарная или многоклассовая переменная, используется :class:`StratifiedKFold`. Во всех
остальных случаях используется :class:`KFold`. Эти разделители создаются
с `shuffle=False`, поэтому разбиения будут одинаковыми при каждом вызове.

Различные стратегии перекрестной проверки, доступные здесь, описаны в :ref:`руководстве пользователя <cross_validation>`.

.. versionchanged:: 0.22
Значение ``cv`` по умолчанию изменено с 3 блоков на 5, если параметр равен None.
None
verbose verbose: int, по умолчанию=0

Управляет подробностью сведений, выводимых во время обучения: чем выше
значение, тем подробнее журнал.

- 0 : сообщения не выводятся;
- >=1 : сводка общего количества обучений;
- >=2 : время вычислений для каждого блока и кандидата параметров;
- >=3 : индексы блоков и оценки;
- >=10 : индексы кандидатов параметров и сообщения START перед каждым обучением.
0
pre_dispatch pre_dispatch: int или str, по умолчанию='2*n_jobs'

Управляет количеством задач, отправляемых на выполнение в ходе параллельного
запуска. Уменьшение этого числа может помочь избежать
резкого роста потребления памяти, когда отправляется больше задач,
чем могут обработать процессоры. Возможные значения параметра:

- None: все задачи создаются и запускаются сразу. Используйте
это значение для легких и быстро выполняющихся задач, чтобы избежать задержек из-за запуска
задач по требованию;
- int: точное общее количество запускаемых задач;
- str: выражение, задающее количество задач через n_jobs, например '2*n_jobs'.
'2*n_jobs'
error_score error_score: 'raise' или числовое значение, по умолчанию=np.nan

Значение, присваиваемое оценке, если при обучении оценщика возникает ошибка.
Если задано 'raise', ошибка будет вызвана повторно. Если указано числовое значение,
вызывается FitFailedWarning. Этот параметр не влияет на этап повторного обучения,
на котором ошибка всегда будет вызвана.
nan
return_train_score return_train_score: bool, по умолчанию=False

Если ``False``, атрибут ``cv_results_`` не будет содержать оценки на обучающих
данных.
Вычисление оценок на обучающих данных позволяет понять, как различные
значения параметров влияют на баланс переобучения и недообучения.
Однако вычисление оценок на обучающем наборе может требовать значительных вычислительных ресурсов
и не является строго необходимым для выбора параметров, обеспечивающих
наилучшую обобщающую способность.

.. versionadded:: 0.19

.. versionchanged:: 0.21
Значение по умолчанию изменено с ``True`` на ``False``
False
Обученные атрибуты
Имя Тип Значение
best_estimator_ best_estimator_: оценщик

Оценщик, выбранный в результате поиска, то есть оценщик,
который показал наивысшую оценку (или наименьшую потерю, если она задана)
на отложенных данных. Недоступен, если ``refit=False``.

Дополнительные сведения о допустимых значениях см. в описании параметра ``refit``.
Pipeline Pipeline(step...iter=10000))])
best_index_ best_index_: int

Индекс (в массивах ``cv_results_``), соответствующий наилучшему
набору параметров-кандидатов.

Словарь по адресу ``search.cv_results_['params'][search.best_index_]`` содержит
настройки параметров лучшей модели, обеспечившей наивысшую
среднюю оценку (``search.best_score_``).

При оценке по нескольким метрикам доступен только в том случае, если задан ``refit``.
int64 np.int64(2)
best_params_ best_params_: dict

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

При оценке по нескольким метрикам доступен только в том случае, если задан ``refit``.
dict {'cl..._C': 1, 're...im': PCA(iterated_power=7), 're...ts': 8}
best_score_ best_score_: float

Средняя оценка лучшего оценщика при перекрестной проверке.

При оценке по нескольким метрикам доступен только в том случае, если задан ``refit``.

Этот атрибут недоступен, если ``refit`` является функцией.
float64 0.8576
classes_ classes_: ndarray формы (n_classes,)

Метки классов. Атрибут доступен только в том случае, если задан ``refit`` и
базовый оценщик является классификатором.
ndarray[int64](10,) [0,1,2,...,7,8,9]
cv_results_ cv_results_: dict из (маскированных) массивов numpy

Словарь, в котором ключи соответствуют заголовкам столбцов, а значения — столбцам; его можно
импортировать в ``DataFrame`` pandas.

Например, приведенная ниже таблица

+------------+-----------+------------+-----------------+---+---------+
|param_kernel|param_gamma|param_degree|split0_test_score|...|rank_t...|
+============+===========+============+=================+===+=========+
| 'poly' | -- | 2 | 0.80 |...| 2 |
+------------+-----------+------------+-----------------+---+---------+
| 'poly' | -- | 3 | 0.70 |...| 4 |
+------------+-----------+------------+-----------------+---+---------+
| 'rbf' | 0.1 | -- | 0.80 |...| 3 |
+------------+-----------+------------+-----------------+---+---------+
| 'rbf' | 0.2 | -- | 0.93 |...| 1 |
+------------+-----------+------------+-----------------+---+---------+

будет представлена словарем ``cv_results_`` следующего вида::

{
'param_kernel': masked_array(data = ['poly', 'poly', 'rbf', 'rbf'],
mask = [False False False False]...)
'param_gamma': masked_array(data = [-- -- 0.1 0.2],
mask = [ True True False False]...),
'param_degree': masked_array(data = [2.0 3.0 -- --],
mask = [False False True True]...),
'split0_test_score' : [0.80, 0.70, 0.80, 0.93],
'split1_test_score' : [0.82, 0.50, 0.70, 0.78],
'mean_test_score' : [0.81, 0.60, 0.75, 0.85],
'std_test_score' : [0.01, 0.10, 0.05, 0.08],
'rank_test_score' : [2, 4, 3, 1],
'split0_train_score' : [0.80, 0.92, 0.70, 0.93],
'split1_train_score' : [0.82, 0.55, 0.70, 0.87],
'mean_train_score' : [0.81, 0.74, 0.70, 0.90],
'std_train_score' : [0.01, 0.19, 0.00, 0.03],
'mean_fit_time' : [0.73, 0.63, 0.43, 0.49],
'std_fit_time' : [0.01, 0.02, 0.01, 0.01],
'mean_score_time' : [0.01, 0.06, 0.04, 0.04],
'std_score_time' : [0.00, 0.00, 0.00, 0.01],
'params' : [{'kernel': 'poly', 'degree': 2}, ...],
}

Пример визуализации и интерпретации результатов GridSearch см. в разделе
:ref:`sphx_glr_auto_examples_model_selection_plot_grid_search_stats.py`.

ПРИМЕЧАНИЕ

Ключ ``'params'`` используется для хранения списка словарей
с настройками параметров для всех кандидатов.

Значения ``mean_fit_time``, ``std_fit_time``, ``mean_score_time`` и
``std_score_time`` указаны в секундах.

При оценке по нескольким метрикам результаты всех оценщиков
доступны в словаре ``cv_results_`` под ключами, заканчивающимися именем соответствующего
оценщика (``'_<scorer_name>'``), а не ``'_score'``, как показано
выше. (например, 'split0_test_precision', 'mean_train_precision' и т. д.)
dict {'me...me': array([0.01, ..., 0.76, 0.8 ]), 'me...me': array([0., 0.... 0., 0.]), 'me...re': array([0.52, ..., 0.5 , 0.72]), 'pa..._C': masked_array(..._value=999999), ...}
multimetric_ multimetric_: bool

Вычисляют ли оценщики несколько метрик.
bool False
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 64
n_splits_ n_splits_: int

Количество разбиений перекрестной проверки (блоков/итераций).
int 5
refit_time_ refit_time_: float

Время в секундах, затраченное на повторное обучение лучшей модели на всем наборе данных.

Доступен только в том случае, если ``refit`` не равен False.

.. versionadded:: 0.20
float 0.01223
scorer_ scorer_: функция или dict

Функция оценки, применяемая к отложенным данным для выбора наилучших
параметров модели.

При оценке по нескольким метрикам этот атрибут содержит проверенный
словарь ``scoring``, связывающий ключ оценщика с вызываемым объектом оценщика.
_PassthroughScorer Pipeline.score
Параметры
feature_range feature_range: tuple (min, max), по умолчанию=(0, 1)

Желаемый диапазон преобразованных данных.
(0, ...)
copy copy: bool, по умолчанию=True

Установите False, чтобы выполнить нормализацию строк на месте и избежать
копирования (если входные данные уже являются массивом numpy).
True
clip clip: bool, по умолчанию=False

Установите True, чтобы ограничивать преобразованные значения отложенных данных
заданным `feature_range`.
Поскольку этот параметр ограничивает значения, `inverse_transform` может
не восстановить исходные данные.

.. note::
Установка `clip=True` не предотвращает дрейф признаков (сдвиг распределения
между обучающими и тестовыми данными). Преобразованные значения ограничиваются
диапазоном `feature_range`, что помогает избежать нежелательного поведения моделей,
чувствительных к входным значениям вне диапазона (например, линейных моделей).
Используйте с осторожностью, поскольку ограничение может исказить распределение тестовых данных.

.. versionadded:: 0.24
False
Атрибуты после обучения
Имя Тип Значение
data_max_ data_max_: ndarray формы (n_features,)

Максимальное значение каждого признака, наблюдавшееся в данных

.. versionadded:: 0.17
атрибут *data_max_*
ndarray[float64](64,) [ 0., 8.,16.,...,16.,16.,16.]
data_min_ data_min_: ndarray формы (n_features,)

Минимальное значение каждого признака, наблюдавшееся в данных

.. versionadded:: 0.17
*data_min_*
ndarray[float64](64,) [0.,0.,0.,...,0.,0.,0.]
data_range_ data_range_: ndarray формы (n_features,)

Диапазон каждого признака ``(data_max_ - data_min_)``, наблюдавшийся в данных

.. versionadded:: 0.17
*data_range_*
ndarray[float64](64,) [ 0., 8.,16.,...,16.,16.,16.]
min_ min_: ndarray формы (n_features,)

Корректировка минимума для каждого признака. Эквивалентно
``min - X.min(axis=0) * self.scale_``
ndarray[float64](64,) [0.,0.,0.,...,0.,0.,0.]
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 64
n_samples_seen_ n_samples_seen_: int

Количество примеров, обработанных оценивателем.
Сбрасывается при новых вызовах fit, но увеличивается при вызовах
``partial_fit``.
int 1797
scale_ scale_: ndarray формы (n_features,)

Относительное масштабирование данных для каждого признака. Эквивалентно
``(max - min) / (X.max(axis=0) - X.min(axis=0))``

.. versionadded:: 0.17
атрибут *scale_*.
ndarray[float64](64,) [1. ,0.12,0.06,...,0.06,0.06,0.06]
64 признака
x0
x1
x2
x3
x4
x5
x6
x7
x8
x9
x10
x11
x12
x13
x14
x15
x16
x17
x18
x19
x20
x21
x22
x23
x24
x25
x26
x27
x28
x29
x30
x31
x32
x33
x34
x35
x36
x37
x38
x39
x40
x41
x42
x43
x44
x45
x46
x47
x48
x49
x50
x51
x52
x53
x54
x55
x56
x57
x58
x59
x60
x61
x62
x63
Параметры
n_components n_components: int, float или 'mle', по умолчанию=None

Количество сохраняемых компонент.
Если n_components не задан, сохраняются все компоненты::

n_components == min(n_samples, n_features)

Если ``n_components == 'mle'`` и ``svd_solver == 'full'``, для оценки
размерности используется метод максимального правдоподобия Minka. Значение
``n_components == 'mle'`` приводит к интерпретации ``svd_solver == 'auto'``
как ``svd_solver == 'full'``.

Если ``0 < n_components < 1`` и ``svd_solver == 'full'``, выбирается такое
число компонент, чтобы объясняемая дисперсия превышала процент, заданный n_components.

Если ``svd_solver == 'arpack'``, число компонент должно быть
строго меньше минимального из n_features и n_samples.

Таким образом, в случае None получается::

n_components == min(n_samples, n_features) - 1
8
iterated_power iterated_power: int или 'auto', по умолчанию='auto'

Количество итераций степенного метода, вычисляемое при
svd_solver == 'randomized'.
Должно находиться в диапазоне [0, infinity).

.. versionadded:: 0.18.0
7
copy copy: bool, по умолчанию=True

Если False, данные, переданные в fit, перезаписываются, а вызов
fit(X).transform(X) не даст ожидаемых результатов;
вместо него используйте fit_transform(X).
True
whiten whiten: bool, по умолчанию=False

Если True (по умолчанию False), векторы `components_` умножаются
на квадратный корень из n_samples, а затем делятся на сингулярные значения,
чтобы обеспечить некоррелированные выходные данные с единичными дисперсиями по компонентам.

Отбеливание удаляет часть информации из преобразованного сигнала
(относительные масштабы дисперсии компонент), но иногда может
повысить точность прогнозирования последующих оценивателей,
обеспечивая соответствие данных некоторым жестко заданным предположениям.
False
svd_solver svd_solver: {'auto', 'full', 'covariance_eigh', 'arpack', 'randomized'}, по умолчанию='auto'

"auto":
Решатель выбирается согласно политике 'auto' по умолчанию на основе `X.shape` и
`n_components`: если входные данные содержат менее 1000 признаков и
число примеров более чем в 10 раз превышает число признаков, используется решатель
"covariance_eigh". В противном случае, если размер входных данных превышает 500x500,
а число извлекаемых компонент меньше 80% от наименьшего размера данных,
выбирается более эффективный метод "randomized". Иначе вычисляется точное
полное SVD "full" с возможным последующим усечением.
"full":
Выполняется точное полное SVD с вызовом стандартного решателя LAPACK через
`scipy.linalg.svd`; компоненты выбираются постобработкой.
"covariance_eigh":
Предварительно вычисляется ковариационная матрица (для центрированных данных),
выполняется классическое разложение этой матрицы на собственные значения и векторы,
обычно с использованием LAPACK, после чего компоненты выбираются постобработкой.
Этот решатель очень эффективен, когда n_samples >> n_features и n_features мало.
Однако он непрактичен в остальных случаях при большом n_features (для материализации
ковариационной матрицы требуется большой объем памяти). Также следует отметить, что
по сравнению с решателем "full" этот решатель фактически удваивает число обусловленности
и поэтому менее устойчив численно (например, для входных данных с большим
диапазоном сингулярных значений).
"arpack":
Выполняется усеченное до `n_components` SVD с вызовом решателя ARPACK через
`scipy.sparse.linalg.svds`. Требуется строгое условие
`0 < n_components < min(X.shape)`
"randomized":
Выполняется рандомизированное SVD методом Halko и др.

.. versionadded:: 0.18.0

.. versionchanged:: 1.5
Добавлен решатель 'covariance_eigh'.
'auto'
tol tol: float, по умолчанию=0.0

Допуск для сингулярных значений, вычисляемых при svd_solver == 'arpack'.
Должен находиться в диапазоне [0.0, infinity).

.. versionadded:: 0.18.0
0.0
n_oversamples n_oversamples: int, по умолчанию=10

Этот параметр используется только при `svd_solver="randomized"`.
Он задает дополнительное число случайных векторов для выборки диапазона `X`,
чтобы обеспечить хорошую обусловленность. Подробнее см.
:func:`~sklearn.utils.extmath.randomized_svd`.

.. versionadded:: 1.1
10
power_iteration_normalizer power_iteration_normalizer: {'auto', 'QR', 'LU', 'none'}, по умолчанию='auto'

Нормализатор степенных итераций для решателя рандомизированного SVD.
Не используется ARPACK. Подробнее см. :func:`~sklearn.utils.extmath.randomized_svd`.

.. versionadded:: 1.1
'auto'
random_state random_state: int, экземпляр RandomState или None, по умолчанию=None

Используется при выборе решателей 'arpack' или 'randomized'. Передайте целое число,
чтобы получать воспроизводимые результаты при повторных вызовах функции.
См. :term:`Глоссарий <random_state>`.

.. versionadded:: 0.18.0
None
Атрибуты после обучения
Имя Тип Значение
components_ components_: ndarray формы (n_components, n_features)

Главные оси в пространстве признаков, соответствующие направлениям
максимальной дисперсии данных. Эквивалентны правым сингулярным
векторам центрированных входных данных и параллельны их собственным векторам.
Компоненты отсортированы по убыванию ``explained_variance_``.
ndarray[float64](8, 64) [[ 0. ,-0.04,-0.23,...,-0.08,-0.04,-0.01], [ 0. , 0.02, 0.03,...,-0.17,-0.01, 0.01], [ 0. ,-0.04,-0.12,...,-0.24,-0.17,-0.03], ..., [ 0. , 0.02, 0.08,...,-0.16,-0.14,-0.02], [ 0. , 0.01, 0.04,...,-0.08,-0.22,-0.11], [ 0. ,-0.05,-0.21,..., 0.3 , 0.13, 0.01]]
explained_variance_ explained_variance_: ndarray формы (n_components,)

Доля дисперсии, объясняемая каждой выбранной компонентой.
При оценке дисперсии используется число степеней свободы `n_samples - 1`.

Равна n_components наибольшим собственным значениям
ковариационной матрицы X.

.. versionadded:: 0.18
ndarray[float64](8,) [0.71,0.65,0.56,...,0.23,0.2 ,0.18]
explained_variance_ratio_ explained_variance_ratio_: ndarray формы (n_components,)

Процент дисперсии, объясняемый каждой выбранной компонентой.

Если ``n_components`` не задан, сохраняются все компоненты, а
сумма отношений равна 1.0.
ndarray[float64](8,) [0.15,0.14,0.12,...,0.05,0.04,0.04]
mean_ mean_: ndarray формы (n_features,)

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

Равно `X.mean(axis=0)`.
ndarray[float64](64,) [0. ,0.04,0.33,...,0.42,0.13,0.02]
n_components_ n_components_: int

Оцененное число компонент. Если для n_components задано значение
'mle' или число от 0 до 1 (при svd_solver == 'full'), это
число оценивается по входным данным. В противном случае оно равно параметру
n_components либо меньшему из n_features и n_samples,
если n_components равно None.
int 8
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 64
n_samples_ n_samples_: int

Количество примеров в обучающих данных.
int 1797
noise_variance_ noise_variance_: float

Оцененная ковариация шума согласно модели вероятностного PCA
Tipping и Bishop (1999). См. «Распознавание образов и
машинное обучение» C. Bishop, 12.2.1, стр. 574 или
http://www.miketipping.com/papers/met-mppca.pdf. Она необходима для
вычисления оцененной ковариации данных и оценки примеров.

Равна среднему значению (min(n_features, n_samples) - n_components)
наименьших собственных значений ковариационной матрицы X.
float64 0.02823
singular_values_ singular_values_: ndarray формы (n_components,)

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

.. versionadded:: 0.19
ndarray[float64](8,) [35.64,34.05,31.68,...,20.39,19.09,17.75]
8 признаков
pca0
pca1
pca2
pca3
pca4
pca5
pca6
pca7
Параметры
dual dual: "auto" or bool, default="auto"

Выбирает алгоритм для решения двойственной или прямой
задачи оптимизации. Предпочтительно использовать dual=False, если n_samples > n_features.
`dual="auto"` автоматически выберет значение параметра
на основе значений `n_samples`, `n_features`, `loss`, `multi_class`
и `penalty`. Если `n_samples` < `n_features` и оптимизатор поддерживает
выбранные `loss`, `multi_class` и `penalty`, то для dual будет установлено значение True,
иначе — False.

.. versionchanged:: 1.3
Опция `"auto"` добавлена в версии 1.3 и станет значением по умолчанию
в версии 1.5.
False
max_iter max_iter: int, default=1000

Максимальное число выполняемых итераций.
10000
penalty penalty: {'l1', 'l2'}, default='l2'

Задает норму, используемую при регуляризации. Регуляризация 'l2'
стандартно используется в SVC. Регуляризация 'l1' приводит к тому, что векторы ``coef_``
становятся разреженными.
'l2'
loss loss: {'hinge', 'squared_hinge'}, default='squared_hinge'

Задает функцию потерь. 'hinge' — стандартная функция потерь SVM
(например, используется классом SVC), а 'squared_hinge' — это
квадрат функции hinge loss. Сочетание ``penalty='l1'``
и ``loss='hinge'`` не поддерживается.
'squared_hinge'
tol tol: float, default=1e-4

Допуск для критерия остановки.
0.0001
C C: float, default=1.0

Параметр регуляризации. Сила регуляризации
обратно пропорциональна C. Значение должно быть строго положительным.
Наглядную визуализацию эффектов масштабирования
параметра регуляризации C см. в разделе
:ref:`sphx_glr_auto_examples_svm_plot_svm_scale_c.py`.
1
multi_class multi_class: {'ovr', 'crammer_singer'}, default='ovr'

Определяет стратегию многоклассовой классификации, если `y` содержит более
двух классов.
``"ovr"`` обучает n_classes классификаторов «один против остальных», а
``"crammer_singer"`` оптимизирует совместную целевую функцию по всем классам.
Хотя `crammer_singer` представляет теоретический интерес,
поскольку является согласованным, на практике он используется редко: обычно он не обеспечивает
более высокой точности и требует больших вычислительных затрат.
Если выбрано ``"crammer_singer"``, параметры loss, penalty и dual
будут проигнорированы.
'ovr'
fit_intercept fit_intercept: bool, default=True

Определяет, нужно ли обучать свободный член. Если задано значение True, вектор признаков
дополняется свободным членом: `[x_1, ..., x_n, 1]`, где
1 соответствует свободному члену. Если задано значение False, свободный член не будет
использоваться при вычислениях (то есть предполагается, что данные уже центрированы).
True
intercept_scaling intercept_scaling: float, default=1.0

Если `fit_intercept` имеет значение True, вектор экземпляра x принимает вид ``[x_1,
..., x_n, intercept_scaling]``, то есть к вектору экземпляра добавляется «синтетический» признак
с постоянным значением, равным `intercept_scaling`. Свободный член становится равен весу
синтетического признака, умноженному на intercept_scaling. Обратите внимание, что liblinear внутри алгоритма штрафует свободный член,
обрабатывая его как любой другой член вектора признаков. Чтобы уменьшить
влияние регуляризации на свободный член, параметру `intercept_scaling`
можно задать значение больше 1; чем выше значение
`intercept_scaling`, тем слабее влияние регуляризации на него.
Тогда веса принимают вид `[w_x_1, ..., w_x_n,
w_intercept*intercept_scaling]`, где `w_x_1, ..., w_x_n` — веса признаков, а вес свободного члена масштабируется с помощью
`intercept_scaling`. Такое масштабирование позволяет задать для свободного члена
отличающееся от остальных признаков поведение регуляризации.
1
class_weight class_weight: dict or 'balanced', default=None

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

Включает подробный вывод. Обратите внимание, что эта настройка использует параметр среды выполнения
для отдельного процесса в liblinear; если он включен, то может некорректно работать
в многопоточном режиме.
0
random_state random_state: int, RandomState instance or None, default=None

Управляет генерацией псевдослучайных чисел для перемешивания данных при
двойственном покоординатном спуске (если ``dual=True``). При ``dual=False``
реализация :class:`LinearSVC` не использует случайность, и
``random_state`` не влияет на результаты.
Передайте целое число, чтобы получать воспроизводимые результаты при нескольких вызовах функции.
См. :term:`Glossary <random_state>`.
None
Атрибуты обученной модели
Имя Тип Значение
classes_ classes_: ndarray of shape (n_classes,)

Метки уникальных классов.
ndarray[int64](10,) [0,1,2,...,7,8,9]
coef_ coef_: ndarray of shape (1, n_features) if n_classes == 2 else (n_classes, n_features)

Веса, присвоенные признакам (коэффициенты в прямой
задаче).

``coef_`` — свойство только для чтения, производное от ``raw_coef_``, которое
соответствует внутреннему расположению данных в памяти liblinear.
ndarray[float64](10, 8) [[ 0.41,-1.87, 0.37,..., 1.09, 0.04, 0.56], [ 0.09, 1.02,-0.23,..., 0.78,-0.2 , 0.49], [-1.19, 0.56,-1.81,..., 0.5 ,-2.05, 0.98], ..., [-0.21, 1.09, 1.37,...,-0.65, 0.19,-0.74], [-0.22, 0.13,-0.11,..., 0.31, 0.98, 1.17], [-0.58,-0.48, 0.7 ,...,-0.05, 0.61, 0.14]]
intercept_ intercept_: ndarray of shape (1,) if n_classes == 2 else (n_classes,)

Константы в функции принятия решения.
ndarray[float64](10,) [-2.84,-1.82,-3.04,...,-2.35,-1.19,-1.38]
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 8
n_iter_ n_iter_: int

Максимальное число итераций, выполненных для всех классов.
int 9


import pandas as pd

mean_scores = np.array(grid.cv_results_["mean_test_score"])
# scores are in the order of param_grid iteration, which is alphabetical
mean_scores = mean_scores.reshape(len(C_OPTIONS), -1, len(N_FEATURES_OPTIONS))
# select score for best C
mean_scores = mean_scores.max(axis=0)
# create a dataframe to ease plotting
mean_scores = pd.DataFrame(
    mean_scores.T, index=N_FEATURES_OPTIONS, columns=reducer_labels
)

ax = mean_scores.plot.bar()
ax.set_title("Comparing feature reduction techniques")
ax.set_xlabel("Reduced number of features")
ax.set_ylabel("Digit classification accuracy")
ax.set_ylim((0, 1))
ax.legend(loc="upper left")

plt.show()
Comparing feature reduction techniques

Кэширование преобразователей в Pipeline

Иногда имеет смысл сохранять состояние конкретного преобразователя, поскольку оно может понадобиться повторно. Использование конвейера в GridSearchCV приводит к таким ситуациям. Поэтому для включения кэширования мы используем аргумент memory.

Предупреждение

Однако этот пример служит лишь иллюстрацией: в данном случае обучение PCA не обязательно выполняется медленнее, чем загрузка из кэша. Поэтому используйте параметр конструктора memory, когда обучение преобразователя требует значительных затрат.

from shutil import rmtree

from joblib import Memory

# Create a temporary folder to store the transformers of the pipeline
location = "cachedir"
memory = Memory(location=location, verbose=10)
cached_pipe = Pipeline(
    [("reduce_dim", PCA()), ("classify", LinearSVC(dual=False, max_iter=10000))],
    memory=memory,
)

# This time, a cached pipeline will be used within the grid search


# Delete the temporary cache before exiting
memory.clear(warn=False)
rmtree(location)

Обучение PCA выполняется только при оценке первой конфигурации параметра C классификатора LinearSVC. Для остальных конфигураций C будет загружаться кэшированная информация о модели PCA, что позволяет сэкономить время обработки. Поэтому кэширование конвейера с помощью memory особенно полезно, если обучение преобразователя требует значительных затрат.

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_compare_reduction.ipynb

Download Python source code: plot_compare_reduction.py

Download zipped: plot_compare_reduction.zip

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

Инкрементальный PCA

Объединение нескольких методов извлечения признаков

Агломерация признаков и одномерный отбор

Кэширование ближайших соседей

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

Spec-Zone.ru

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