Entscheidungsbaum-Klassifikation und ihre Python-Implementierung

Entscheidungsbaum-Klassifikation ist eine weit verbreitete Methode des maschinellen Lernens, die in verschiedenen Bereichen wie medizinischer Diagnostik, Finanzwesen und Marketing eingesetzt wird. In diesem Beitrag werden wir die Entscheidungsbaum-Klassifikation, ihre Funktionsweise und eine Python-Implementierung mit der Bibliothek Scikit-Learn erläutern.

Beispiel: Entscheidungsbaum für das Hochladen von Bildern in Wikipedia

Entscheidungsbaum-Klassifikation

Ein Entscheidungsbaum ist ein hierarchisches Modell, das durch eine Baumstruktur repräsentiert wird. Jeder Knoten im Baum stellt eine Frage oder Bedingung dar, die dazu dient, eine Entscheidung über die Klassenzugehörigkeit einer Beobachtung zu treffen. Die Blätter des Baums repräsentieren die Klassen, denen Beobachtungen zugeordnet werden können.

Aufbau eines Entscheidungsbaums

Es gibt mehrere Algorithmen, um Entscheidungsbäume zu erstellen, wie ID3, C4.5 und CART. Alle verwenden jedoch eine ähnliche Strategie:

a) Wählen Sie das beste Attribut, um den Datensatz aufzuteilen.

b) Teilen Sie den Datensatz in Untergruppen entsprechend den Attributwerten.

c) Wiederholen Sie den Prozess rekursiv für jede Untergruppe, bis alle Datenpunkte in einer Gruppe der gleichen Klasse angehören oder keine weiteren Attribute zur Verfügung stehen.

Kriterien zur Auswahl des besten Attributs

Zur Auswahl des besten Attributs stehen verschiedene Kriterien zur Verfügung, wie Information Gain, Gini-Index und Chi-Quadrat-Test. Diese Kriterien helfen dabei, das Attribut auszuwählen, das den Daten am besten aufteilt und somit die Homogenität der resultierenden Gruppen maximiert.

Pruning

Um Overfitting zu vermeiden, ist es oft notwendig, den Entscheidungsbaum zu beschneiden. Pruning-Techniken wie Cost-Complexity Pruning und Reduced Error Pruning helfen dabei, den Baum zu vereinfachen, indem sie weniger wichtige Knoten entfernen und so die Generalisierungsfähigkeit des Modells verbessern.

Gini Impurity

Beim Aufbau eines Entscheidungsbaums in der Klassifikation ist die Auswahl des besten Attributs für die Aufteilung der Daten entscheidend. Ein gängiges Maß, um die Qualität einer solchen Aufteilung zu bewerten, ist die Gini-Unreinheit (Gini Impurity). Die Gini-Unreinheit gibt an, wie oft ein zufällig ausgewähltes Element aus einem Datensatz falsch etikettiert würde, wenn es basierend auf der Verteilung der Klassen im Knoten zufällig einer Klasse zugeordnet würde. Eine geringe Gini-Unreinheit bedeutet, dass ein Knoten eine hohe Reinheit aufweist, also die in ihm enthaltenen Beispiele größtenteils zur selben Klasse gehören.

Ein perfekt reiner Knoten, in dem alle Beispiele zur selben Klasse gehören, hätte eine Gini-Unreinheit von 0. Ein Knoten, dessen Beispiele perfekt gleichmäßig auf die Klassen verteilt sind, würde hingegen den maximalen Wert der Gini-Unreinheit erreichen.

Python-Implementierung mit Scikit-Learn

Die Scikit-Learn-Bibliothek bietet eine einfach zu bedienende Implementierung von Entscheidungsbäumen. Im Folgenden wird ein Beispiel für die Verwendung der DecisionTreeClassifier-Klasse gezeigt:

# Importieren der benötigten Bibliotheken
from sklearn.datasets
import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix

#Laden des Iris-Datensatzes
iris = load_iris()
X = iris.data
y = iris.target

#Aufteilung der Daten in Trainings- und Testsets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

#Erstellen des Entscheidungsbaum-Klassifikators
clf = DecisionTreeClassifier(criterion='gini', max_depth=None, random_state=42)

#Trainieren des Modells
clf.fit(X_train, y_train)

#Vorhersagen auf dem Testset
y_pred = clf.predict(X_test)

#Bewertung der Modellleistung
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

#Ausgabe der Confusion Matrix und des Klassifikationsberichts
print("Confusion Matrix:")
print(confusion_matrix(y_test, y_pred))
print("Classification Report:")
print(classification_report(y_test, y_pred))

In diesem Beispiel wurde der Iris-Datensatz verwendet, der vier Attribute und drei Klassen enthält. Wir haben den Datensatz in Trainings- und Testsets aufgeteilt, einen Entscheidungsbaum-Klassifikator erstellt und das Modell mit den Trainingsdaten trainiert. Schließlich haben wir das Modell auf dem Testset evaluiert und die Genauigkeit, Confusion Matrix sowie den Klassifikationsbericht ausgegeben.

Visualisierung des Entscheidungsbaums

Es kann hilfreich sein, den erstellten Entscheidungsbaum zu visualisieren, um die Entscheidungsprozesse besser zu verstehen. Die Scikit-Learn-Bibliothek bietet die Möglichkeit, den Entscheidungsbaum mit plot_tree zu visualisieren:

import matplotlib.pyplot as plt
from sklearn.tree import plot_tree

# Visualisierung des Entscheidungsbaums
plt.figure(figsize=(12, 8))
plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True)
plt.show()

In diesem Code-Snippet verwenden wir plot_tree, um den Entscheidungsbaum zu zeichnen, wobei die Attribut- und Klassennamen angezeigt werden.

Fazit:

Entscheidungsbaum-Klassifikation ist eine leistungsstarke und interpretierbare Methode des maschinellen Lernens, die in vielen Anwendungsbereichen eingesetzt wird. Die Python-Bibliothek Scikit-Learn bietet eine einfach zu bedienende Implementierung von Entscheidungsbäumen.