Spec-Zone.ru › scikit-learn

Примечание

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

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

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

Мы создаём искусственный набор данных, в котором целевое значение в целом положительно коррелирует с первым признаком (с некоторыми случайными и неслучайными отклонениями) и в целом отрицательно коррелирует со вторым признаком.

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

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

# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause
import matplotlib.pyplot as plt
import numpy as np

from sklearn.ensemble import HistGradientBoostingRegressor
from sklearn.inspection import PartialDependenceDisplay

rng = np.random.RandomState(0)

n_samples = 1000
f_0 = rng.rand(n_samples)
f_1 = rng.rand(n_samples)
X = np.c_[f_0, f_1]
noise = rng.normal(loc=0.0, scale=0.01, size=n_samples)

# y is positively correlated with f_0, and negatively correlated with f_1
y = 5 * f_0 + np.sin(10 * np.pi * f_0) - 5 * f_1 - np.cos(10 * np.pi * f_1) + noise

Обучим первую модель на этом наборе данных без каких-либо ограничений.

gbdt_no_cst = HistGradientBoostingRegressor()
gbdt_no_cst.fit(X, y)
HistGradientBoostingRegressor()
В среде Jupyter выполните эту ячейку повторно, чтобы отобразить HTML-представление, или доверьте этой записной книжке.
На GitHub не удаётся отобразить HTML-представление; попробуйте открыть эту страницу с помощью nbviewer.org.
Параметры
loss loss: {'squared_error', 'absolute_error', 'gamma', 'poisson', 'quantile'}, default='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: float, default=None

Если loss равно "quantile", этот параметр задаёт оцениваемую квантиль
и должен быть в диапазоне от 0 до 1.
None
learning_rate learning_rate: float, default=0.1

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

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

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

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

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

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

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

.. versionadded:: 1.4
1.0
max_bins max_bins: int, default=255

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

Указывает категориальные признаки.

- None : ни один признак не считается категориальным.
- массивоподобный объект булевых значений : булева маска, указывающая категориальные признаки.
- массивоподобный объект целых чисел : целочисленные индексы категориальных
признаков.
- массивоподобный объект строк: названия категориальных признаков (при условии, что обучающие
данные содержат названия признаков).
- `"from_dtype"`: столбцы DataFrame с dtype "Categorical" и "Enum"
считаются категориальными признаками. Входные данные должны быть DataFrame,
поддерживаемым narwhals (или совместимым с ним): должна работать функция :func:`narwhals.from_native`.
Например, это относится к DataFrame в 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: array-like of int of shape (n_features) or dict, default=None

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

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

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

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

.. versionadded:: 0.23

.. versionchanged:: 1.2
Добавлена поддержка словаря ограничений с названиями признаков в качестве ключей.
None
interaction_cst interaction_cst: {"pairwise", "no_interactions"} or sequence of lists/tuples/sets of int, default=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
None
warm_start warm_start: bool, default=False

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

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

.. versionadded:: 0.23
'auto'
scoring scoring: str or callable or None, default='loss'

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

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

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

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

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

Уровень подробности вывода. Если значение не равно нулю, выводится некоторая информация о
процессе обучения. При значении ``1`` выводится только сводная информация, при ``2`` — информация о каждой
итерации.
0
random_state random_state: int, RandomState instance or None, default=None

Генератор псевдослучайных чисел для управления подвыборкой в процессе
разбиения на интервалы и разделением данных на обучающую и проверочную выборки, если включена ранняя остановка.
Передайте целое число, чтобы получать воспроизводимые результаты при нескольких вызовах функции.
См. :term:`глоссарий <random_state>`.
None
Обученные атрибуты
Имя Тип Значение
do_early_stopping_ do_early_stopping_: bool

Указывает, используется ли ранняя остановка во время обучения.
bool False
is_categorical_ is_categorical_: ndarray, shape (n_features, ) or None

Булева маска категориальных признаков. ``None``, если категориальных признаков
нет.
NoneType None
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 2
n_iter_ n_iter_: int

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

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

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

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


Обучим вторую модель на этом наборе данных с ограничением монотонного возрастания (1) и ограничением монотонного убывания (-1) соответственно.

gbdt_with_monotonic_cst = HistGradientBoostingRegressor(monotonic_cst=[1, -1])
gbdt_with_monotonic_cst.fit(X, y)
HistGradientBoostingRegressor(monotonic_cst=[1, -1])
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить HTML-представление, или доверьте этой записной книжке.
На GitHub HTML-представление не отображается; попробуйте открыть эту страницу на nbviewer.org.
Параметры
monotonic_cst monotonic_cst: массивоподобный объект из целых чисел формы (n_features) или словарь, по умолчанию=None

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

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

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

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

.. versionadded:: 0.23

.. versionchanged:: 1.2
Добавлена поддержка словаря ограничений, где ключами являются имена признаков.
[1, -1]
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` разбивается на
бины с целочисленными значениями, что значительно ускоряет этап обучения.
Для признаков с небольшим числом уникальных значений может использоваться меньше
бин, чем ``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'
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
None
warm_start warm_start: bool, по умолчанию=False

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

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

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

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

- str: варианты см. в разделе :ref:`scoring_string_names`.
- callable: вызываемый объект оценки (например, функция) с сигнатурой
``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
random_state random_state: целое число, экземпляр RandomState или None, по умолчанию=None

Генератор псевдослучайных чисел, управляющий подвыборкой на этапе
разбиения на бины и разделением данных на обучающую и проверочную выборки, если включена ранняя остановка.
Передайте целое число, чтобы обеспечить воспроизводимость результатов при нескольких вызовах функции.
См. :term:`глоссарий <random_state>`.
None
Обученные атрибуты
Имя Тип Значение
do_early_stopping_ do_early_stopping_: bool

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

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

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

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


Построим график частичной зависимости предсказаний от двух признаков.

fig, ax = plt.subplots()
disp = PartialDependenceDisplay.from_estimator(
    gbdt_no_cst,
    X,
    features=[0, 1],
    feature_names=(
        "First feature",
        "Second feature",
    ),
    line_kw={"linewidth": 4, "label": "unconstrained", "color": "tab:blue"},
    ax=ax,
)
PartialDependenceDisplay.from_estimator(
    gbdt_with_monotonic_cst,
    X,
    features=[0, 1],
    line_kw={"linewidth": 4, "label": "constrained", "color": "tab:orange"},
    ax=disp.axes_,
)

for f_idx in (0, 1):
    disp.axes_[0, f_idx].plot(
        X[:, f_idx], y, "o", alpha=0.3, zorder=-1, color="tab:green"
    )
    disp.axes_[0, f_idx].set_ylim(-6, 6)

plt.legend()
fig.suptitle("Monotonic constraints effect on partial dependences")
plt.show()
Monotonic constraints effect on partial dependences

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

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

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

import pandas as pd

X_df = pd.DataFrame(X, columns=["f_0", "f_1"])

gbdt_with_monotonic_cst_df = HistGradientBoostingRegressor(
    monotonic_cst={"f_0": 1, "f_1": -1}
).fit(X_df, y)

np.allclose(
    gbdt_with_monotonic_cst_df.predict(X_df), gbdt_with_monotonic_cst.predict(X)
)
True

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_monotonic_constraints.ipynb

Download Python source code: plot_monotonic_constraints.py

Download zipped: plot_monotonic_constraints.zip

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

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

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

Возможности деревьев гистограммного градиентного бустинга

Расширенное построение графиков частичной зависимости

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

Spec-Zone.ru

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