Spec-Zone.ru › scikit-learn

Примечание

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

Основные моменты выпуска scikit-learn 1.9

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

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

pip install --upgrade scikit-learn

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

conda install -c conda-forge scikit-learn

Обратные вызовы

В этом выпуске добавлена экспериментальная поддержка обратных вызовов в scikit-learn. Это объекты, которые можно зарегистрировать в оценщиках с помощью метода set_callbacks, чтобы вызывать их в начале и в конце ключевых этапов обучения. Подробнее см. в руководстве пользователя. Пока обратные вызовы поддерживаются лишь несколькими оценщиками; см. список поддерживаемых оценщиков.

В этом выпуске доступны два встроенных обратных вызова:

  • ProgressBar — для отображения индикаторов выполнения.
  • ScoringMonitor — для вычисления и регистрации метрик оценки.
from sklearn.callback import ProgressBar, ScoringMonitor
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression

X, y = make_classification(
    n_samples=1000, n_features=50, n_classes=10, n_informative=20, random_state=0
)

scoring_monitor = ScoringMonitor(scoring="d2_log_loss_score")
logreg = LogisticRegression(solver="lbfgs")
logreg.set_callbacks(scoring_monitor, ProgressBar())
logreg.fit(X, y)

log = scoring_monitor.get_logs().data_as_pandas
log[["task_name", "task_id", "d2_log_loss_score"]]
LogisticRegression - fit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
task_name task_id d2_log_loss_score
0 fit 0 0.332951
1 lbfgs-iter 0 0.022579
2 lbfgs-iter 1 0.176312
3 lbfgs-iter 2 0.242118
4 lbfgs-iter 3 0.266016
... ... ... ...
60 lbfgs-iter 59 0.332950
61 lbfgs-iter 60 0.332950
62 lbfgs-iter 61 0.332950
63 lbfgs-iter 62 0.332951
64 lbfgs-iter 63 0.332951

65 строк × 3 столбца



Индикаторы выполнения также можно отображать для композиций оценщиков.

from sklearn.callback import ProgressBar
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV

X, y = load_iris(return_X_y=True)
logreg = LogisticRegression(solver="lbfgs")
grid_search = GridSearchCV(logreg, {"C": [10, 1, 0.1]}, n_jobs=2)
grid_search.set_callbacks(ProgressBar())
grid_search.fit(X, y)

Промежуточный вывод. Обратите внимание, что выполнение двух подзадач происходит одновременно, поскольку мы задали n_jobs=2:

GridSearchCV - fit                                                          ━━━━━━╸                                   17% 0:00:02
  GridSearchCV - search #0                                                  ━━━━━━━━━━━━━╸                            34% 0:00:01
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #0 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #2 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #3 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #4 ━━━━━━━━━━━━━━━━━━━━━╸                    54% 0:00:01
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #5 ━━━━━━━━━━━━━━━━━                         44% 0:00:01

Итоговый вывод со всеми выполненными вложенными подзадачами:

GridSearchCV - fit                                                           ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
  GridSearchCV - search #0                                                   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #1  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #0  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #2  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #3  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #4  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #5  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #6  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #7  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #8  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #9  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #10 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #11 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #13 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #14 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
  GridSearchCV - refit-with-best-params | LogisticRegression - fit #1        ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00

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

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

Улучшения HTML-представления оценщиков

Теперь HTML-представление оценщиков включает сведения, которые становятся доступны после обучения. В таблице «Обученные атрибуты» перечислены обученные атрибуты, их типы и значения. Кроме того, в HTML-представлении преобразователей появились новые визуальные блоки, показывающие количество выходных признаков и их имена.

Разверните схему ниже, нажимая на разные визуальные блоки, чтобы посмотреть новые возможности.

import pandas as pd

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

X = pd.DataFrame({"num": [0.1, 0.2, 0.3, 0.4], "cat": ["A", "C", "B", "C"]})
y = [1, 3, 1, 2]

pipe = make_pipeline(
    make_column_transformer((StandardScaler(), ["num"]), (OneHotEncoder(), ["cat"])),
    LogisticRegression(),
)
pipe.fit(X, y)
Pipeline(steps=[('columntransformer',
                 ColumnTransformer(transformers=[('standardscaler',
                                                  StandardScaler(), ['num']),
                                                 ('onehotencoder',
                                                  OneHotEncoder(), ['cat'])])),
                ('logisticregression', LogisticRegression())])
В среде Jupyter повторно выполните эту ячейку, чтобы показать HTML-представление, или доверьте этому блокноту.
На GitHub невозможно отобразить HTML-представление. Попробуйте открыть эту страницу на nbviewer.org.
Параметры
steps steps: list of tuples

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

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

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

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

.. versionadded:: 1.6
None
memory memory: str or object with the joblib.Memory interface, default=None

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

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

Метки классов. Существует, только если последний шаг конвейера — классификатор.
ndarray[int64](3,) [1,2,3]
feature_names_in_ feature_names_in_: ndarray of shape (`n_features_in_`,)

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

.. versionadded:: 1.0
ndarray[object](2,) ['num','cat']
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 2
Параметры
transformers transformers: list of tuples

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

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

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

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

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

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

Если значение равно True, по завершении каждого преобразователя выводится время, затраченное на его обучение.
False
verbose_feature_names_out verbose_feature_names_out: bool, str or Callable[[str, str], str], default=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`.

.. versionadded:: 1.0

.. versionchanged:: 1.6
`verbose_feature_names_out` может быть функцией или строкой для форматирования.
True
Обученные атрибуты
Имя Тип Значение
feature_names_in_ feature_names_in_: ndarray of shape (`n_features_in_`,)

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

.. versionadded:: 1.0
ndarray[object](2,) ['num','cat']
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 2
named_transformers_ named_transformers_: :class:`~sklearn.utils.Bunch`

Атрибут только для чтения, позволяющий получить доступ к любому преобразователю по заданному имени.
Ключи — имена преобразователей, значения — обученные объекты-преобразователи.
Bunch {'standardsca...eHotEncoder()}
output_indices_ output_indices_: dict

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

.. versionadded:: 1.0
dict {'on...er': slice(1, 4, None), 're...er': slice(0, 0, None), 'st...er': slice(0, 1, None)}
sparse_output_ sparse_output_: bool

Логический флаг, указывающий, являются ли выходные данные ``transform`` разреженной матрицей или плотным массивом numpy; это зависит от результатов отдельных преобразователей и параметра `sparse_threshold`.
bool False
transformers_ transformers_: list

Коллекция обученных преобразователей в виде кортежей (имя, обученный_преобразователь, столбец). `fitted_transformer` может быть оценщиком или значением `'drop'`; значение `'passthrough'` заменяется эквивалентным объектом :class:`~sklearn.preprocessing.FunctionTransformer`. Если столбцы не выбраны, здесь будет необученный преобразователь. Если остались столбцы, последним элементом будет кортеж вида ('remainder', transformer, remaining_columns), соответствующий параметру ``remainder``. Если остались столбцы, ``len(transformers_)==len(transformers)+1``, в противном случае ``len(transformers_)==len(transformers)``.

.. versionadded:: 1.7
Теперь формат оставшихся столбцов по возможности совпадает с форматом остальных столбцов: если все столбцы были заданы именами столбцов (`str`), оставшиеся столбцы также хранятся как имена; если все столбцы были заданы масками (`bool`), оставшиеся столбцы также хранятся как маски; во всех остальных случаях они хранятся как индексы (`int`).
list [('st...er', StandardScaler(), ['num']), ('on...er', OneHotEncoder(), ['cat'])]
['num']
Параметры
copy copy: bool, значение по умолчанию=True

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

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

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

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

.. versionadded:: 1.0
ndarray[object](1,) ['num']
mean_ mean_: ndarray формы (n_features,) или None

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

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

.. versionadded:: 0.24
int 1
n_samples_seen_ n_samples_seen_: int или ndarray формы (n_features,)

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

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

.. versionadded:: 0.17
*scale_*
ndarray[float64](1,) [0.11]
var_ var_: ndarray формы (n_features,) или None

Дисперсия каждого признака в обучающем наборе. Используется для вычисления
`scale_`. Равно ``None``, если ``with_mean=False`` и
``with_std=False``.
ndarray[float64](1,) [0.01]
1 признак
num
['cat']
Параметры
categories categories: 'auto' или список массивов и подобных объектов, по умолчанию='auto'

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

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

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

.. versionadded:: 0.20
'auto'
drop drop: {'first', 'if_binary'} или объект, подобный массиву, формы (n_features,), по умолчанию=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
В версии 0.23 добавлена возможность `drop='if_binary'`.

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

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

.. versionadded:: 1.2
Параметр `sparse` переименован в `sparse_output`
True
dtype dtype: числовой тип, по умолчанию=np.float64

Желаемый тип данных результата.
<class 'numpy.float64'>
handle_unknown handle_unknown: {'error', 'ignore', 'infrequent_if_exist', 'warn'}, по умолчанию='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
В версии 1.1 добавлен вариант `'infrequent_if_exist'` для автоматической обработки неизвестных
и редких категорий.

.. versionadded:: 1.6
В версии 1.6 добавлен вариант `"warn"`.
'error'
min_frequency min_frequency: int или float, по умолчанию=None

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

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

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

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

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

.. versionadded:: 1.1
Подробнее см. в :ref:`Руководстве пользователя <encoder_infrequent_categories>`.
None
feature_name_combiner feature_name_combiner: "concat" или вызываемый объект, по умолчанию="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'
Атрибуты обученной модели
Имя Тип Значение
categories_ categories_: список массивов

Категории каждого признака, определённые при обучении
(в порядке признаков в X и в соответствии с выходными данными
``transform``). Сюда входит категория, указанная в ``drop``
(если она задана).
list [array(['A', '... dtype=object)]
drop_idx_ drop_idx_: массив формы (n_features,)

- ``drop_idx_[i]`` — индекс в ``categories_[i]`` категории,
удаляемой для каждого признака.
- ``drop_idx_[i] = None``, если для признака с индексом ``i``
не удаляется ни одна категория, например когда задано `drop='if_binary'`, а
признак не является бинарным.
- ``drop_idx_ = None``, если сохраняются все преобразованные признаки.

Если включена обработка редких категорий: для этого параметр `min_frequency` или
`max_categories` должен иметь значение, отличное от значения по умолчанию; если `drop_idx[i]` соответствует
редкой категории, удаляется вся редкая категория.

.. versionchanged:: 0.23
Добавлена возможность содержать значения `None`.
NoneType None
feature_names_in_ feature_names_in_: ndarray формы (`n_features_in_`,)

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

.. versionadded:: 1.0
ndarray[object](1,) ['cat']
n_features_in_ n_features_in_: int

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

.. versionadded:: 1.0
int 1
3 признака
cat_A
cat_B
cat_C
4 признака
standardscaler__num
onehotencoder__cat_A
onehotencoder__cat_B
onehotencoder__cat_C
Параметры
penalty penalty: {'l1', 'l2', 'elasticnet', None}, default='l2'

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

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

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

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

.. deprecated:: 1.8
Параметр `penalty` объявлен устаревшим в версии 1.8 и будет удалён в версии 1.10.
Вместо него используйте `l1_ratio` и `C`. Для `penalty='l2'` задайте `l1_ratio=0`,
для `penalty='l1'` — `l1_ratio=1`, для `penalty='elasticnet'` задайте `l1_ratio` равным любому числу с плавающей точкой от 0 до 1,
а для `penalty=None` — `C=np.inf`.
'deprecated'
C C: float, default=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, default=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, default=False

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

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

Указывает, следует ли добавлять константу (также называемую смещением или свободным членом)
в функцию принятия решения.
True
intercept_scaling intercept_scaling: float, default=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 or 'balanced', default=None

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

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

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

.. versionadded:: 0.17
*class_weight='balanced'*
None
random_state random_state: int, RandomState instance, default=None

Используется для перемешивания
данных, когда ``solver`` равен 'sag', 'saga' или 'liblinear'. Подробности см. в :term:`глоссарии <random_state>`.
None
solver solver: {'lbfgs', 'liblinear', 'newton-cg', 'newton-cholesky', 'sag', 'saga'}, default='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, default=100

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

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

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

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

Не влияет на работу.

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

Список меток классов, известных классификатору.
ndarray[int64](3,) [1,2,3]
coef_ coef_: ndarray or CSR matrix of shape (1, n_features) or (n_classes, n_features)

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

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

По умолчанию атрибут создаётся как плотный массив, но его можно преобразовать в
разреженный (формат CSR) с помощью :meth:`sparsify` (это может быть полезно
при регуляризации L1, когда многие коэффициенты равны нулю), а затем обратно в
плотный с помощью :meth:`densify`.
ndarray[float64](3, 4) [[-0.3 , 0.25, 0.35,-0.6 ], [ 0.64,-0.05,-0.19, 0.24], [-0.34,-0.2 ,-0.16, 0.36]]
intercept_ intercept_: ndarray of shape (1,) or (n_classes,)

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

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

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

.. versionadded:: 0.24
int 4
n_iter_ n_iter_: ndarray of shape (1, )

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

.. versionchanged:: 0.20

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


Вычисление метрик для различных порогов

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

import matplotlib.pyplot as plt

from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, f1_score, metric_at_thresholds

X, y = make_classification(weights=[0.9, 0.1], random_state=0)
lr = LogisticRegression(random_state=0).fit(X, y)
y_score = lr.predict_proba(X)[:, 1]

accuracy, thresholds = metric_at_thresholds(y, y_score, accuracy_score)
f1, _ = metric_at_thresholds(y, y_score, f1_score)

_, ax = plt.subplots()
ax.plot(thresholds, accuracy, label="Accuracy")
ax.plot(thresholds, f1, label="F1")
ax.set_xlabel("threshold")
ax.set_ylabel("metric value")
ax.legend()
plt.show()
plot release highlights 1 9 0

Настройка разреженных массивов

Добавлен новый ключ конфигурации "sparse_interface", позволяющий задавать тип разреженных объектов, создаваемых функциями и оценщиками. Теперь можно создавать разреженные массивы вместо разреженных матриц (значение по умолчанию). Это продолжает работу по подготовке к переходу SciPy от разреженных матриц к разреженным массивам.

import sklearn
from sklearn.preprocessing import OneHotEncoder

X = [["fox", "dog", "cat"]]
ohe = OneHotEncoder()

with sklearn.config_context(sparse_interface="sparray"):
    Xt = ohe.fit_transform(X)
Xt
<Compressed Sparse Row sparse array of dtype 'float64'
    with 3 stored elements and shape (1, 3)>

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_release_highlights_1_9_0.ipynb

Download Python source code: plot_release_highlights_1_9_0.py

Download zipped: plot_release_highlights_1_9_0.zip

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

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

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

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

Анализ сходимости моделей логистической регрессии со штрафом

© 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_1_9_0.html

Spec-Zone.ru

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