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.
HistGradientBoostingRegressor()


Обучите вторую модель на этих данных с монотонным возрастанием (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.
HistGradientBoostingRegressor(monotonic_cst=[1, -1])


Давайте отобразим частичную зависимость предсказаний от двух признаков.

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.538 секунд)

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–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/ensemble/plot_monotonic_constraints.html

Spec-Zone.ru

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