Direkt zum Inhalt
HeimAnleitungenPython

Entscheidungsbaum-Klassifizierung in Python Tutorial

In diesem Tutorium lernst du die Entscheidungsbaum-Klassifizierung, die Auswahl von Attributen und wie du einen Entscheidungsbaum-Klassifikator mit dem Python-Paket Scikit-learn erstellst und optimierst.
Aktualisierte 11. Sept. 2024  · 12 Min. lesen

Als Marketingmanager willst du eine Gruppe von Kunden finden, die mit hoher Wahrscheinlichkeit dein Produkt kaufen werden. So kannst du dein Marketingbudget sparen, indem du deine Zielgruppe findest. Als Kreditmanager/in musst du risikoreiche Kreditanträge identifizieren, um eine niedrigere Kreditausfallquote zu erreichen. Dieser Prozess der Einteilung von Kunden in eine Gruppe potenzieller und nicht potenzieller Kunden bzw. sicherer oder riskanter Kreditanträge wird als Klassifizierungsproblem bezeichnet.

Die Klassifizierung ist ein zweistufiger Prozess: ein Lernschritt und ein Vorhersageschritt. Im Lernschritt wird das Modell auf der Grundlage gegebener Trainingsdaten entwickelt. Bei der Vorhersage wird das Modell verwendet, um die Reaktion auf die gegebenen Daten vorherzusagen. Ein Entscheidungsbaum ist einer der einfachsten und beliebtesten Klassifizierungsalgorithmen, um Daten zu verstehen und zu interpretieren. Sie kann sowohl für Klassifizierungs- als auch für Regressionsprobleme verwendet werden.

Um den Beispielcode in diesem Lernprogramm ganz einfach selbst auszuführen, kannst du eine kostenlose DataLab-Arbeitsmappe erstellen, auf der Python vorinstalliert ist und die alle Codebeispiele enthält. Ein Erklärvideo zur Entscheidungsbaum-Klassifizierung findest du in diesem DataCamp-Kursvideo.

Werde ein ML-Wissenschaftler

Beherrsche Python, um ein Wissenschaftler für maschinelles Lernen zu werden

Der Entscheidungsbaum-Algorithmus

Ein Entscheidungsbaum ist eine Flussdiagramm-ähnliche Baumstruktur, bei der ein interner Knoten ein Merkmal (oder Attribut) darstellt, der Zweig eine Entscheidungsregel und jeder Blattknoten das Ergebnis.

Der oberste Knoten in einem Entscheidungsbaum wird als Wurzelknoten bezeichnet. Es lernt, auf der Grundlage des Attributwerts zu partitionieren. Es unterteilt den Baum in einer rekursiven Weise, der sogenannten rekursiven Partitionierung. Diese fließdiagrammartige Struktur hilft dir bei der Entscheidungsfindung. Es ist eine Visualisierung wie ein Flussdiagramm, die das menschliche Denken leicht nachahmt. Deshalb sind Entscheidungsbäume leicht zu verstehen und zu interpretieren.

Beispiel für einen Entscheidungsbaum zur Herzinfarktprävention

Bild | Abid Ali Awan 

Ein Entscheidungsbaum ist ein ML-Algorithmus vom Typ White Box. Es teilt die interne Entscheidungslogik, die bei Blackbox-Algorithmen wie einem neuronalen Netz nicht vorhanden ist. Seine Trainingszeit ist im Vergleich zum Algorithmus des neuronalen Netzes schneller.

Die Zeitkomplexität von Entscheidungsbäumen ist eine Funktion der Anzahl von Datensätzen und Attributen in den gegebenen Daten. Der Entscheidungsbaum ist eine verteilungsfreie oder nicht-parametrische Methode, die nicht von den Annahmen der Wahrscheinlichkeitsverteilung abhängt. Entscheidungsbäume können hochdimensionale Daten mit guter Genauigkeit verarbeiten.

Wie funktioniert der Entscheidungsbaum-Algorithmus?

Die Grundidee hinter jedem Entscheidungsbaum-Algorithmus ist die folgende:

  1. Wähle das beste Attribut mit Hilfe von Attribute Selection Measures (ASM) aus, um die Datensätze aufzuteilen.
  2. Mach dieses Attribut zu einem Entscheidungsknoten und unterteile den Datensatz in kleinere Teilmengen.
  3. Beginne mit dem Aufbau des Baums, indem du diesen Vorgang rekursiv für jedes Kind wiederholst, bis eine der Bedingungen erfüllt ist:
    • Alle Tupel gehören zu demselben Attributwert.
    • Es gibt keine verbleibenden Attribute mehr.
    • Es gibt keine weiteren Instanzen.
Wie funktioniert der Entscheidungsbaum-Algorithmus?

Attribut Auswahlmaßnahmen

Das Attributauswahlmaß ist eine Heuristik zur Auswahl des Aufteilungskriteriums, das die Daten bestmöglich aufteilt. Sie wird auch als Aufteilungsregeln bezeichnet, weil sie uns hilft, Haltepunkte für Tupel auf einem bestimmten Knoten zu bestimmen. ASM gibt jedem Merkmal (oder Attribut) einen Rang, indem es den gegebenen Datensatz erklärt. Das Attribut mit der besten Punktzahl wird als Splitting-Attribut ausgewählt(Quelle). Wenn es sich um ein Attribut mit kontinuierlichem Wert handelt, müssen auch Splitpunkte für Zweige definiert werden. Die beliebtesten Selektionsmaße sind Informationsgewinn, Gain Ratio und Gini-Index.

Informationsgewinn

Claude Shannon erfand das Konzept der Entropie, das die Unreinheit der Eingangsmenge misst. In der Physik und Mathematik wird die Entropie als Zufälligkeit oder Unreinheit in einem System bezeichnet. In der Informationstheorie bezieht er sich auf die Unreinheit in einer Gruppe von Beispielen. Der Informationsgewinn ist die Abnahme der Entropie. Der Informationsgewinn berechnet die Differenz zwischen der Entropie vor der Aufteilung und der durchschnittlichen Entropie nach der Aufteilung des Datensatzes auf der Grundlage der gegebenen Attributwerte. Der ID3 (Iterative Dichotomiser) Entscheidungsbaum-Algorithmus nutzt den Informationsgewinn.

Informationsgewinn

Dabei ist Pi die Wahrscheinlichkeit, dass ein beliebiges Tupel in D zur Klasse Ci gehört.

Informationsgewinn
Informationsgewinn

Wo:

  • Info(D) ist die durchschnittliche Menge an Informationen, die benötigt wird, um die Klassenbezeichnung eines Tupels in D zu bestimmen.
  • |Dj|/|D| fungiert als das Gewicht der j-ten Partition.
  • InfoA(D) ist die erwartete Information, die benötigt wird, um ein Tupel aus D auf der Grundlage der Partitionierung durch A zu klassifizieren.

Das Attribut A mit dem höchsten Informationsgewinn, Gain(A), wird als Splitting-Attribut am Knoten N() gewählt.

Verstärkungsverhältnis

Der Informationsgewinn ist für das Attribut mit vielen Ergebnissen verzerrt. Das bedeutet, dass er das Attribut mit einer großen Anzahl unterschiedlicher Werte bevorzugt. Nehmen wir zum Beispiel ein Attribut mit einem eindeutigen Bezeichner, wie customer_ID, das aufgrund einer reinen Partitionierung null info(D) hat. Das maximiert den Informationsgewinn und schafft eine nutzlose Aufteilung.

C4.5, eine Verbesserung von ID3, verwendet eine Erweiterung des Informationsgewinns, die als Gain Ratio bekannt ist. Gain Ratio behandelt das Problem der Verzerrung, indem es den Informationsgewinn mit Split Info normalisiert. Die Java-Implementierung des C4.5-Algorithmus ist unter dem Namen J48 bekannt, der im Data-Mining-Tool WEKA verfügbar ist.

Verstärkungsverhältnis

Wo:

  • |Dj|/|D| fungiert als das Gewicht der j-ten Partition.
  • v ist die Anzahl der diskreten Werte im Attribut A.

Das Verstärkungsverhältnis kann wie folgt definiert werden

Verstärkungsverhältnis

Das Attribut mit dem höchsten Verstärkungsverhältnis wird als Splitting-Attribut gewählt(Quelle).

Gini-Index

Ein anderer Entscheidungsbaum-Algorithmus, CART (Classification and Regression Tree), verwendet die Gini-Methode, um Splitpunkte zu erstellen.

Gini index

Dabei ist pi die Wahrscheinlichkeit, dass ein Tupel in D zur Klasse Ci gehört.

Der Gini-Index berücksichtigt eine binäre Aufteilung für jedes Attribut. Du kannst eine gewichtete Summe der Verunreinigungen der einzelnen Partitionen berechnen. Wenn eine binäre Aufteilung des Attributs A die Daten D in D1 und D2 unterteilt, ist der Gini-Index von D:

Gini index

Im Falle eines diskret bewerteten Attributs wird die Teilmenge, die den geringsten Gini-Index für das gewählte Attribut ergibt, als Splitting-Attribut ausgewählt. Bei Attributen mit kontinuierlichen Werten besteht die Strategie darin, jedes Paar benachbarter Werte als möglichen Aufteilungspunkt auszuwählen, und der Punkt mit dem kleineren Gini-Index wird als Aufteilungspunkt gewählt.

Gini-Index

Das Attribut mit dem geringsten Gini-Index wird als Splitting-Attribut gewählt.

Führe den Code aus diesem Tutorial online aus und bearbeite ihn

Code ausführen

Entscheidungsbaum-Klassifikator in Scikit-learn erstellen

Erforderliche Bibliotheken importieren

Laden wir zunächst die benötigten Bibliotheken.

# Load libraries
import pandas as pd
from sklearn.tree import DecisionTreeClassifier # Import Decision Tree Classifier
from sklearn.model_selection import train_test_split # Import train_test_split function
from sklearn import metrics #Import scikit-learn metrics module for accuracy calculation

Daten laden

Laden wir zunächst den benötigten Pima Indian Diabetes-Datensatz mit der read CSV-Funktion von Pandas. Du kannst den Kaggle-Datensatz herunterladen, um mitzumachen.

col_names = ['pregnant', 'glucose', 'bp', 'skin', 'insulin', 'bmi', 'pedigree', 'age', 'label']
# load dataset
pima = pd.read_csv("diabetes.csv", header=None, names=col_names)
pima.head()
  schwanger glucose bp Haut insulin bmi Stammbaum Alter Etikett
0 6 148 72 35 0 33.6 0.627 50 1
1 1 85 66 29 0 26.6 0.351 31 0
2 8 183 64 0 0 23.3 0.672 32 1
3 1 89 66 23 94 28.1 0.167 21 0
4 0 137 40 35 168 43.1 2.288 33 1

Auswahl der Merkmale

Hier musst du die gegebenen Spalten in zwei Arten von Variablen unterteilen: abhängige (oder Zielvariable) und unabhängige Variablen (oder Merkmalsvariablen).

#split dataset in features and target variable
feature_cols = ['pregnant', 'insulin', 'bmi', 'age','glucose','bp','pedigree']
X = pima[feature_cols] # Features
y = pima.label # Target variable

Daten aufteilen

Um die Leistung des Modells zu verstehen, ist es eine gute Strategie, den Datensatz in einen Trainings- und einen Testsatz zu unterteilen.

Teilen wir den Datensatz mit der Funktion train_test_split() auf. Du musst drei Parameter übergeben: Merkmale, Ziel und test_set Größe.

# Split dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1) # 70% training and 30% test

Aufbau eines Entscheidungsbaummodells

Lass uns ein Entscheidungsbaummodell mit Scikit-learn erstellen.

# Create Decision Tree classifer object
clf = DecisionTreeClassifier()

# Train Decision Tree Classifer
clf = clf.fit(X_train,y_train)

#Predict the response for test dataset
y_pred = clf.predict(X_test)

Bewertung des Modells

Schätzen wir ab, wie genau der Klassifikator oder das Modell die Art der Kulturpflanzen vorhersagen kann.

Die Genauigkeit kann berechnet werden, indem die tatsächlichen Werte der Testreihe mit den vorhergesagten Werten verglichen werden.

# Model Accuracy, how often is the classifier correct?
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
Accuracy: 0.6753246753246753

Wir erhielten eine Klassifizierungsrate von 67,53%, was als gute Genauigkeit gilt. Du kannst diese Genauigkeit verbessern, indem du die Parameter des Entscheidungsbaum-Algorithmus abstimmst.

Entscheidungsbäume visualisieren

Du kannst die Funktion export_graphviz von Scikit-learn verwenden, um den Baum in einem Jupyter-Notebook anzuzeigen. Um den Baum zu zeichnen, musst du auch graphviz und pydotplus installieren.

pip install graphviz

pip install pydotplus

Die Funktion export_graphviz wandelt den Entscheidungsbaum-Klassifikator in eine Dot-Datei um und pydotplus konvertiert diese Dot-Datei in eine png- oder anzeigbare Form auf Jupyter.

from sklearn.tree import export_graphviz
from sklearn.externals.six import StringIO  
from IPython.display import Image  
import pydotplus

dot_data = StringIO()
export_graphviz(clf, out_file=dot_data,  
                filled=True, rounded=True,
                special_characters=True,feature_names = feature_cols,class_names=['0','1'])
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())  
graph.write_png('diabetes.png')
Image(graph.create_png())
Entscheidungsbäume visualisieren

Im Entscheidungsbaumdiagramm hat jeder interne Knoten eine Entscheidungsregel, die die Daten aufteilt. Gini, auch als Gini-Ratio bezeichnet, misst die Unreinheit des Knotens. Man kann sagen, dass ein Knoten rein ist, wenn alle seine Datensätze zur selben Klasse gehören, solche Knoten nennt man Blattknoten.

Hier ist der resultierende Baum nicht beschnitten. Dieser ungeschnittene Baum ist unerklärlich und nicht leicht zu verstehen. Im nächsten Abschnitt werden wir sie durch Beschneiden optimieren.

Optimierung der Leistung von Entscheidungsbäumen

  • Kriterium : optional (Standardwert="gini") oder Attributauswahlmaß wählen. Dieser Parameter ermöglicht es uns, die Auswahl der verschiedenen Attribute zu treffen. Unterstützte Kriterien sind "gini" für den Gini-Index und "Entropie" für den Informationsgewinn.

  • splitter : string, optional (Standard="best") oder Split-Strategie. Mit diesem Parameter können wir die Aufteilungsstrategie wählen. Unterstützte Strategien sind "best", um den besten Split zu wählen, und "random", um den besten zufälligen Split zu wählen.

  • max_depth : int oder None, optional (default=None) oder Maximale Tiefe eines Baums. Die maximale Tiefe des Baums. Wenn Keine, dann werden die Knoten so lange erweitert, bis alle Blätter weniger als min_samples_split samples enthalten. Ein höherer Wert der maximalen Tiefe führt zu einer Überanpassung, ein niedrigerer Wert zu einer Unteranpassung(Quelle).

In Scikit-learn wird die Optimierung des Entscheidungsbaum-Klassifikators nur durch Pre-Pruning durchgeführt. Die maximale Tiefe des Baumes kann als Kontrollvariable für die Vorbeschneidung verwendet werden. Im folgenden Beispiel kannst du einen Entscheidungsbaum für dieselben Daten mit max_depth=3 zeichnen. Neben den Prepruning-Parametern kannst du auch andere Maßstäbe für die Attributauswahl ausprobieren, z. B. die Entropie.

# Create Decision Tree classifer object
clf = DecisionTreeClassifier(criterion="entropy", max_depth=3)

# Train Decision Tree Classifer
clf = clf.fit(X_train,y_train)

#Predict the response for test dataset
y_pred = clf.predict(X_test)

# Model Accuracy, how often is the classifier correct?
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
Accuracy: 0.7705627705627706

Nun, die Klassifizierungsrate stieg auf 77,05%, was eine bessere Genauigkeit als das vorherige Modell ist.

Entscheidungsbäume visualisieren

Machen wir unseren Entscheidungsbaum mit dem folgenden Code ein bisschen verständlicher: 

from six import StringIO from IPython.display import Image from sklearn.tree import export_graphviz import pydotplus dot_data = StringIO() export_graphviz(clf, out_file=dot_data, filled=True, rounded=True, special_characters=True, feature_names = feature_cols,class_names=['0','1']) graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) graph.write_png('diabetes.png') Image(graph.create_png())

Hier haben wir die folgenden Schritte durchgeführt: 

  • Importiere die benötigten Bibliotheken.
  • Erstelle ein StringIO Objekt namens dot_data, um die Textdarstellung des Entscheidungsbaums zu speichern.
  • Exportiere den Entscheidungsbaum mit der Funktion export_graphviz in das Format dot und schreibe die Ausgabe in den Puffer dot_data.
  • Erstellt ein pydotplus Graph-Objekt aus der dot Format-Darstellung des Entscheidungsbaums, der im dot_data Puffer gespeichert ist.
  • Schreibe das erstellte Diagramm in eine PNG-Datei namens "diabetes.png".
  • Zeigt das generierte PNG-Bild des Entscheidungsbaums mithilfe des Image Objekts aus dem IPython.display Modul an.
Entscheidungsbäume visualisieren

Wie du siehst, ist dieses beschnittene Modell weniger komplex, besser erklärbar und leichter zu verstehen als das vorherige Entscheidungsbaummodell.

Entscheidungsbaum-Profis

  • Entscheidungsbäume sind leicht zu interpretieren und zu visualisieren.
  • Er kann nicht-lineare Muster leicht erfassen.
  • Es erfordert weniger Datenvorverarbeitung durch den Nutzer, zum Beispiel müssen die Spalten nicht normalisiert werden.
  • Sie kann für das Feature-Engineering verwendet werden, z. B. für die Vorhersage fehlender Werte, und eignet sich für die Variablenauswahl.
  • Der Entscheidungsbaum hat keine Annahmen über die Verteilung, da der Algorithmus nicht parametrisch ist. (Quelle)

Entscheidungsbaum Nachteile

  • Empfindlich gegenüber verrauschten Daten. Sie kann verrauschte Daten überarbeiten.
  • Die geringe Abweichung (oder Varianz) in den Daten kann zu einem anderen Entscheidungsbaum führen. Dies kann durch Bagging- und Boosting-Algorithmen reduziert werden.
  • Entscheidungsbäume sind bei unausgewogenen Datensätzen voreingenommen, daher wird empfohlen, den Datensatz vor der Erstellung des Entscheidungsbaums auszugleichen.

Fazit

Glückwunsch, du hast es bis zum Ende dieses Tutorials geschafft!

In diesem Tutorium hast du viele Details über Entscheidungsbäume erfahren: wie sie funktionieren, Maße für die Attributauswahl wie Informationsgewinn, Gewinnverhältnis und Gini-Index, Aufbau von Entscheidungsbaummodellen, Visualisierung und Auswertung eines Diabetes-Datensatzes mit dem Python-Paket Scikit-learn. Wir haben auch über die Vor- und Nachteile gesprochen und darüber, wie man die Leistung des Entscheidungsbaums mit Hilfe von Parametertuning optimieren kann.

Wir hoffen, dass du den Entscheidungsbaum-Algorithmus jetzt nutzen kannst, um deine eigenen Datensätze zu analysieren.

Wenn du mehr über maschinelles Lernen in Python erfahren möchtest, besuche den Kurs Machine Learning with Tree-Based Models in Python von DataCamp.

Schau dir unser Kaggle Tutorial an: Dein erstes Machine Learning Modell.

Lass dich für deine Traumrolle als Data Scientist zertifizieren

Unsere Zertifizierungsprogramme helfen dir, dich von anderen abzuheben und potenziellen Arbeitgebern zu beweisen, dass deine Fähigkeiten für den Job geeignet sind.

Hol Dir Deine Zertifizierung
Timeline mobile.png

FAQs zur Entscheidungsbaum-Klassifizierung

Was sind die häufigsten Anwendungsfälle für die Klassifizierung mit Entscheidungsbäumen?

Die Klassifizierung mit Entscheidungsbäumen wird in verschiedenen Bereichen eingesetzt, z. B. im Finanzwesen für die Kreditwürdigkeitsprüfung, im Gesundheitswesen für die Krankheitsdiagnose, im Marketing für die Kundensegmentierung und vieles mehr. Es hilft bei der Entscheidungsfindung, indem es die Daten nach verschiedenen Kriterien in Teilmengen aufteilt.

Wie kann ich bei der Verwendung von Entscheidungsbäumen ein Overfitting verhindern?

Eine Überanpassung kann verhindert werden, indem der Baum beschnitten wird, eine maximale Tiefe festgelegt wird, eine Mindestanzahl von Stichproben verwendet wird, die erforderlich ist, um einen internen Knoten zu teilen, und eine Mindestanzahl von Stichproben verwendet wird, die erforderlich ist, um einen Blattknoten zu erreichen. Eine Kreuzvalidierung kann auch dabei helfen, diese Parameter effektiv zu optimieren.

Was ist der Unterschied zwischen einem Entscheidungsbaum und einem Random Forest?

Ein Entscheidungsbaum ist eine einzelne Baumstruktur, die zur Klassifizierung oder Regression verwendet wird. Ein Random Forest hingegen ist ein Ensemble aus mehreren Entscheidungsbäumen, das die Vorhersagegenauigkeit verbessert und die Überanpassung kontrolliert, indem es die Ergebnisse der verschiedenen Bäume mittelt.

Wie gehe ich mit fehlenden Werten in meinem Datensatz um, wenn ich Entscheidungsbäume verwende?

Entscheidungsbäume können mit fehlenden Werten umgehen, indem sie Surrogat-Splits verwenden oder fehlende Werte durch den häufigsten Wert oder den Mittelwert/Modus des Merkmals ersetzen. Scikit-learn bietet auch Methoden wie SimpleImputer, um fehlende Werte vor dem Training des Modells aufzufüllen.

Welche Vorteile hat die Verwendung von Scikit-learn für die Erstellung von Entscheidungsbaummodellen?

Scikit-learn bietet ein einfaches und effizientes Werkzeug für Data Mining und Datenanalyse, einschließlich Entscheidungsbaum-Klassifikatoren. Es bietet verschiedene Funktionen wie eine einfache Integration, eine ausführliche Dokumentation, Unterstützung für verschiedene Metriken und Parametereinstellungen sowie Methoden zur Visualisierung von Entscheidungsbäumen, was es zu einer beliebten Wahl für Praktiker des maschinellen Lernens macht.

Themen

Python-Kurse

Course

Introduction to Python

4 hr
5.8M
Master the basics of data analysis with Python in just four hours. This online course will introduce the Python interface and explore popular packages.
See DetailsRight Arrow
Start Course
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Die 32 besten AWS-Interview-Fragen und Antworten für 2024

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interview-Fragen, zusammen mit Fragen, die auf realen Situationen basieren. Es deckt alle Bereiche ab und sorgt so für eine abgerundete Vorbereitungsstrategie.
Zoumana Keita 's photo

Zoumana Keita

15 Min.

See MoreSee More