Примечание
Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере с помощью 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.
Параметры
Обученные атрибуты
Обучим вторую модель на этом наборе данных с ограничением монотонного возрастания (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.
Параметры
Обученные атрибуты
Построим график частичной зависимости предсказаний от двух признаков.
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()

Видно, что предсказания модели без ограничений отражают колебания данных, тогда как модель с ограничениями следует общей тенденции и игнорирует локальные вариации.
Использование имён признаков для задания монотонных ограничений
Обратите внимание: если обучающие данные содержат имена признаков, монотонные ограничения можно задать, передав словарь:
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 секунды)
Связанные примеры
© 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