Spec-Zone.ru › scikit-learn

Примечание

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

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

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

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

pip install --upgrade scikit-learn

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

conda install -c conda-forge scikit-learn

Квантильная функция потерь в HistGradientBoostingRegressor

HistGradientBoostingRegressor может моделировать квантили с помощью loss="quantile" и нового параметра quantile.

import matplotlib.pyplot as plt
import numpy as np

from sklearn.ensemble import HistGradientBoostingRegressor

# Simple regression function for X * cos(X)
rng = np.random.RandomState(42)
X_1d = np.linspace(0, 10, num=2000)
X = X_1d.reshape(-1, 1)
y = X_1d * np.cos(X_1d) + rng.normal(scale=X_1d / 3)

quantiles = [0.95, 0.5, 0.05]
parameters = dict(loss="quantile", max_bins=32, max_iter=50)
hist_quantiles = {
    f"quantile={quantile:.2f}": HistGradientBoostingRegressor(
        **parameters, quantile=quantile
    ).fit(X, y)
    for quantile in quantiles
}

fig, ax = plt.subplots()
ax.plot(X_1d, y, "o", alpha=0.5, markersize=1)
for quantile, hist in hist_quantiles.items():
    ax.plot(X_1d, hist.predict(X), label=quantile)
_ = ax.legend(loc="lower left")
plot release highlights 1 1 0

Пример использования см. в разделе Возможности деревьев с гистограммным градиентным бустингом

get_feature_names_out доступен во всех преобразователях

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

from sklearn.compose import ColumnTransformer
from sklearn.datasets import fetch_openml
from sklearn.feature_selection import SelectKBest
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import OneHotEncoder, StandardScaler

X, y = fetch_openml(
    "titanic", version=1, as_frame=True, return_X_y=True, parser="pandas"
)
numeric_features = ["age", "fare"]
numeric_transformer = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
categorical_features = ["embarked", "pclass"]

preprocessor = ColumnTransformer(
    [
        ("num", numeric_transformer, numeric_features),
        (
            "cat",
            OneHotEncoder(handle_unknown="ignore", sparse_output=False),
            categorical_features,
        ),
    ],
    verbose_feature_names_out=False,
)
log_reg = make_pipeline(preprocessor, SelectKBest(k=7), LogisticRegression())
log_reg.fit(X, y)
Pipeline(steps=[('columntransformer',
                 ColumnTransformer(transformers=[('num',
                                                  Pipeline(steps=[('simpleimputer',
                                                                   SimpleImputer(strategy='median')),
                                                                  ('standardscaler',
                                                                   StandardScaler())]),
                                                  ['age', 'fare']),
                                                 ('cat',
                                                  OneHotEncoder(handle_unknown='ignore',
                                                                sparse_output=False),
                                                  ['embarked', 'pclass'])],
                                   verbose_feature_names_out=False)),
                ('selectkbest', SelectKBest(k=7)),
                ('logisticregression', LogisticRegression())])
В среде Jupyter повторно запустите эту ячейку, чтобы отобразить HTML-представление, или доверьте этому блокноту.
На GitHub HTML-представление невозможно отобразить; попробуйте открыть эту страницу на nbviewer.org.
Параметры
steps steps: список кортежей

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

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

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

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

.. versionadded:: 1.6
None
memory memory: строка или объект с интерфейсом joblib.Memory, 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 формы (n_classes,)

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

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

.. versionadded:: 1.0
ndarray[object](13,) ['pclass','name','sex',...,'boat','body','home.dest']
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 13
Параметры
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 в виде одномерного массивоподобного объекта (вектора),
следует использовать скалярную строку или целое число;
в противном случае преобразователю будет передан двумерный массив.
Вызываемому объекту передаются входные данные `X`; он может вернуть любое из
перечисленного выше. Чтобы выбрать несколько столбцов по имени или типу данных, используйте
:obj:`make_column_selector`.
[('num', ...), ('cat', ...)]
verbose_feature_names_out verbose_feature_names_out: bool, str или 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` может быть вызываемым объектом или строкой для форматирования.
False
remainder remainder: {'drop', 'passthrough'} или оцениватель, default='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, 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
Обученные атрибуты
Имя Тип Значение
feature_names_in_ feature_names_in_: ndarray формы (`n_features_in_`,)

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

.. versionadded:: 1.0
ndarray[object](13,) ['pclass','name','sex',...,'boat','body','home.dest']
n_features_in_ n_features_in_: int

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

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

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

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

.. versionadded:: 1.0
dict {'cat': slice(2, 9, None), 'num': slice(0, 2, None), 're...er': slice(0, 0, 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 [('num', Pipeline(step...ardScaler())]), ['age', 'fare']), ('cat', OneHotEncoder..._output=False), ['em...ed', 'pclass']), ('re...er', 'drop', ['name', 'sex', 'sibsp', 'parch', ...])]
['age', 'fare']
Параметры
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` будет добавлено к выходным данным
преобразования импутатора. Это позволяет предиктивной модели
учитывать пропущенные значения, несмотря на импутацию. Если у признака не было
пропущенных значений во время fit/train, он не появится в индикаторе
пропусков, даже если пропущенные значения есть во время
transform/test.
False
keep_empty_features keep_empty_features: bool, default=False

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

.. versionadded:: 1.2
False
Атрибуты после обучения
Имя Тип Значение
feature_names_in_ feature_names_in_: ndarray of shape (`n_features_in_`,)

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

.. versionadded:: 1.0
ndarray[object](2,) ['age','fare']
indicator_ indicator_: :class:`~sklearn.impute.MissingIndicator`

Индикатор, используемый для добавления бинарных индикаторов пропущенных значений.
`None`, если `add_indicator=False`.
NoneType None
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 2
statistics_ statistics_: array of shape (n_features,)

Заполняющее значение импутации для каждого признака.
Вычисление статистик может приводить к значениям `np.nan`.
Во время :meth:`transform` признаки, соответствующие статистикам `np.nan`,
будут отброшены.
ndarray[float64](2,) [28. ,14.45]
2 признака
age
fare
Параметры
copy copy: bool, default=True

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

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

Если True, масштабирует данные до единичной дисперсии (или, что эквивалентно,
единичного стандартного отклонения).
True
Атрибуты после обучения
Имя Тип Значение
mean_ mean_: ndarray of shape (n_features,) or None

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

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

.. versionadded:: 0.24
int 2
n_samples_seen_ n_samples_seen_: int or ndarray of shape (n_features,)

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

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

.. versionadded:: 0.17
*scale_*
ndarray[float64](2,) [12.9 ,51.72]
var_ var_: ndarray of shape (n_features,) or None

Дисперсия каждого признака в обучающем наборе. Используется для вычисления
`scale_`. Равно ``None``, если ``with_mean=False`` и
``with_std=False``.
ndarray[float64](2,) [ 166.42,2675.14]
2 признака
x0
x1
['embarked', 'pclass']
Параметры
sparse_output sparse_output: bool, default=True

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

.. versionadded:: 1.2
`sparse` переименован в `sparse_output`
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
Параметр `"warn"` добавлен в версии 1.6.
'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
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'
Атрибуты после обучения
Имя Тип Значение
categories_ categories_: list of arrays

Категории каждого признака, определённые во время обучения
(в порядке признаков в X и в соответствии с выходными данными
``transform``). Сюда входит категория, указанная в ``drop``
(если она задана).
list [array(['C', '... dtype=object), array([1, 2, 3])]
drop_idx_ drop_idx_: array of shape (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 of shape (`n_features_in_`,)

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

.. versionadded:: 1.0
ndarray[object](2,) ['embarked','pclass']
n_features_in_ n_features_in_: int

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

.. versionadded:: 1.0
int 2
7 признаков
embarked_C
embarked_Q
embarked_S
embarked_nan
pclass_1
pclass_2
pclass_3
9 признаков
age
fare
embarked_C
embarked_Q
embarked_S
embarked_nan
pclass_1
pclass_2
pclass_3
Параметры
k k: int or "all", default=10

Количество наиболее важных признаков для выбора.
Параметр "all" отключает выбор и используется при поиске параметров.
7
score_func score_func: callable, default=f_classif

Функция, принимающая два массива X и y и возвращающая пару массивов
(scores, pvalues) либо один массив с оценками.
По умолчанию используется f_classif (см. раздел «См. также» ниже). Функция по умолчанию работает только
с задачами классификации.

.. versionadded:: 0.18
<function f_c...x7841675185c0>
Обученные атрибуты
Имя Тип Значение
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 9
pvalues_ pvalues_: array-like of shape (n_features,)

p-значения оценок признаков; None, если `score_func` вернула только оценки.
ndarray[float64](9,) [0.11,0. ,0. ,...,0. ,0.07,0. ]
scores_ scores_: array-like of shape (n_features,)

Оценки признаков.
ndarray[float64](9,) [ 2.51, 83.04, 44.84,...,110.71, 3.38,114.16]
7 признаков
x1
x2
x4
x5
x6
x7
x8
Параметры
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[object](2,) ['0','1']
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](1, 7) [[ 0.25, 0.01,-0.59,..., 0.49, 0.2 ,-0.66]]
intercept_ intercept_: ndarray of shape (1,) or (n_classes,)

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

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

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

.. versionadded:: 0.24
int 7
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,) [20]


Здесь мы выделяем из конвейера все шаги, кроме последнего. Имена выходных признаков этой части конвейера — это признаки, передаваемые в логистическую регрессию. Эти имена напрямую соответствуют коэффициентам логистической регрессии:

import pandas as pd

log_reg_input_features = log_reg[:-1].get_feature_names_out()
pd.Series(log_reg[-1].coef_.ravel(), index=log_reg_input_features).plot.bar()
plt.tight_layout()
plot release highlights 1 1 0

Группировка редко встречающихся категорий в OneHotEncoder

OneHotEncoder поддерживает объединение редко встречающихся категорий в один выход для каждого признака. Параметры, включающие объединение редко встречающихся категорий, — это min_frequency и max_categories. Подробнее см. в руководстве пользователя.

import numpy as np

from sklearn.preprocessing import OneHotEncoder

X = np.array(
    [["dog"] * 5 + ["cat"] * 20 + ["rabbit"] * 10 + ["snake"] * 3], dtype=object
).T
enc = OneHotEncoder(min_frequency=6, sparse_output=False).fit(X)
enc.infrequent_categories_
[array(['dog', 'snake'], dtype=object)]

Поскольку dog и snake — редко встречающиеся категории, при преобразовании они объединяются:

encoded = enc.transform(np.array([["dog"], ["snake"], ["cat"], ["rabbit"]]))
pd.DataFrame(encoded, columns=enc.get_feature_names_out())
x0_cat x0_rabbit x0_infrequent_sklearn
0 0.0 0.0 1.0
1 0.0 0.0 1.0
2 1.0 0.0 0.0
3 0.0 1.0 0.0


Повышение производительности

Вычисление попарных расстояний для плотных наборов данных float64 было переработано, чтобы эффективнее использовать неблокирующий параллелизм потоков. Например, neighbors.NearestNeighbors.kneighbors и neighbors.NearestNeighbors.radius_neighbors теперь работают соответственно до ×20 и ×5 быстрее, чем раньше. Ниже перечислены функции и оценщики, производительность которых улучшена:

  • metrics.pairwise_distances_argmin
  • metrics.pairwise_distances_argmin_min
  • cluster.AffinityPropagation
  • cluster.Birch
  • cluster.MeanShift
  • cluster.OPTICS
  • cluster.SpectralClustering
  • feature_selection.mutual_info_regression
  • neighbors.KNeighborsClassifier
  • neighbors.KNeighborsRegressor
  • neighbors.RadiusNeighborsClassifier
  • neighbors.RadiusNeighborsRegressor
  • neighbors.LocalOutlierFactor
  • neighbors.NearestNeighbors
  • manifold.Isomap
  • manifold.LocallyLinearEmbedding
  • manifold.TSNE
  • manifold.trustworthiness
  • semi_supervised.LabelPropagation
  • semi_supervised.LabelSpreading

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

Кроме того, вычисление функций потерь было переработано с использованием Cython, что повысило производительность следующих оценщиков:

  • linear_model.LogisticRegression
  • linear_model.GammaRegressor
  • linear_model.PoissonRegressor
  • linear_model.TweedieRegressor

MiniBatchNMF: онлайн-версия NMF

Новый класс MiniBatchNMF реализует более быструю, но менее точную версию неотрицательной матричной факторизации (NMF). MiniBatchNMF разбивает данные на мини-пакеты и оптимизирует модель NMF в онлайн-режиме, последовательно проходя по мини-пакетам, что делает её более подходящей для больших наборов данных. В частности, класс реализует partial_fit, который можно использовать для онлайн-обучения, когда данные изначально доступны не полностью или не помещаются в память.

import numpy as np

from sklearn.decomposition import MiniBatchNMF

rng = np.random.RandomState(0)
n_samples, n_features, n_components = 10, 10, 5
true_W = rng.uniform(size=(n_samples, n_components))
true_H = rng.uniform(size=(n_components, n_features))
X = true_W @ true_H

nmf = MiniBatchNMF(n_components=n_components, random_state=0)

for _ in range(10):
    nmf.partial_fit(X)

W = nmf.transform(X)
H = nmf.components_
X_reconstructed = W @ H

print(
    "relative reconstruction error: ",
    f"{np.sum((X - X_reconstructed) ** 2) / np.sum(X**2):.5f}",
)
relative reconstruction error:  0.00364

BisectingKMeans: деление и кластеризация

Новый класс BisectingKMeans представляет собой вариант KMeans, использующий иерархическую кластеризацию методом разделения. Вместо создания всех центроидов сразу, центроиды последовательно выбираются на основе предыдущей кластеризации: кластер многократно разделяется на два новых кластера, пока не будет достигнуто целевое число кластеров, что придаёт кластеризации иерархическую структуру.

import matplotlib.pyplot as plt

from sklearn.cluster import BisectingKMeans, KMeans
from sklearn.datasets import make_blobs

X, _ = make_blobs(n_samples=1000, centers=2, random_state=0)

km = KMeans(n_clusters=5, random_state=0, n_init="auto").fit(X)
bisect_km = BisectingKMeans(n_clusters=5, random_state=0).fit(X)

fig, ax = plt.subplots(1, 2, figsize=(10, 5))
ax[0].scatter(X[:, 0], X[:, 1], s=10, c=km.labels_)
ax[0].scatter(km.cluster_centers_[:, 0], km.cluster_centers_[:, 1], s=20, c="r")
ax[0].set_title("KMeans")

ax[1].scatter(X[:, 0], X[:, 1], s=10, c=bisect_km.labels_)
ax[1].scatter(
    bisect_km.cluster_centers_[:, 0], bisect_km.cluster_centers_[:, 1], s=20, c="r"
)
_ = ax[1].set_title("BisectingKMeans")
KMeans, BisectingKMeans

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_release_highlights_1_1_0.ipynb

Download Python source code: plot_release_highlights_1_1_0.py

Download zipped: plot_release_highlights_1_1_0.zip

Похожие примеры

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

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

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

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

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

Spec-Zone.ru

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