Einführung
Dies ist ein Schritt-für-Schritt-Tutorial, um die Auswirkungen von monotonen Einschränkungen auf einen Gradientenboosting-Schätzer zu demonstrieren. Gradientenboosting ist eine beliebte maschinelle Lerntechnik, die für Regressions- und Klassifizierungstasks verwendet wird. In diesem Tutorial werden wir einen künstlichen Datensatz erstellen und einen Gradientenboosting-Schätzer verwenden, um die Auswirkungen von monotonen Einschränkungen auf die Vorhersagen des Modells zu demonstrieren.
VM-Tipps
Nachdem die VM gestartet ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.
Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen in Jupyter Notebook nicht automatisiert werden.
Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.
Bibliotheken importieren
Wir beginnen mit dem Import der erforderlichen Bibliotheken für dieses Tutorial.
from sklearn.ensemble import HistGradientBoostingRegressor
from sklearn.inspection import PartialDependenceDisplay
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
Daten generieren
Wir werden einen künstlichen Datensatz generieren, bei dem der Zielwert positiv mit der ersten Eigenschaft und negativ mit der zweiten Eigenschaft korreliert ist. Wir werden auch etwas zufälliges Rauschen hinzufügen, um die Daten realistischer zu machen.
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 = 5 * f_0 + np.sin(10 * np.pi * f_0) - 5 * f_1 - np.cos(10 * np.pi * f_1) + noise
Ein Modell ohne Einschränkungen anpassen
Wir werden ein Modell auf den generierten Daten ohne jegliche Einschränkungen anpassen, um zu sehen, wie das Modell ohne jegliche Beschränkungen performt.
gbdt_no_cst = HistGradientBoostingRegressor()
gbdt_no_cst.fit(X, y)
Ein Modell mit monotonen Einschränkungen anpassen
Wir werden nun ein weiteres Modell auf den gleichen Daten anpassen, jedoch mit monotonen Einschränkungen für die Merkmale. Wir werden eine monoton steigende Einschränkung für das erste Merkmal und eine monoton fallende Einschränkung für das zweite Merkmal auferlegen.
gbdt_with_monotonic_cst = HistGradientBoostingRegressor(monotonic_cst=[1, -1])
gbdt_with_monotonic_cst.fit(X, y)
Anzeige der partiellen Abhängigkeit
Wir werden nun die partielle Abhängigkeit der Vorhersagen von den beiden Merkmalen für beide Modelle anzeigen.
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()
Verwendung von Merkmalsnamen zur Angabe von monotonen Einschränkungen
Wenn die Trainingsdaten Merkmalsnamen haben, ist es möglich, die monotonen Einschränkungen durch Angabe eines Wörterbuchs anzugeben. Wir werden dies nun demonstrieren, indem wir die gleichen Daten verwenden und die Einschränkungen mit Hilfe von Merkmalsnamen angeben.
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)
)
Zusammenfassung
In diesem Tutorial haben wir die Auswirkungen von monotonen Einschränkungen auf einen Gradientenboosting-Schätzer demonstriert. Wir haben einen künstlichen Datensatz erzeugt, zwei Modelle angepasst, eines ohne jegliche Einschränkungen und das andere mit monotonen Einschränkungen, und die partielle Abhängigkeit der Vorhersagen von den beiden Merkmalen dargestellt. Wir haben auch gezeigt, wie man die monotonen Einschränkungen mit Hilfe von Merkmalsnamen angibt.