Wenn es um die Erklärbarkeit von Modellen geht, gehören Entscheidungsbäume zu den intuitivsten und erklärbarsten Modellen. Jedes Entscheidungsbaummodell kann als eine Reihe von für den Menschen interpretierbaren Regeln erklärt werden. Die Visualisierung von Entscheidungsbaummodellen ist wichtig für die Erklärbarkeit von Modellen und kann Stakeholdern und Unternehmensmanagern dabei helfen, Vertrauen in diese Modelle zu gewinnen.
Glücklicherweise können wir Entscheidungsbäume mit der dtreeviz-Bibliothek leicht visualisieren und interpretieren. In diesem Artikel werde ich zeigen, wie Sie dtreeviz verwenden können, um baumbasierte Modelle für Regression und Klassifizierung zu visualisieren.
Sie können dtreeviz einfach mit pip installieren, indem Sie den folgenden Befehl verwenden:
pip set up dtreeviz
Eine detaillierte Liste der Abhängigkeiten und zusätzlichen Bibliotheken, die je nach Betriebssystem möglicherweise installiert werden müssen, finden Sie unter dieses GitHub-Repository.
In diesem Abschnitt trainieren wir einen Entscheidungsbaum-Regressor für den Diabetes-Datensatz. Beachten Sie, dass Sie den gesamten Code für dieses Tutorial in diesem GitHub-Repository finden. Denken Sie daran, dass ich Jupyter als Umgebung zum Ausführen dieses Python-Codes verwende. Den gesamten Code, den ich für dieses Tutorial geschrieben habe, finden Sie unter dieses Github-Repository.
Bibliotheken importieren
Im Codeblock unten habe ich einfach ein paar gängige Bibliotheken importiert, darunter die Scikit-Study-DecisionTree-Module und dtreeviz.
import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
import dtreeviz
Daten lesen
Der Diabetes-Datensatz ist in scikit-learn verfügbar, sodass wir den folgenden Code verwenden können, um den Datensatz zu importieren und die Merkmale und Zielwerte in Numpy-Arrays mit den Namen X und Y zu speichern.
from sklearn.datasets import load_diabetesdiabetes_data = load_diabetes()
X = pd.DataFrame(knowledge = diabetes_data['data'], columns=diabetes_data['feature_names'])
y = diabetes_data['target']
Coaching des Entscheidungsbaummodells
Um die Visualisierung des Baums zu vereinfachen, können wir die maximale Tiefe des Entscheidungsbaums begrenzen und ihn wie folgt anhand der Daten trainieren.
dtree_reg = DecisionTreeRegressor(max_depth=3)
dtree_reg.match(X, y)
Den Baum visualisieren
Eines der Hauptmerkmale von dtreeviz ist die Möglichkeit, Entscheidungsbaummodelle zu visualisieren. Mit dem folgenden Code können wir eine coole Entscheidungsbaum-Visualisierung erstellen, die auch die Entscheidungsgrenzen an jedem Knoten visuell darstellt.
viz_model = dtreeviz.mannequin(dtree_reg,
X_train=X, y_train=y,
feature_names=checklist(X.columns),
target_name='diabetes')
viz_model.view()
Beachten Sie, dass die obige Visualisierung uns auch die Entscheidungsgrenzen und den Merkmalsraum an jedem Knoten sowie die Regressionsausgaben und die Stichprobengröße an jedem Blatt liefert.
Visualisierung der Blattverteilungen
Eine weitere nützliche Funktion, die dtreeviz bietet, ist die Möglichkeit, Blattverteilungen zu visualisieren. Die Blattknoten eines Entscheidungsbaums enthalten die tatsächlichen Werte, die ein Entscheidungsbaum abhängig von den einzelnen Bedingungen vorhersagt. Verwendung der rtree_leaf_distributions Mit der Funktion können wir diese Visualisierung für unseren Regressionsbaum erstellen.
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
%matplotlib inlineviz_model.rtree_leaf_distributions()
Basierend auf der obigen Visualisierung können wir sehen, dass der Entscheidungsbaum entweder 268,9, 208,6, 176,9, 137,7, 154,7, 274,0, 83,4 oder 108,8 für die Zielvariable namens Diabetes vorhersagen kann. Die horizontal gestreuten Punkte stellen die Werteverteilung für die Diabetes-Zielvariable dar und die kleine schwarze Linie stellt den Durchschnittswert dar, der für Vorhersagen an diesem Blattknoten verwendet wird. Idealerweise sollten die Blattverteilungen eine geringe Varianz aufweisen, damit wir mehr Vertrauen in die für Vorhersagen verwendeten Durchschnittswerte haben können.
Visualisierung der Blattgrößen
Wir können auch die Blattgrößen oder die Anzahl der Proben an jedem Blattknoten visualisieren, wie mit der folgenden Funktion gezeigt.
viz_model.leaf_sizes()
Basierend auf dem Diagramm oben können wir die Anzahl der Proben an jedem Blatt sehen. Diese Visualisierung ist ein gutes Werkzeug, um zu bewerten, wie sicher wir uns bei den Vorhersagen des Regressionsbaums sein können.
Wir können mit dtreeviz auch Klassifizierungsbäume visualisieren und die Visualisierungen sehen etwas anders aus als die für Regressionsbäume erstellten. In diesem Abschnitt trainieren und visualisieren wir ein Entscheidungsmodell mithilfe des Brustkrebs-Wisconsin-Datensatzes.
Daten lesen
Der Datensatz „Breast Most cancers Wisconsin“ ist in scikit-learn verfügbar, sodass wir ihn einfach mit dem folgenden Code laden können.
from sklearn.datasets import load_breast_cancercancer_data = load_breast_cancer()
X = pd.DataFrame(knowledge = cancer_data['data'], columns=cancer_data['feature_names'])
y = cancer_data['target']
Trainieren eines Entscheidungsbaummodells
Wie üblich ist das Coaching eines Entscheidungsbaummodells mit scikit-learn unkompliziert. Wir können auch die maximale Baumtiefe einschränken, um die Visualisierung des Entscheidungsbaums zu erleichtern.
dtree_clf = DecisionTreeClassifier(max_depth=4)
dtree_clf.match(X, y)
Visualisierung des Entscheidungsbaums
Wir können genau dieselbe Funktion aus dem Abschnitt „Regressionsbaum“ verwenden, um den Klassifizierungsbaum zu visualisieren. Allerdings wird die Visualisierung etwas anders aussehen.
viz_model = dtreeviz.mannequin(dtree_clf,
X_train=X, y_train=y,
feature_names=checklist(X.columns),
target_name='most cancers')
viz_model.view()
Beachten Sie, dass sich die Visualisierung des Klassifizierungsbaums oben von der Visualisierung des Regressionsbaums im vorherigen Abschnitt unterscheidet. Anstatt an jedem Knoten ein Streudiagramm mit dem ausgewählten Function und dem Ziel zu sehen, sehen wir farbige Histogramme, die die Klassenverteilung an jedem Knoten zeigen.
Visualisierung der Blattverteilungen
Wir können auch die Klassenverteilungen für die Blätter visualisieren, indem wir dieselbe Funktion verwenden, um die Blattverteilungen für den Regressionsbaum zu visualisieren.
viz_model.ctree_leaf_distributions()
Jedem Blatt ist ein gestapeltes Balkendiagramm zugeordnet, das die Verteilung der Klassenbezeichnungen für die Stichproben auf diesem Blatt darstellt. Die meisten Blätter enthalten Proben, die überwiegend zu einer Klasse gehören. Dies ist ein gutes Zeichen und hilft uns, Vertrauen in die Vorhersagen des Modells zu gewinnen.
Visualisierung des Funktionsraums
Mit der folgenden Funktion können wir den Merkmalsraum des Klassifikators auch visualisieren.
viz_model.ctree_feature_space()
Das obige Merkmalsraumdiagramm gibt uns die Trainingsgenauigkeit des Klassifizierungsbaums sowie ein Streudiagramm zweier Merkmale und eine lineare Entscheidungsgrenze, die zur Trennung der beiden Klassen verwendet werden kann.
Wenn es um die Visualisierung baumbasierter Modelle geht, ist dtreeviz eine leistungsstarke Bibliothek, die mehrere nützliche Visualisierungsfunktionen bietet. Ich habe nur einige der in dieser Bibliothek bereitgestellten Funktionen behandelt und es gibt viele zusätzliche Funktionen, über die Sie in der lesen können dtreeviz GitHub-Repository. Den gesamten Code für diesen Artikel finden Sie wie gewohnt auf mein GitHub.
Treten Sie meinem bei Mailingliste um Updates zu meinen Knowledge-Science-Inhalten zu erhalten. Du bekommst auch mein kostenloses Schritt-für-Schritt-Anleitung zur Lösung von Problemen beim maschinellen Lernen wenn du Anmeldung! Du kannst mir auch weiter folgen Twitter für Inhaltsaktualisierungen.
Und wenn Sie schon dabei sind, denken Sie darüber nach Beitritt zur Medium-Community auch Artikel von Tausenden anderen Autoren zu lesen.
- Terence Parr, dtreeviz: Entscheidungsbaumvisualisierung(2023), GitHub.