Spec-Zone.ru › scikit-learn

Примечание

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

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

Мы рады объявить о выпуске scikit-learn 0.23! В него вошло множество исправлений ошибок и улучшений, а также несколько новых важных функций. Ниже мы подробно рассмотрим некоторые основные нововведения этого выпуска. Полный список всех изменений см. в примечаниях к выпуску.

Чтобы установить последнюю версию с помощью pip:

pip install --upgrade scikit-learn

или с помощью conda:

conda install -c conda-forge scikit-learn

Обобщённые линейные модели и функция потерь Пуассона для градиентного бустинга

Наконец стали доступны обобщённые линейные модели с функциями потерь, отличными от нормальной. В частности, реализованы три новых регрессора: PoissonRegressor, GammaRegressor и TweedieRegressor. Регрессор Пуассона можно использовать для моделирования положительных целочисленных значений или относительных частот. Подробнее см. в руководстве пользователя. Кроме того, HistGradientBoostingRegressor теперь также поддерживает функцию потерь ‘poisson’.

import numpy as np

from sklearn.ensemble import HistGradientBoostingRegressor
from sklearn.linear_model import PoissonRegressor
from sklearn.model_selection import train_test_split

n_samples, n_features = 1000, 20
rng = np.random.RandomState(0)
X = rng.randn(n_samples, n_features)
# positive integer target correlated with X[:, 5] with many zeros:
y = rng.poisson(lam=np.exp(X[:, 5]) / 2)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=rng)
glm = PoissonRegressor()
gbdt = HistGradientBoostingRegressor(loss="poisson", learning_rate=0.01)
glm.fit(X_train, y_train)
gbdt.fit(X_train, y_train)
print(glm.score(X_test, y_test))
print(gbdt.score(X_test, y_test))
0.35776189065725805
0.4366191749596743

Наглядное визуальное представление оценивателей

Теперь оцениватели можно визуализировать в блокнотах, включив параметр display='diagram'. Это особенно полезно для отображения структуры конвейеров и других составных оценивателей с возможностью взаимодействия, позволяющей получить подробную информацию. Нажмите на изображение примера ниже, чтобы раскрыть элементы Pipeline. О том, как использовать эту функцию, см. в разделе Визуализация составных оценивателей.

from sklearn import set_config
from sklearn.compose import make_column_transformer
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import OneHotEncoder, StandardScaler

set_config(display="diagram")

num_proc = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())

cat_proc = make_pipeline(
    SimpleImputer(strategy="constant", fill_value="missing"),
    OneHotEncoder(handle_unknown="ignore"),
)

preprocessor = make_column_transformer(
    (num_proc, ("feat1", "feat3")), (cat_proc, ("feat0", "feat2"))
)

clf = make_pipeline(preprocessor, LogisticRegression())
clf
Pipeline(steps=[('columntransformer',
                 ColumnTransformer(transformers=[('pipeline-1',
                                                  Pipeline(steps=[('simpleimputer',
                                                                   SimpleImputer(strategy='median')),
                                                                  ('standardscaler',
                                                                   StandardScaler())]),
                                                  ('feat1', 'feat3')),
                                                 ('pipeline-2',
                                                  Pipeline(steps=[('simpleimputer',
                                                                   SimpleImputer(fill_value='missing',
                                                                                 strategy='constant')),
                                                                  ('onehotencoder',
                                                                   OneHotEncoder(handle_unknown='ignore'))]),
                                                  ('feat0', 'feat2'))])),
                ('logisticregression', LogisticRegression())])
В среде Jupyter повторно запустите эту ячейку, чтобы отобразить HTML-представление, или доверьте блокноту.
На GitHub HTML-представление не отображается; попробуйте открыть эту страницу на nbviewer.org.
Параметры
steps steps: список кортежей

Список кортежей (имя шага, оцениватель), которые должны быть объединены
в последовательном порядке. Для соответствия API scikit-learn все шаги
должны определять `fit`. Все шаги, кроме последнего, также должны определять
`transform`. Подробнее см. в разделе :ref:`Объединение оценивателей <combining_estimators>`.
[('columntransformer', ...), ('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
Параметры
transformers transformers: список кортежей

Список кортежей (имя, преобразователь, столбцы), задающих
объекты-преобразователи, применяемые к подмножествам данных.

name : str
Как и в Pipeline и FeatureUnion, это позволяет задавать преобразователь и
его параметры с помощью ``set_params`` и искать их при поиске по сетке.
transformer : {'drop', 'passthrough'} или оцениватель
Оцениватель должен поддерживать :term:`fit` и :term:`transform`.
Также допускаются специальные строки 'drop' и 'passthrough',
указывающие соответственно на удаление столбцов или передачу их без
преобразования.
columns : str, массивоподобный объект из str, int, массивоподобный объект из int, массивоподобный объект из bool, срез или вызываемый объект
Задаёт индексы данных по второй оси. Целые числа интерпретируются как
позиционные индексы столбцов, а строки могут указывать на столбцы DataFrame
по имени. Если ``transformer`` ожидает одномерный массивоподобный объект
(вектор), следует использовать скалярную строку или целое число;
в противном случае преобразователю будет передан двумерный массив.
Вызываемому объекту передаются входные данные `X`; он может вернуть любое
из перечисленных выше значений. Чтобы выбрать несколько столбцов по имени
или типу данных, можно использовать :obj:`make_column_selector`.
[('pipeline-1', ...), ('pipeline-2', ...)]
remainder remainder: {'drop', 'passthrough'} или оцениватель, по умолчанию 'drop'

По умолчанию преобразуются и объединяются в выходных данных только столбцы,
указанные в `transformers`; остальные столбцы удаляются (значение по умолчанию — ``'drop'``).
Если задать ``remainder='passthrough'``, все оставшиеся столбцы, не указанные
в `transformers`, но присутствовавшие в данных, переданных в `fit`, будут автоматически
переданы без изменений. Это подмножество столбцов объединяется с результатом преобразователей.
Для фреймов данных дополнительные столбцы, отсутствовавшие при вызове `fit`,
будут исключены из результата `transform`.
Если в качестве ``remainder`` задать оцениватель, к оставшимся
неуказанным столбцам будет применён этот оцениватель. Он должен поддерживать
:term:`fit` и :term:`transform`.
Обратите внимание: для использования этой функции порядок столбцов DataFrame,
подаваемого в :term:`fit` и :term:`transform`, должен быть одинаковым.
'drop'
sparse_threshold sparse_threshold: float, по умолчанию 0.3

Если результаты разных преобразователей содержат разреженные матрицы,
они будут объединены в разреженную матрицу, если общая плотность
ниже этого значения. Чтобы всегда возвращать плотный результат, задайте
``sparse_threshold=0``. Если преобразованные результаты состоят только из плотных данных,
объединённый результат будет плотным, а этот параметр будет проигнорирован.
0.3
n_jobs n_jobs: int, по умолчанию None

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

Множители весов признаков для каждого преобразователя. Результат
преобразователя умножается на соответствующий вес. Ключи — имена преобразователей,
значения — веса.
None
verbose verbose: bool, по умолчанию False

Если True, по завершении обучения каждого преобразователя будет выводиться
затраченное время.
False
verbose_feature_names_out verbose_feature_names_out: bool, str или Callable[[str, str], str], по умолчанию True

- Если True, :meth:`ColumnTransformer.get_feature_names_out` добавит к именам
всех признаков префикс с именем преобразователя, создавшего соответствующий
признак. Это эквивалентно заданию
`verbose_feature_names_out="{transformer_name}__{feature_name}"`.
- Если False, :meth:`ColumnTransformer.get_feature_names_out` не будет добавлять
префиксы к именам признаков и вызовет ошибку, если имена признаков не уникальны.
- Если ``Callable[[str, str], str]``,
:meth:`ColumnTransformer.get_feature_names_out` переименует все признаки,
используя имя преобразователя. Первый аргумент вызываемого объекта — имя
преобразователя, второй — имя признака. Возвращённая строка станет новым именем признака.
- Если ``str``, это должна быть строка, готовая к форматированию. Заданная строка будет
отформатирована с использованием двух имён полей: ``transformer_name`` и ``feature_name``.
Например: ``"{feature_name}__{transformer_name}"``. Подробнее см. описание метода
:meth:`str.format` в стандартной библиотеке.

.. добавлено в версии:: 1.0

.. изменено в версии:: 1.6
`verbose_feature_names_out` может быть вызываемым объектом или форматируемой строкой.
True
('feat1', 'feat3')
Параметры
strategy strategy: str or Callable, default='mean'

Стратегия заполнения пропусков.

- Если задано "mean", пропущенные значения заменяются средним значением в
каждом столбце. Можно использовать только с числовыми данными.
- Если задано "median", пропущенные значения заменяются медианой в
каждом столбце. Можно использовать только с числовыми данными.
- Если задано "most_frequent", пропущенные значения заменяются наиболее часто встречающимся
значением в каждом столбце. Можно использовать со строковыми или числовыми данными.
Если таких значений несколько, возвращается только наименьшее.
- Если задано "constant", пропущенные значения заменяются значением fill_value. Можно
использовать со строковыми или числовыми данными.
- Если задан экземпляр Callable, пропущенные значения заменяются скалярной
статистикой, возвращаемой при вызове этой функции для плотного одномерного
массива, содержащего непропущенные значения каждого столбца.

.. versionadded:: 0.20
strategy="constant" для заполнения фиксированным значением.

.. versionadded:: 1.5
strategy=callable для заполнения пользовательским значением.
'median'
missing_values missing_values: int, float, str, np.nan, None or pandas.NA, default=np.nan

Значение-заполнитель для пропусков. Все вхождения
`missing_values` будут заполнены. Для фреймов данных pandas
с nullable-типами целых чисел и пропущенными значениями для `missing_values`
можно задать `np.nan` или `pd.NA`.
nan
fill_value fill_value: str or numerical value, default=None

Если strategy == "constant", значение `fill_value` используется для замены всех
вхождений missing_values. Для строковых или объектных типов данных
`fill_value` должен быть строкой.
Если задано `None`, при заполнении числовых данных значение `fill_value` будет равно 0,
а для строковых или объектных типов данных — "missing_value".
None
copy copy: bool, default=True

Если True, будет создана копия X. Если False, заполнение будет
выполняться на месте, когда это возможно. Обратите внимание: в следующих случаях
новая копия будет создана всегда, даже если `copy=False`:

- Если `X` не является массивом значений с плавающей запятой;
- Если `X` закодирован как CSR-матрица;
- Если `add_indicator=True`.
True
add_indicator add_indicator: bool, default=False

Если True, результат преобразования импьютера будет дополнен преобразованием
:class:`MissingIndicator`. Это позволяет предиктивной модели
учитывать наличие пропусков, несмотря на их заполнение. Если при обучении/подгонке у признака нет
пропущенных значений, этот признак не появится в индикаторе пропусков,
даже если пропуски есть на этапе преобразования/тестирования.
False
keep_empty_features keep_empty_features: bool, default=False

Если True, признаки, состоящие исключительно из пропущенных значений на момент вызова
`fit`, будут включены в результат вызова `transform`.
Заполненное значение всегда равно `0`, за исключением случая, когда задано `strategy="constant"`,
в этом случае вместо него используется `fill_value`.

.. versionadded:: 1.2
False
Параметры
copy copy: bool, default=True

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

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

Если True, масштабировать данные до единичной дисперсии (или, что эквивалентно,
единичного стандартного отклонения).
True
('feat0', 'feat2')
Параметры
strategy strategy: str or Callable, default='mean'

Стратегия заполнения пропусков.

- Если задано "mean", пропущенные значения заменяются средним значением в
каждом столбце. Можно использовать только с числовыми данными.
- Если задано "median", пропущенные значения заменяются медианой в
каждом столбце. Можно использовать только с числовыми данными.
- Если задано "most_frequent", пропущенные значения заменяются наиболее часто встречающимся
значением в каждом столбце. Можно использовать со строковыми или числовыми данными.
Если таких значений несколько, возвращается только наименьшее.
- Если задано "constant", пропущенные значения заменяются значением fill_value. Можно
использовать со строковыми или числовыми данными.
- Если задан экземпляр Callable, пропущенные значения заменяются скалярной
статистикой, возвращаемой при вызове этой функции для плотного одномерного
массива, содержащего непропущенные значения каждого столбца.

.. versionadded:: 0.20
strategy="constant" для заполнения фиксированным значением.

.. versionadded:: 1.5
strategy=callable для заполнения пользовательским значением.
'constant'
fill_value fill_value: str or numerical value, default=None

Если strategy == "constant", значение `fill_value` используется для замены всех
вхождений missing_values. Для строковых или объектных типов данных
`fill_value` должен быть строкой.
Если задано `None`, при заполнении числовых данных значение `fill_value` будет равно 0,
а для строковых или объектных типов данных — "missing_value".
'missing'
missing_values missing_values: int, float, str, np.nan, None or pandas.NA, default=np.nan

Значение-заполнитель для пропусков. Все вхождения
`missing_values` будут заполнены. Для фреймов данных pandas
с nullable-типами целых чисел и пропущенными значениями для `missing_values`
можно задать `np.nan` или `pd.NA`.
nan
copy copy: bool, default=True

Если True, будет создана копия X. Если False, заполнение будет
выполняться на месте, когда это возможно. Обратите внимание: в следующих случаях
новая копия будет создана всегда, даже если `copy=False`:

- Если `X` не является массивом значений с плавающей запятой;
- Если `X` закодирован как CSR-матрица;
- Если `add_indicator=True`.
True
add_indicator add_indicator: bool, default=False

Если True, результат преобразования импьютера будет дополнен преобразованием
:class:`MissingIndicator`. Это позволяет предиктивной модели
учитывать наличие пропусков, несмотря на их заполнение. Если при обучении/подгонке у признака нет
пропущенных значений, этот признак не появится в индикаторе пропусков,
даже если пропуски есть на этапе преобразования/тестирования.
False
keep_empty_features keep_empty_features: bool, default=False

Если True, признаки, состоящие исключительно из пропущенных значений на момент вызова
`fit`, будут включены в результат вызова `transform`.
Заполненное значение всегда равно `0`, за исключением случая, когда задано `strategy="constant"`,
в этом случае вместо него используется `fill_value`.

.. versionadded:: 1.2
False
Параметры
handle_unknown handle_unknown: {'error', 'ignore', 'infrequent_if_exist', 'warn'}, default='error'

Определяет способ обработки неизвестных категорий во время :meth:`transform`.

- 'error' : Вызывает ошибку, если при преобразовании обнаружена неизвестная категория.
- 'ignore' : Если при преобразовании встречается неизвестная категория,
соответствующие ей столбцы one-hot-кодирования будут заполнены нулями. При обратном преобразовании неизвестная категория
будет обозначена как None.
- 'infrequent_if_exist' : Если при преобразовании встречается неизвестная категория,
соответствующие ей столбцы one-hot-кодирования будут отнесены к редко встречающейся категории, если она существует. Эта
редко встречающаяся категория будет помещена на последнюю позицию
в кодировке. При обратном преобразовании неизвестная категория будет
сопоставлена категории `'infrequent'`, если она существует. Если категория
`'infrequent'` отсутствует, :meth:`transform` и
:meth:`inverse_transform` обработают неизвестную категорию так же, как при
`handle_unknown='ignore'`. Редко встречающиеся категории определяются на основе
`min_frequency` и `max_categories`. Подробнее см. в
:ref:`руководстве пользователя <encoder_infrequent_categories>`.
- 'warn' : Если при преобразовании встречается неизвестная категория,
выводится предупреждение, а кодирование выполняется так, как описано для
`handle_unknown="infrequent_if_exist"`.

.. versionchanged:: 1.1
Параметр `'infrequent_if_exist'` добавлен для автоматической обработки неизвестных
и редко встречающихся категорий.

.. versionadded:: 1.6
В версии 1.6 добавлен параметр `"warn"`.
'ignore'
categories categories: 'auto' or a list of array-like, default='auto'

Категории (уникальные значения) для каждого признака:

- 'auto' : Автоматически определять категории по обучающим данным.
- list : ``categories[i]`` содержит категории, ожидаемые в i-м
столбце. Переданные категории для одного признака не должны смешивать строковые и числовые
значения; числовые значения должны быть отсортированы.

Используемые категории доступны в атрибуте ``categories_``.

.. versionadded:: 0.20
'auto'
drop drop: {'first', 'if_binary'} or an array-like of shape (n_features,), default=None

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

Однако удаление одной категории нарушает симметрию исходного
представления и поэтому может приводить к смещению в последующих моделях,
например в моделях линейной классификации или регрессии с регуляризацией.

- None : сохранить все признаки (значение по умолчанию).
- 'first' : удалить первую категорию в каждом признаке. Если присутствует только одна
категория, признак будет удален целиком.
- 'if_binary' : удалить первую категорию в каждом признаке с двумя
категориями. Признаки с 1 или более чем 2 категориями
останутся без изменений.
- array : ``drop[i]`` — категория признака ``X[:, i]``, которую
следует удалить.

Если заданы `max_categories` или `min_frequency` для группировки
редко встречающихся категорий, удаление выполняется после
группировки.

.. versionadded:: 0.21
Параметр `drop` добавлен в версии 0.21.

.. versionchanged:: 0.23
Параметр `drop='if_binary'` добавлен в версии 0.23.

.. versionchanged:: 1.1
Добавлена поддержка удаления редко встречающихся категорий.
None
sparse_output sparse_output: bool, default=True

Если ``True``, возвращается разреженная матрица/массив SciPy
в формате "Compressed Sparse Row" (CSR).

.. versionadded:: 1.2
`sparse` переименован в `sparse_output`
True
dtype dtype: number type, default=np.float64

Требуемый тип данных результата.
<class 'numpy.float64'>
min_frequency min_frequency: int or float, default=None

Задает минимальную частоту, ниже которой категория считается
редко встречающейся.

- Если задан `int`, редко встречающимися считаются категории с меньшей
кардинальностью.

- Если задан `float`, редко встречающимися считаются категории с кардинальностью меньше
`min_frequency * n_samples`.

.. versionadded:: 1.1
Подробнее см. в :ref:`руководстве пользователя <encoder_infrequent_categories>`.
None
max_categories max_categories: int, default=None

Задает верхний предел количества выходных признаков для каждого входного
признака при обработке редко встречающихся категорий. Если есть редко встречающиеся
категории, `max_categories` учитывает категорию, представляющую
эти редко встречающиеся категории, вместе с часто встречающимися. Если задано `None`,
количество выходных признаков не ограничено.

.. versionadded:: 1.1
Подробнее см. в :ref:`руководстве пользователя <encoder_infrequent_categories>`.
None
feature_name_combiner feature_name_combiner: "concat" or callable, default="concat"

Функция с сигнатурой `def callable(input_feature, category)`, возвращающая
строку. Используется для создания имен признаков, возвращаемых методом
:meth:`get_feature_names_out`.

`"concat"` объединяет имя закодированного признака и категорию в формате
`feature + "_" + str(category)`. Например, для признака X со значениями 1, 6, 7 создаются
имена признаков `X_1, X_6, X_7`.

.. versionadded:: 1.3
'concat'
Параметры
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`: `l1_ratio=0` соответствует `penalty='l2'`,
`l1_ratio=1` — `penalty='l1'`, для `penalty='elasticnet'` задайте `l1_ratio`
любым числом с плавающей точкой от 0 до 1, а для `penalty=None` укажите `C=np.inf`.
'deprecated'
C C: float, по умолчанию=1.0

Обратная сила регуляризации; должно быть положительным числом с плавающей точкой.
Как и в машинах опорных векторов, меньшие значения означают более сильную
регуляризацию. При `C=np.inf` логистическая регрессия не штрафуется.
Наглядный пример влияния настройки параметра `C`
при штрафе L1 см. в разделе:
:ref:`sphx_glr_auto_examples_linear_model_plot_logistic_path.py`.
1.0
l1_ratio l1_ratio: float, по умолчанию=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. При n_samples > n_features
предпочтительно использовать `dual=False`.
False
tol tol: float, по умолчанию=1e-4

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

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

Используется только при выборе решателя `liblinear`
и значении `True` для `self.fit_intercept`. В этом случае `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, эти веса будут перемножены
с sample_weight (передаваемым методу fit).

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

Используется для перемешивания данных, если ``solver`` == 'sag', 'saga' или 'liblinear'.
Подробности см. в :term:`глоссарии <random_state>`.
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), а также от поддержки (мультиномиальной) многоклассовой классификации:

================= ======================== ======================
solver 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 задайте любое положительное
значение verbose, чтобы включить подробный вывод.
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


Улучшения масштабируемости и стабильности KMeans

Оцениватель KMeans был полностью переработан и теперь работает значительно быстрее и стабильнее. Кроме того, алгоритм Elkan теперь совместим с разреженными матрицами. Оцениватель использует параллелизм на основе OpenMP вместо joblib, поэтому параметр n_jobs больше не оказывает влияния. Подробнее о том, как управлять числом потоков, см. в нашей документации о параллелизме.

import numpy as np
import scipy

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import completeness_score
from sklearn.model_selection import train_test_split

rng = np.random.RandomState(0)
X, y = make_blobs(random_state=rng)
X = scipy.sparse.csr_matrix(X)
X_train, X_test, _, y_test = train_test_split(X, y, random_state=rng)
kmeans = KMeans(n_init="auto").fit(X_train)
print(completeness_score(kmeans.predict(X_test), y_test))
0.646170500955767

Улучшения оценивателей градиентного бустинга на основе гистограмм

В HistGradientBoostingClassifier и HistGradientBoostingRegressor внесён ряд улучшений. Помимо упомянутой выше функции потерь Пуассона, эти оцениватели теперь поддерживают веса объектов. Также добавлен автоматический критерий ранней остановки: по умолчанию ранняя остановка включается, если число образцов превышает 10 тыс. Наконец, теперь можно задавать монотонные ограничения, чтобы ограничивать прогнозы в зависимости от изменений определённых признаков. В следующем примере мы создаём целевую переменную, в целом положительно коррелирующую с первым признаком, но содержащую некоторый шум. Применение монотонных ограничений позволяет учесть в прогнозе общее влияние первого признака, а не подгонять его под шум. Пример применения см. в разделе Признаки в деревьях градиентного бустинга на основе гистограмм.

import numpy as np
from matplotlib import pyplot as plt

from sklearn.ensemble import HistGradientBoostingRegressor

# from sklearn.inspection import plot_partial_dependence
from sklearn.inspection import PartialDependenceDisplay
from sklearn.model_selection import train_test_split

n_samples = 500
rng = np.random.RandomState(0)
X = rng.randn(n_samples, 2)
noise = rng.normal(loc=0.0, scale=0.01, size=n_samples)
y = 5 * X[:, 0] + np.sin(10 * np.pi * X[:, 0]) - noise

gbdt_no_cst = HistGradientBoostingRegressor().fit(X, y)
gbdt_cst = HistGradientBoostingRegressor(monotonic_cst=[1, 0]).fit(X, y)

# plot_partial_dependence has been removed in version 1.2. From 1.2, use
# PartialDependenceDisplay instead.
# disp = plot_partial_dependence(
disp = PartialDependenceDisplay.from_estimator(
    gbdt_no_cst,
    X,
    features=[0],
    feature_names=["feature 0"],
    line_kw={"linewidth": 4, "label": "unconstrained", "color": "tab:blue"},
)
# plot_partial_dependence(
PartialDependenceDisplay.from_estimator(
    gbdt_cst,
    X,
    features=[0],
    line_kw={"linewidth": 4, "label": "constrained", "color": "tab:orange"},
    ax=disp.axes_,
)
disp.axes_[0, 0].plot(
    X[:, 0], y, "o", alpha=0.5, zorder=-1, label="samples", color="tab:green"
)
disp.axes_[0, 0].set_ylim(-3, 3)
disp.axes_[0, 0].set_xlim(-1, 1)
plt.legend()
plt.show()
plot release highlights 0 23 0

Поддержка весов образцов в Lasso и ElasticNet

Два регрессора линейных моделей — Lasso и ElasticNet — теперь поддерживают веса образцов.

import numpy as np

from sklearn.datasets import make_regression
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split

n_samples, n_features = 1000, 20
rng = np.random.RandomState(0)
X, y = make_regression(n_samples, n_features, random_state=rng)
sample_weight = rng.rand(n_samples)
X_train, X_test, y_train, y_test, sw_train, sw_test = train_test_split(
    X, y, sample_weight, random_state=rng
)
reg = Lasso()
reg.fit(X_train, y_train, sample_weight=sw_train)
print(reg.score(X_test, y_test, sw_test))
0.999791942438998

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_release_highlights_0_23_0.ipynb

Download Python source code: plot_release_highlights_0_23_0.py

Download zipped: plot_release_highlights_0_23_0.zip

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

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

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

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

Монотонные ограничения

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

Spec-Zone.ru

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