Spec-Zone.ru › scikit-learn

Примечание

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

Пользовательская стратегия переобучения для поиска по сетке с перекрёстной проверкой

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

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

Дополнительные сведения об инструментах для выбора модели можно найти в разделах Перекрёстная проверка: оценка производительности оценщика и Настройка гиперпараметров оценщика.

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

Набор данных

Мы будем работать с набором данных digits. Цель — классифицировать изображения рукописных цифр. Для простоты понимания мы преобразуем задачу в бинарную классификацию: требуется определить, является ли цифра 8.

from sklearn import datasets

digits = datasets.load_digits()

Чтобы обучить классификатор на изображениях, необходимо преобразовать их в векторы. Каждое изображение размером 8 на 8 пикселей необходимо преобразовать в вектор из 64 пикселей. Таким образом, мы получим итоговый массив данных с формой (n_images, n_pixels).

n_samples = len(digits.images)
X = digits.images.reshape((n_samples, -1))
y = digits.target == 8
print(
    f"The number of images is {X.shape[0]} and each image contains {X.shape[1]} pixels"
)
The number of images is 1797 and each image contains 64 pixels

Как было сказано во введении, данные будут разделены на обучающую и тестовую выборки равного размера.

from sklearn.model_selection import train_test_split

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

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

Мы выберем классификатор, выполнив поиск лучших гиперпараметров на фолдах обучающей выборки. Для этого необходимо определить метрики, по которым будет выбираться лучший кандидат.

scores = ["precision", "recall"]

Также можно определить функцию, передаваемую параметру refit экземпляра GridSearchCV. Эта функция реализует пользовательскую стратегию выбора лучшего кандидата из атрибута cv_results_ объекта GridSearchCV. После выбора кандидата экземпляр GridSearchCV автоматически переобучит модель.

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

import pandas as pd


def print_dataframe(filtered_cv_results):
    """Pretty print for filtered dataframe"""
    for mean_precision, std_precision, mean_recall, std_recall, params in zip(
        filtered_cv_results["mean_test_precision"],
        filtered_cv_results["std_test_precision"],
        filtered_cv_results["mean_test_recall"],
        filtered_cv_results["std_test_recall"],
        filtered_cv_results["params"],
    ):
        print(
            f"precision: {mean_precision:0.3f} (±{std_precision:0.03f}),"
            f" recall: {mean_recall:0.3f} (±{std_recall:0.03f}),"
            f" for {params}"
        )
    print()


def refit_strategy(cv_results):
    """Define the strategy to select the best estimator.

    The strategy defined here is to filter-out all results below a precision threshold
    of 0.98, rank the remaining by recall and keep all models with one standard
    deviation of the best by recall. Once these models are selected, we can select the
    fastest model to predict.

    Parameters
    ----------
    cv_results : dict of numpy (masked) ndarrays
        CV results as returned by the `GridSearchCV`.

    Returns
    -------
    best_index : int
        The index of the best estimator as it appears in `cv_results`.
    """
    # print the info about the grid-search for the different scores
    precision_threshold = 0.98

    cv_results_ = pd.DataFrame(cv_results)
    print("All grid-search results:")
    print_dataframe(cv_results_)

    # Filter-out all results below the threshold
    high_precision_cv_results = cv_results_[
        cv_results_["mean_test_precision"] > precision_threshold
    ]

    print(f"Models with a precision higher than {precision_threshold}:")
    print_dataframe(high_precision_cv_results)

    high_precision_cv_results = high_precision_cv_results[
        [
            "mean_score_time",
            "mean_test_recall",
            "std_test_recall",
            "mean_test_precision",
            "std_test_precision",
            "rank_test_recall",
            "rank_test_precision",
            "params",
        ]
    ]

    # Select the most performant models in terms of recall
    # (within 1 sigma from the best)
    best_recall_std = high_precision_cv_results["mean_test_recall"].std()
    best_recall = high_precision_cv_results["mean_test_recall"].max()
    best_recall_threshold = best_recall - best_recall_std

    high_recall_cv_results = high_precision_cv_results[
        high_precision_cv_results["mean_test_recall"] > best_recall_threshold
    ]
    print(
        "Out of the previously selected high precision models, we keep all the\n"
        "the models within one standard deviation of the highest recall model:"
    )
    print_dataframe(high_recall_cv_results)

    # From the best candidates, select the fastest model to predict
    fastest_top_recall_high_precision_index = high_recall_cv_results[
        "mean_score_time"
    ].idxmin()

    print(
        "\nThe selected final model is the fastest to predict out of the previously\n"
        "selected subset of best models based on precision and recall.\n"
        "Its scoring time is:\n\n"
        f"{high_recall_cv_results.loc[fastest_top_recall_high_precision_index]}"
    )

    return fastest_top_recall_high_precision_index

Настройка гиперпараметров

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

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC

tuned_parameters = [
    {"kernel": ["rbf"], "gamma": [1e-3, 1e-4], "C": [1, 10, 100, 1000]},
    {"kernel": ["linear"], "C": [1, 10, 100, 1000]},
]

grid_search = GridSearchCV(
    SVC(), tuned_parameters, scoring=scores, refit=refit_strategy
)
grid_search.fit(X_train, y_train)
All grid-search results:
precision: 1.000 (±0.000), recall: 0.854 (±0.063), for {'C': 1, 'gamma': 0.001, 'kernel': 'rbf'}
precision: 1.000 (±0.000), recall: 0.257 (±0.061), for {'C': 1, 'gamma': 0.0001, 'kernel': 'rbf'}
precision: 1.000 (±0.000), recall: 0.877 (±0.069), for {'C': 10, 'gamma': 0.001, 'kernel': 'rbf'}
precision: 0.968 (±0.039), recall: 0.780 (±0.083), for {'C': 10, 'gamma': 0.0001, 'kernel': 'rbf'}
precision: 1.000 (±0.000), recall: 0.877 (±0.069), for {'C': 100, 'gamma': 0.001, 'kernel': 'rbf'}
precision: 0.905 (±0.058), recall: 0.889 (±0.074), for {'C': 100, 'gamma': 0.0001, 'kernel': 'rbf'}
precision: 1.000 (±0.000), recall: 0.877 (±0.069), for {'C': 1000, 'gamma': 0.001, 'kernel': 'rbf'}
precision: 0.904 (±0.058), recall: 0.890 (±0.073), for {'C': 1000, 'gamma': 0.0001, 'kernel': 'rbf'}
precision: 0.695 (±0.073), recall: 0.743 (±0.065), for {'C': 1, 'kernel': 'linear'}
precision: 0.643 (±0.066), recall: 0.757 (±0.066), for {'C': 10, 'kernel': 'linear'}
precision: 0.611 (±0.028), recall: 0.744 (±0.044), for {'C': 100, 'kernel': 'linear'}
precision: 0.618 (±0.039), recall: 0.744 (±0.044), for {'C': 1000, 'kernel': 'linear'}

Models with a precision higher than 0.98:
precision: 1.000 (±0.000), recall: 0.854 (±0.063), for {'C': 1, 'gamma': 0.001, 'kernel': 'rbf'}
precision: 1.000 (±0.000), recall: 0.257 (±0.061), for {'C': 1, 'gamma': 0.0001, 'kernel': 'rbf'}
precision: 1.000 (±0.000), recall: 0.877 (±0.069), for {'C': 10, 'gamma': 0.001, 'kernel': 'rbf'}
precision: 1.000 (±0.000), recall: 0.877 (±0.069), for {'C': 100, 'gamma': 0.001, 'kernel': 'rbf'}
precision: 1.000 (±0.000), recall: 0.877 (±0.069), for {'C': 1000, 'gamma': 0.001, 'kernel': 'rbf'}

Out of the previously selected high precision models, we keep all the
the models within one standard deviation of the highest recall model:
precision: 1.000 (±0.000), recall: 0.854 (±0.063), for {'C': 1, 'gamma': 0.001, 'kernel': 'rbf'}
precision: 1.000 (±0.000), recall: 0.877 (±0.069), for {'C': 10, 'gamma': 0.001, 'kernel': 'rbf'}
precision: 1.000 (±0.000), recall: 0.877 (±0.069), for {'C': 100, 'gamma': 0.001, 'kernel': 'rbf'}
precision: 1.000 (±0.000), recall: 0.877 (±0.069), for {'C': 1000, 'gamma': 0.001, 'kernel': 'rbf'}


The selected final model is the fastest to predict out of the previously
selected subset of best models based on precision and recall.
Its scoring time is:

mean_score_time                                             0.00622
mean_test_recall                                           0.877206
std_test_recall                                            0.069196
mean_test_precision                                             1.0
std_test_precision                                              0.0
rank_test_recall                                                  3
rank_test_precision                                               1
params                 {'C': 1000, 'gamma': 0.001, 'kernel': 'rbf'}
Name: 6, dtype: object
GridSearchCV(estimator=SVC(),
             param_grid=[{'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001],
                          'kernel': ['rbf']},
                         {'C': [1, 10, 100, 1000], 'kernel': ['linear']}],
             refit=<function refit_strategy at 0x7841176d90c0>,
             scoring=['precision', 'recall'])
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить представление HTML, или доверьте ноутбуку.
На GitHub невозможно отобразить представление HTML; попробуйте открыть эту страницу с помощью nbviewer.org.
Параметры
estimator estimator: объект оценщика

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

Словарь, в котором ключами являются имена параметров (`str`), а значениями — списки
наборов значений параметров для проверки, или список таких
словарей; в последнем случае исследуются сетки, заданные каждым словарём
в списке. Это позволяет выполнять поиск по любой последовательности
наборов значений параметров.
[{'C': [1, 10, ...], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']}, {'C': [1, 10, ...], 'kernel': ['linear']}]
scoring scoring: str, вызываемый объект, список, кортеж или словарь; по умолчанию=None

Стратегия оценки производительности модели, проверенной с помощью перекрёстной проверки,
на тестовой выборке.

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

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

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

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

Пример см. в разделе :ref:`multimetric_grid_search`.
['precision', 'recall']
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
Добавлена поддержка вызываемых объектов.
<function ref...x7841176d90c0>
n_jobs n_jobs: int; по умолчанию=None

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

.. versionchanged:: v0.20
Значение `n_jobs` по умолчанию изменено с 1 на None
None
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`` по умолчанию при None изменено с 3 фолдов на 5.
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_: estimator

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

Дополнительную информацию о допустимых значениях см. в параметре ``refit``.
SVC SVC(C=1000, gamma=0.001)
best_index_ best_index_: int

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

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

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

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

При оценке по нескольким метрикам атрибут присутствует только в том случае, если указан ``refit``.
dict {'C': 1000, 'gamma': 0.001, 'kernel': 'rbf'}
classes_ classes_: ndarray of shape (n_classes,)

Метки классов. Атрибут присутствует только в том случае, если указан ``refit`` и
базовый оценщик является классификатором.
ndarray[bool](2,) [False, True]
cv_results_ cv_results_: dict of numpy (masked) ndarrays

Словарь, в котором ключи служат заголовками столбцов, а значения содержат данные столбцов; его можно
импортировать в ``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.0079..., 1.48777413]), 'me...me': array([0.0064..., 0.00451288]), 'me...on': array([1. ..., 0.61784765]), 'me...ll': array([0.8536..., 0.74411765]), ...}
multimetric_ multimetric_: bool

Вычисляют ли функции оценки несколько метрик.
bool True
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.01107
scorer_ scorer_: function or a dict

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

При оценке по нескольким метрикам этот атрибут содержит проверенный
словарь ``scoring``, сопоставляющий ключ функции оценки с вызываемым объектом этой функции.
dict {'pr...on': make_scorer(p...verage=binary), 'recall': make_scorer(r...verage=binary)}
SVC(C=1000, gamma=0.001)
Параметры
C C: float, default=1.0

Параметр регуляризации. Сила регуляризации
обратно пропорциональна C. Значение должно быть строго положительным. Штрафная функция
— это квадратичный штраф l2. Интуитивную визуализацию эффектов
масштабирования параметра регуляризации C см. в разделе
:ref:`sphx_glr_auto_examples_svm_plot_svm_scale_c.py`.
1000
gamma gamma: {'scale', 'auto'} or float, default='scale'

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

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

.. versionchanged:: 0.22
Значение ``gamma`` по умолчанию изменено с 'auto' на 'scale'.
0.001
kernel kernel: {'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'} or callable, default='rbf'

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

Степень полиномиальной функции ядра ('poly').
Должна быть неотрицательной. Игнорируется всеми остальными ядрами.
3
coef0 coef0: float, default=0.0

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

Использовать ли эвристику сокращения.
См. :ref:`Руководство пользователя <shrinking_svm>`.
True
probability probability: bool, default=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, default=1e-3

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

Задает размер кэша ядра (в МБ).
200
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: bool, default=False

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

Жесткое ограничение числа итераций решателя или -1, если ограничение не задано.
-1
decision_function_shape decision_function_shape: {'ovo', 'ovr'}, default='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, default=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
random_state random_state: int, RandomState instance or None, default=None

Управляет генерацией псевдослучайных чисел для перемешивания данных при оценке
вероятностей. Игнорируется, если `probability` имеет значение False.
Передайте целое число, чтобы получать воспроизводимые результаты при нескольких вызовах функции.
См. :term:`Глоссарий <random_state>`.
None
Атрибуты обученной модели
Имя Тип Значение
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`), умноженные на
соответствующие им целевые значения.
Для многоклассовой классификации — коэффициенты всех классификаторов 1-против-1.
Структура коэффициентов в многоклассовом случае довольно
нетривиальна. Подробности см. в :ref:`разделе о многоклассовой классификации в Руководстве пользователя
<svm_multi_class>`.
Если `X` — разреженная матрица, то и эти значения будут разреженными.
ndarray[float64](1, 160) [[-0.49,-1.07,-0.3 ,..., 3.09, 1.31, 1.14]]
fit_status_ fit_status_: int

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

Константы в функции принятия решений.
ndarray[float64](1,) [-1.31]
n_features_in_ n_features_in_: int

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

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

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

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

Количество опорных векторов для каждого класса.
ndarray[int32](2,) [110, 50]
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 (898, 64)
support_ support_: ndarray формы (n_SV)

Индексы опорных векторов.
ndarray[int32](160,) [ 5, 6, 21,...,758,779,849]
support_vectors_ support_vectors_: ndarray или разреженный массив/матрица формы (n_SV, n_features)

Опорные векторы. Если ядро вычислено заранее, возвращается пустой массив.
Если `X` — разреженная матрица, то и эти значения будут разреженными.
ndarray[float64](160, 64) [[ 0., 0., 0.,..., 2., 0., 0.], [ 0., 0., 0.,..., 0., 0., 0.], [ 0., 0., 2.,..., 0., 0., 0.], ..., [ 0., 0., 5.,...,16., 2., 0.], [ 0., 0., 2.,...,10., 0., 0.], [ 0., 0., 0.,...,11.,15., 2.]]


Параметры, выбранные поиском по сетке с нашей пользовательской стратегией:

grid_search.best_params_
{'C': 1000, 'gamma': 0.001, 'kernel': 'rbf'}

Наконец, мы оцениваем настроенную модель на отложенной выборке для оценки: объект grid_search был автоматически переобучен на полном обучающем наборе с параметрами, выбранными нашей пользовательской стратегией переобучения.

Для вычисления стандартных метрик классификации на отложенной выборке можно использовать отчет о классификации:

from sklearn.metrics import classification_report

y_pred = grid_search.predict(X_test)
print(classification_report(y_test, y_pred))
              precision    recall  f1-score   support

       False       0.99      1.00      0.99       807
        True       1.00      0.87      0.93        92

    accuracy                           0.99       899
   macro avg       0.99      0.93      0.96       899
weighted avg       0.99      0.99      0.99       899

Примечание

Задача слишком проста: плато гиперпараметров слишком плоское, а итоговая модель для точности и полноты одинакова, поскольку показатели качества совпадают.

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_grid_search_digits.ipynb

Download Python source code: plot_grid_search_digits.py

Download zipped: plot_grid_search_digits.zip

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

Precision-Recall

Анализ сходимости моделей логистической регрессии с регуляризацией

Балансировка сложности модели и оценки при кросс-валидации

Сравнение случайного поиска и поиска по сетке для подбора гиперпараметров

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

Spec-Zone.ru

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