Spec-Zone.ru › scikit-learn

Примечание

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

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

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

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

pip install --upgrade scikit-learn

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

conda install -c conda-forge scikit-learn

Вывод Pandas с помощью API set_output

Теперь преобразователи scikit-learn поддерживают вывод в формате pandas с помощью API set_output. Подробнее об API set_output см. в примере: Знакомство с API set_output и в этом видео о выводе pandas DataFrame для преобразователей scikit-learn (несколько примеров).

import numpy as np

from sklearn.compose import ColumnTransformer
from sklearn.datasets import load_iris
from sklearn.preprocessing import KBinsDiscretizer, StandardScaler

X, y = load_iris(as_frame=True, return_X_y=True)
sepal_cols = ["sepal length (cm)", "sepal width (cm)"]
petal_cols = ["petal length (cm)", "petal width (cm)"]

preprocessor = ColumnTransformer(
    [
        ("scaler", StandardScaler(), sepal_cols),
        (
            "kbin",
            KBinsDiscretizer(encode="ordinal", quantile_method="averaged_inverted_cdf"),
            petal_cols,
        ),
    ],
    verbose_feature_names_out=False,
).set_output(transform="pandas")

X_out = preprocessor.fit_transform(X)
X_out.sample(n=5, random_state=0)
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
114 -0.052506 -0.592373 3.0 4.0
62 0.189830 -1.973554 2.0 1.0
33 -0.416010 2.630382 0.0 1.0
107 1.765012 -0.362176 4.0 3.0
7 -1.021849 0.788808 1.0 1.0


Ограничения взаимодействия в деревьях градиентного бустинга на основе гистограмм

HistGradientBoostingRegressor и HistGradientBoostingClassifier теперь поддерживают ограничения взаимодействия с помощью параметра interaction_cst. Подробности см. в руководстве пользователя. В следующем примере взаимодействие признаков запрещено.

from sklearn.datasets import load_diabetes
from sklearn.ensemble import HistGradientBoostingRegressor

X, y = load_diabetes(return_X_y=True, as_frame=True)

hist_no_interact = HistGradientBoostingRegressor(
    interaction_cst=[[i] for i in range(X.shape[1])], random_state=0
)
hist_no_interact.fit(X, y)
HistGradientBoostingRegressor(interaction_cst=[[0], [1], [2], [3], [4], [5],
                                               [6], [7], [8], [9]],
                              random_state=0)
В среде Jupyter запустите эту ячейку повторно, чтобы отобразить HTML-представление, или доверьте этому блокноту.
На GitHub невозможно отобразить HTML-представление; попробуйте открыть эту страницу на nbviewer.org.
Параметры
interaction_cst interaction_cst: {"pairwise", "no_interactions"} или последовательность списков/кортежей/множеств целых чисел, по умолчанию=None

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

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

Строки "pairwise" и "no_interactions" — это сокращённые обозначения
для разрешения только попарных взаимодействий или полного запрета взаимодействий соответственно.

Например, если всего имеется 5 признаков, `interaction_cst=[{0, 1}]`
эквивалентно `interaction_cst=[{0, 1}, {2, 3, 4}]`
и указывает, что каждая ветвь дерева будет разделяться либо только
по признакам 0 и 1, либо только по признакам 2, 3 и 4.

Пример использования `interaction_cst` см. в :ref:`этом примере<ice-vs-pdp>`.

.. versionadded:: 1.2
[[0], [1], ...]
random_state random_state: целое число, экземпляр RandomState или None, по умолчанию=None

Генератор псевдослучайных чисел для управления выборкой при
разбиении на интервалы, а также разделением данных на обучающую и проверочную выборки, если включена досрочная остановка.
Передайте целое число, чтобы получать воспроизводимые результаты при нескольких вызовах функции.
См. :term:`глоссарий <random_state>`.
0
loss loss: {'squared_error', 'absolute_error', 'gamma', 'poisson', 'quantile'}, по умолчанию='squared_error'

Функция потерь, используемая в процессе бустинга. Обратите внимание, что
функции потерь "squared error", "gamma" и "poisson" фактически реализуют
«половину суммы квадратов ошибок», «половину девианса гамма-распределения» и «половину
девианса распределения Пуассона», что упрощает вычисление градиента. Кроме того,
функции потерь "gamma" и "poisson" внутри используют логарифмическую функцию связи; для "gamma"
требуется ``y > 0``, а для "poisson" — ``y >= 0``.
В "quantile" используется функция потерь pinball.

.. versionchanged:: 0.23
Добавлен вариант 'poisson'.

.. versionchanged:: 1.1
Добавлен вариант 'quantile'.

.. versionchanged:: 1.3
Добавлен вариант 'gamma'.
'squared_error'
quantile quantile: число с плавающей точкой, по умолчанию=None

Если loss равен "quantile", этот параметр задаёт оцениваемую квантиль
и должен находиться в диапазоне от 0 до 1.
None
learning_rate learning_rate: число с плавающей точкой, по умолчанию=0.1

Скорость обучения, также известная как *сжатие*. Используется в качестве
множителя для значений листьев. Укажите ``1``, чтобы отключить
сжатие.
0.1
max_iter max_iter: целое число, по умолчанию=100

Максимальное количество итераций процесса бустинга, то есть
максимальное количество деревьев.
100
max_leaf_nodes max_leaf_nodes: целое число или None, по умолчанию=31

Максимальное количество листьев в каждом дереве. Должно быть строго
больше 1. Если задано None, ограничение отсутствует.
31
max_depth max_depth: целое число или None, по умолчанию=None

Максимальная глубина каждого дерева. Глубина дерева — это количество
рёбер от корня до самого глубокого листа.
По умолчанию глубина не ограничена.
None
min_samples_leaf min_samples_leaf: целое число, по умолчанию=20

Минимальное количество образцов в каждом листе. Для небольших наборов данных, содержащих менее
нескольких сотен образцов, рекомендуется уменьшить это значение,
поскольку в противном случае будут строиться только очень неглубокие деревья.
20
l2_regularization l2_regularization: число с плавающей точкой, по умолчанию=0

Параметр регуляризации L2, штрафующий листья с малыми значениями гессиана.
Укажите ``0``, чтобы отключить регуляризацию (значение по умолчанию).
0.0
max_features max_features: число с плавающей точкой, по умолчанию=1.0

Доля случайно выбранных признаков для каждого разбиения узла.
Это разновидность регуляризации: при меньших значениях деревья становятся более слабыми
моделями и риск переобучения может снизиться.
Если заданы ограничения взаимодействия через `interaction_cst`, при выборке учитываются только разрешённые
признаки.

.. versionadded:: 1.4
1.0
max_bins max_bins: целое число, по умолчанию=255

Максимальное количество интервалов для непропущенных значений. Перед
обучением каждый признак входного массива `X` разбивается на интервалы
со значениями типа integer, что значительно ускоряет этап обучения.
Для признаков с небольшим количеством уникальных значений может использоваться меньше
интервалов, чем ``max_bins``. Помимо ``max_bins``, всегда резервируется ещё один интервал
для пропущенных значений. Значение не должно превышать 255.
255
categorical_features categorical_features: массивоподобный объект типа {bool, int, str} формы (n_features) или формы (n_categorical_features,), по умолчанию='from_dtype'

Задаёт категориальные признаки.

- None: ни один признак не считается категориальным.
- Массивоподобный объект с логическими значениями: логическая маска категориальных признаков.
- Массивоподобный объект с целыми числами: индексы категориальных
признаков.
- Массивоподобный объект со строками: названия категориальных признаков (предполагается, что обучающие
данные содержат названия признаков).
- `"from_dtype"`: столбцы фрейма данных с типами dtype "Categorical" и "Enum"
считаются категориальными признаками. На входе должен быть фрейм данных,
поддерживаемый narwhals (или совместимый с ним): функция :func:`narwhals.from_native` должна
работать. Например, это относится к фреймам данных pandas и polars.

Для каждого категориального признака количество уникальных категорий не должно превышать `max_bins`.
Отрицательные значения категориальных признаков, закодированных числовыми
типами данных, считаются пропущенными. Все категориальные значения
преобразуются в числа с плавающей точкой. Это значит, что категориальные значения
1.0 и 1 считаются одной и той же категорией.

Подробнее см. в :ref:`руководстве пользователя <categorical_support_gbdt>` и
:ref:`sphx_glr_auto_examples_ensemble_plot_gradient_boosting_categorical.py`.

.. versionadded:: 0.24

.. versionchanged:: 1.2
Добавлена поддержка названий признаков.

.. versionchanged:: 1.4
Добавлен вариант `"from_dtype"`.

.. versionchanged:: 1.6
Значение по умолчанию изменено с `None` на `"from_dtype"`.
'from_dtype'
monotonic_cst monotonic_cst: массивоподобный объект целых чисел формы (n_features) или dict, по умолчанию=None

Монотонное ограничение для каждого признака задаётся следующими
целочисленными значениями:

- 1: монотонное возрастание
- 0: без ограничений
- -1: монотонное убывание

Если передан dict со строковыми ключами, сопоставьте признаки с монотонными ограничениями по названиям.
Если передан массив, признаки сопоставляются с ограничениями по позициям. Пример использования см.
в :ref:`monotonic_cst_features_names`.

Подробнее см. в :ref:`руководстве пользователя <monotonic_cst_gbdt>`.

.. versionadded:: 0.23

.. versionchanged:: 1.2
Добавлена поддержка dict ограничений с названиями признаков в качестве ключей.
None
warm_start warm_start: логическое значение, по умолчанию=False

Если задано ``True``, повторно используйте результат предыдущего вызова fit
и добавьте в ансамбль дополнительные оцениватели. Чтобы результаты были достоверными,
оцениватель следует заново обучать только на тех же данных.
См. :term:`глоссарий <warm_start>`.
False
early_stopping early_stopping: 'auto' или логическое значение, по умолчанию='auto'

При значении 'auto' досрочная остановка включается, если размер выборки превышает
10000 или если в `fit` переданы `X_val` и `y_val`. При значении True досрочная остановка
включена, в противном случае она отключена.

.. versionadded:: 0.23
'auto'
scoring scoring: строка, вызываемый объект или None, по умолчанию='loss'

Метод оценки, используемый для досрочной остановки. Используется только в том случае, если `early_stopping`
включён. Возможные варианты:

- строка: варианты см. в :ref:`scoring_string_names`.
- вызываемый объект: объект-оценщик (например, функция) с сигнатурой
``scorer(estimator, X, y)``. Подробности см. в :ref:`scoring_callable`.
- `None`: используется :ref:`коэффициент детерминации <r2_score>`
(:math:`R^2`).
- 'loss': досрочная остановка определяется по значению функции потерь.
'loss'
validation_fraction validation_fraction: целое число, число с плавающей точкой или None, по умолчанию=0.1

Доля (или абсолютный размер) обучающих данных, выделяемая
для проверки при досрочной остановке. Если задано None, досрочная остановка выполняется на
обучающих данных.
Значение игнорируется, если досрочная остановка не выполняется, например
при `early_stopping=False`, или если в fit переданы `X_val` и `y_val`.
0.1
n_iter_no_change n_iter_no_change: целое число, по умолчанию=10

Используется для определения момента «досрочной остановки». Процесс обучения
останавливается, если ни одна из последних ``n_iter_no_change`` оценок не превосходит
оценку, полученную ``n_iter_no_change - 1`` итераций назад, с учётом
допуска. Используется только при досрочной остановке.
10
tol tol: число с плавающей точкой, по умолчанию=1e-7

Абсолютный допуск, используемый при сравнении оценок во время досрочной
остановки. Чем выше допуск, тем вероятнее досрочная
остановка: при большем допуске последующие итерации с меньшей вероятностью будут считаться улучшением относительно опорной оценки.
1e-07
verbose verbose: целое число, по умолчанию=0

Уровень подробности вывода. Если значение отлично от нуля, выводится информация о
процессе обучения. Значение ``1`` выводит только сводную информацию, ``2`` — информацию для каждой
итерации.
0
Атрибуты обученной модели
Название Тип Значение
do_early_stopping_ do_early_stopping_: логическое значение

Указывает, используется ли досрочная остановка во время обучения.
bool False
feature_names_in_ feature_names_in_: ndarray формы (`n_features_in_`,)

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

.. versionadded:: 1.0
ndarray[object](10,) ['age','sex','bmi',...,'s4','s5','s6']
is_categorical_ is_categorical_: ndarray формы (n_features, ) или None

Логическая маска категориальных признаков. ``None``, если категориальных
признаков нет.
NoneType None
n_features_in_ n_features_in_: целое число

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

.. versionadded:: 0.24
int 10
n_iter_ n_iter_: целое число

Количество итераций, выбранное с учётом досрочной остановки и значения параметра
`early_stopping`. В противном случае соответствует max_iter.
int 100
n_trees_per_iteration_ n_trees_per_iteration_: целое число

Количество деревьев, строящихся на каждой итерации. Для регрессоров
оно всегда равно 1.
int 1
train_score_ train_score_: ndarray формы (n_iter_+1,)

Оценки на обучающих данных для каждой итерации. Первый элемент
содержит оценку ансамбля до первой итерации. Оценки
вычисляются в соответствии с параметром ``scoring``. Если ``scoring``
не равен 'loss', оценки вычисляются для подмножества не более чем из 10 000
образцов. Пустой массив, если досрочная остановка не используется.
ndarray[float64](0,) []
validation_score_ validation_score_: ndarray формы (n_iter_+1,)

Оценки на отложенных проверочных данных для каждой итерации. Первый
элемент содержит оценку ансамбля до первой итерации.
Оценки вычисляются в соответствии с параметром ``scoring``. Массив пуст, если
досрочная остановка не используется или если ``validation_fraction`` равен None.
ndarray[float64](0,) []


Новые и улучшенные визуализации

PredictionErrorDisplay позволяет качественно анализировать регрессионные модели.

import matplotlib.pyplot as plt

from sklearn.metrics import PredictionErrorDisplay

fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(12, 5))
_ = PredictionErrorDisplay.from_estimator(
    hist_no_interact, X, y, kind="actual_vs_predicted", ax=axs[0]
)
_ = PredictionErrorDisplay.from_estimator(
    hist_no_interact, X, y, kind="residual_vs_predicted", ax=axs[1]
)
plot release highlights 1 2 0

LearningCurveDisplay теперь позволяет визуализировать результаты, полученные с помощью learning_curve.

from sklearn.model_selection import LearningCurveDisplay

_ = LearningCurveDisplay.from_estimator(
    hist_no_interact, X, y, cv=5, n_jobs=2, train_sizes=np.linspace(0.1, 1, 5)
)
plot release highlights 1 2 0

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

from sklearn.datasets import fetch_openml

X, y = fetch_openml(
    "titanic", version=1, as_frame=True, return_X_y=True, parser="pandas"
)
X = X.select_dtypes(["number", "category"]).drop(columns=["body"])
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import OrdinalEncoder

categorical_features = ["pclass", "sex", "embarked"]
model = make_pipeline(
    ColumnTransformer(
        transformers=[("cat", OrdinalEncoder(), categorical_features)],
        remainder="passthrough",
    ),
    HistGradientBoostingRegressor(random_state=0),
).fit(X, y)
from sklearn.inspection import PartialDependenceDisplay

fig, ax = plt.subplots(figsize=(14, 4), constrained_layout=True)
_ = PartialDependenceDisplay.from_estimator(
    model,
    X,
    features=["age", "sex", ("pclass", "sex")],
    categorical_features=categorical_features,
    ax=ax,
)
plot release highlights 1 2 0

Ускоренный парсер в fetch_openml

fetch_openml теперь поддерживает новый парсер "pandas", который эффективнее использует память и процессор. В версии 1.4 значением по умолчанию станет parser="auto": он будет автоматически использовать парсер "pandas" для плотных данных и "liac-arff" для разреженных данных.

X, y = fetch_openml(
    "titanic", version=1, as_frame=True, return_X_y=True, parser="pandas"
)
X.head()
pclass name sex age sibsp parch ticket fare cabin embarked boat body home.dest
0 1 Allen, Miss. Elisabeth Walton female 29.0000 0 0 24160 211.3375 B5 S 2 NaN St Louis, MO
1 1 Allison, Master. Hudson Trevor male 0.9167 1 2 113781 151.5500 C22 C26 S 11 NaN Montreal, PQ / Chesterville, ON
2 1 Allison, Miss. Helen Loraine female 2.0000 1 2 113781 151.5500 C22 C26 S NaN NaN Montreal, PQ / Chesterville, ON
3 1 Allison, Mr. Hudson Joshua Creighton male 30.0000 1 2 113781 151.5500 C22 C26 S NaN 135.0 Montreal, PQ / Chesterville, ON
4 1 Allison, Mrs. Hudson J C (Bessie Waldo Daniels) female 25.0000 1 2 113781 151.5500 C22 C26 S NaN NaN Montreal, PQ / Chesterville, ON


Экспериментальная поддержка Array API в LinearDiscriminantAnalysis

В LinearDiscriminantAnalysis добавлена экспериментальная поддержка спецификации Array API. Теперь оцениватель может работать с любыми библиотеками, совместимыми с Array API, например с CuPy — библиотекой массивов с ускорением на GPU. Подробнее см. в руководстве пользователя.

Повышение эффективности многих оценивателей

В версии 1.1 была значительно повышена эффективность многих оценивателей, использующих вычисление попарных расстояний (в основном оценивателей, связанных с кластеризацией, обучением многообразий и алгоритмами поиска ближайших соседей), при работе с плотными входными данными типа float64. Повышение эффективности выразилось, в частности, в сокращении потребления памяти и значительном улучшении масштабируемости на многоядерных машинах. В версии 1.2 эффективность этих оценивателей была дополнительно повышена для всех сочетаний плотных и разреженных входных данных в наборах данных float32 и float64, за исключением сочетаний «разреженные—плотные» и «плотные—разреженные» для метрик евклидова расстояния и квадрата евклидова расстояния. Подробный список затронутых оценивателей приведён в журнале изменений.

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_release_highlights_1_2_0.ipynb

Download Python source code: plot_release_highlights_1_2_0.py

Download zipped: plot_release_highlights_1_2_0.zip

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

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

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

Знакомство с API set_output

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

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

Spec-Zone.ru

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