Hinweis
Gehen Sie zum Ende, um den vollständigen Beispielcode herunterzuladen oder dieses Beispiel über JupyterLite oder Binder in Ihrem Browser auszuführen.
Erweiterte Plotting mit partieller Abhängigkeit#
Das Objekt PartialDependenceDisplay kann zum Plotten verwendet werden, ohne die partielle Abhängigkeit neu berechnen zu müssen. In diesem Beispiel zeigen wir, wie partielle Abhängigkeitsdiagramme geplottet und das Diagramm schnell mit der Visualisierungs-API angepasst werden kann.
Hinweis
Siehe auch ROC-Kurve mit Visualisierungs-API
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_diabetes
from sklearn.inspection import PartialDependenceDisplay
from sklearn.neural_network import MLPRegressor
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeRegressor
Trainieren von Modellen auf dem Diabetes-Datensatz#
Zuerst trainieren wir einen Entscheidungsbaum und ein mehrschichtiges Perzeptron auf dem Diabetes-Datensatz.
diabetes = load_diabetes()
X = pd.DataFrame(diabetes.data, columns=diabetes.feature_names)
y = diabetes.target
tree = DecisionTreeRegressor()
mlp = make_pipeline(
StandardScaler(),
MLPRegressor(hidden_layer_sizes=(100, 100), tol=1e-2, max_iter=500, random_state=0),
)
tree.fit(X, y)
mlp.fit(X, y)
Partielle Abhängigkeiten für zwei Merkmale plotten#
Wir plotten partielle Abhängigkeitskurven für die Merkmale „alter“ und „bmi“ (Body-Mass-Index) für den Entscheidungsbaum. Bei zwei Merkmalen erwartet from_estimator, zwei Kurven zu plotten. Hier platziert die Plotfunktion ein Gitter aus zwei Diagrammen unter Verwendung des von ax definierten Bereichs.
fig, ax = plt.subplots(figsize=(12, 6))
ax.set_title("Decision Tree")
tree_disp = PartialDependenceDisplay.from_estimator(tree, X, ["age", "bmi"], ax=ax)

Die partiellen Abhängigkeitskurven können für das mehrschichtige Perzeptron geplottet werden. In diesem Fall wird line_kw an from_estimator übergeben, um die Farbe der Kurve zu ändern.
fig, ax = plt.subplots(figsize=(12, 6))
ax.set_title("Multi-layer Perceptron")
mlp_disp = PartialDependenceDisplay.from_estimator(
mlp, X, ["age", "bmi"], ax=ax, line_kw={"color": "red"}
)

Partielle Abhängigkeiten der beiden Modelle zusammen plotten#
Die tree_disp und mlp_disp PartialDependenceDisplay Objekte enthalten alle berechneten Informationen, die zum Neuerstellen der partiellen Abhängigkeitskurven erforderlich sind. Das bedeutet, dass wir problemlos zusätzliche Diagramme erstellen können, ohne die Kurven neu berechnen zu müssen.
Eine Möglichkeit, die Kurven zu plotten, ist, sie in dieselbe Abbildung zu platzieren, wobei die Kurven jedes Modells in jeder Zeile liegen. Zuerst erstellen wir eine Abbildung mit zwei Achsen in zwei Zeilen und einer Spalte. Die beiden Achsen werden an die plot-Funktionen von tree_disp und mlp_disp übergeben. Die angegebenen Achsen werden von der Plotfunktion verwendet, um die partielle Abhängigkeit zu zeichnen. Das resultierende Diagramm platziert die partiellen Abhängigkeitskurven des Entscheidungsbaums in der ersten Zeile und die des mehrschichtigen Perzeptrons in der zweiten Zeile.
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 10))
tree_disp.plot(ax=ax1)
ax1.set_title("Decision Tree")
mlp_disp.plot(ax=ax2, line_kw={"color": "red"})
ax2.set_title("Multi-layer Perceptron")

Text(0.5, 1.0, 'Multi-layer Perceptron')
Eine weitere Möglichkeit, die Kurven zu vergleichen, besteht darin, sie übereinander zu plotten. Hier erstellen wir eine Abbildung mit einer Zeile und zwei Spalten. Die Achsen werden als Liste an die plot-Funktion übergeben, was die partiellen Abhängigkeitskurven jedes Modells auf denselben Achsen plottet. Die Länge der Achsenliste muss gleich der Anzahl der geplotteten Diagramme sein.
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 6))
tree_disp.plot(ax=[ax1, ax2], line_kw={"label": "Decision Tree"})
mlp_disp.plot(
ax=[ax1, ax2], line_kw={"label": "Multi-layer Perceptron", "color": "red"}
)
ax1.legend()
ax2.legend()

<matplotlib.legend.Legend object at 0x7fb4a21a56d0>
tree_disp.axes_ ist ein Numpy-Array, das die Achsen enthält, die zum Zeichnen der partiellen Abhängigkeitsdiagramme verwendet werden. Dies kann an mlp_disp übergeben werden, um denselben Effekt zu erzielen, nämlich das Plotten der Diagramme übereinander. Darüber hinaus speichert mlp_disp.figure_ die Abbildung, was eine Größenänderung der Abbildung nach dem Aufruf vonplot ermöglicht. In diesem Fall hat tree_disp.axes_ zwei Dimensionen, daher wird plot nur das y-Label und die y-Ticks auf dem am weitesten links liegenden Diagramm anzeigen.
tree_disp.plot(line_kw={"label": "Decision Tree"})
mlp_disp.plot(
line_kw={"label": "Multi-layer Perceptron", "color": "red"}, ax=tree_disp.axes_
)
tree_disp.figure_.set_size_inches(10, 6)
tree_disp.axes_[0, 0].legend()
tree_disp.axes_[0, 1].legend()
plt.show()

Partielle Abhängigkeiten für ein Merkmal plotten#
Hier plotten wir die partiellen Abhängigkeitskurven für ein einzelnes Merkmal, „alter“, auf denselben Achsen. In diesem Fall wird tree_disp.axes_ in die zweite Plotfunktion übergeben.
tree_disp = PartialDependenceDisplay.from_estimator(tree, X, ["age"])
mlp_disp = PartialDependenceDisplay.from_estimator(
mlp, X, ["age"], ax=tree_disp.axes_, line_kw={"color": "red"}
)

Gesamtlaufzeit des Skripts: (0 Minuten 2,296 Sekunden)
Verwandte Beispiele
Partial Dependence und Individual Conditional Expectation Plots
Verwendung von KBinsDiscretizer zur Diskretisierung kontinuierlicher Merkmale