Technologische Neuigkeiten, Bewertungen und Tipps!

Entscheidungsbäume im maschinellen Lernen (ML) mit Python-Tutorial | von Towards AI Editorial Team

Hinweis: Der folgende Artikel hilft Ihnen dabei: Entscheidungsbäume im maschinellen Lernen (ML) mit Python-Tutorial | von Towards AI Editorial Team

📚 Schauen Sie sich unser Tutorial zum Gradientenabstieg an. 📚

Ein Entscheidungsbaum ist ein wichtiges und beliebtes Werkzeug für Klassifizierungs- und Vorhersageprobleme beim maschinellen Lernen, in der Statistik, beim Data Mining und beim maschinellen Lernen [4]. Es beschreibt Regeln, die von Menschen interpretiert und in einem Wissenssystem wie Datenbanken angewendet werden können. Im Grunde ein Entscheidungsbaum T kodiert D (ein Klassifikator oder eine Regressionsfunktion) in Form einer Baumstruktur, die die folgenden Attribute aufweist:

  • Entscheidungsknoten: Es definiert einen Test für ein einzelnes Attribut.
  • Blattknoten: Zeigt den Wert des Zielattributs an.
  • Rand: Es handelt sich um eine Aufteilung eines Attributs.
  • Weg: Es ist eine Disjunktion des Tests, um die endgültige Entscheidung zu treffen.

Dies sind andere Namen, unter denen Entscheidungsbäume bekannt sind:

  • Baumklassifikator.
  • Strategie „Teile und herrsche“.
  • Hierarchischer Klassifikator.
  • Mehrstufiger Klassifikator.

Es klassifiziert Fälle, indem es an der Wurzel des Baums beginnt und durch diese bis zu einem Blattknoten verläuft.

Abbildung 1: Ein Entscheidungsbaum.

Ein Entscheidungsbaum verwendet Knoten und Blätter, um eine Entscheidung zu treffen.

Abbildung 2: Eine Vektorklassifizierung.

Darstellung der obigen Klassifizierung in Form eines Entscheidungsbaums:

Abbildung 3: Entscheidungsbaum zur Klassifizierung.

Problemstellung

Sagen Sie das Ergebnis des Basketballspiels zwischen zwei verschiedenen Teams voraus – Team1 und Team2.

Liste der nutzbaren Kenntnisse oder Attribute im Zusammenhang mit dem Spiel

  • Spielte Peter Mittelstürmer oder Stürmer?
  • Wo fand das Spiel statt – zu Hause oder auswärts?
  • Was war die Startzeit des Spiels?
  • War die Mitte des Gegners groß oder nicht?

Historische Daten

Abbildung 4: Historische Daten für ein Basketballspiel.

Daten zur Vorhersage

Abbildung 5: Daten zur Vorhersage des Basketballspiels.

Basierend auf Abbildung 5, historischen Daten und Prognosedaten:

  • Verallgemeinern Sie die gelernte Regel auf neue Daten.
  • Es handelt sich um ein Klassifizierungsproblem.

Das Lernen von Entscheidungsbäumen beinhaltet das Erlernen einer Abfolge von ansonsten Fragen, die uns fast sofort zur „wahren“ Antwort führen. Diese Fragen werden auch Test genannt. Es durchsucht alle möglichen Tests und findet den Test, der hinsichtlich der Zielvariablen am aussagekräftigsten ist.

Wie baut man einen Entscheidungsbaum auf?

  • Der oberste Knoten wird auch Wurzel genannt und repräsentiert den gesamten Datensatz.
  • Ein Entscheidungsbaum teilt den Trainingssatz schrittweise in immer kleinere Teilmengen auf.
  • Wenn der Test „wahr“ ist, wird dem linken Knoten ein Punkt zugewiesen; andernfalls wird es dem richtigen Knoten zugewiesen.
  • Ein Blatt eines Baums, das Datenpunkte enthält und dieselben Zielwerte aufweist, wird aufgerufen rein [1].
  • Eine Vorhersage für einen neuen Datenpunkt wird getroffen, indem untersucht wird, in welchem ​​Bereich der Partition des Merkmalsraums sich der Punkt befindet, und dann das Mehrheitsziel in diesem Bereich vorhergesagt wird [1].

from sklearn.tree import DecisionTreeClassifierfrom sklearn.datasets import load_breast_cancerfrom sklearn.model_selection import train_test_splitcancer = load_breast_cancer()X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, stratify=cancer.target, random_state=42)

Abbildung 6: Genauigkeit der Trainings- und Testdatensätze.
  • Wenn wir die Tiefe eines Entscheidungsbaums nicht einschränken, kann er beliebig tief und komplex werden.
  • Wie in Abbildung 6 dargestellt, beträgt die Genauigkeit des Trainingssatzes 100 % – da die Blätter rein sind, ist der Baum tief genug gewachsen, um sich alle Beschriftungen der Trainingsdaten zweifelsfrei zu merken.
  • Der Baum kann riesig werden und solche Baumarten sind schwer zu verstehen. Größere Bäume sind normalerweise weniger genau als kleinere Bäume [2].

Code-Implementierung zum Erstellen eines Blatts eines Entscheidungsbaums (Das Blatt wird basierend auf den ml_tasks – Regression oder Klassifizierung) erstellt:

def create_leaf(data, ml_task):label_column = data[:, -1]

if ml_task == “regression”:leaf = np.mean(label_column)else:unique_classes, counts_unique_classes = np.unique(label_column, return_counts=True)i = counts_unique_classes.argmax()leaf = unique_classes[i]

Rückblatt

Das Hauptziel eines Entscheidungsbaums besteht darin, geeignete Merkmale für die Aufteilung des Baums in Unterteile auszuwählen. Anschließend wenden wir beim Splitten einen ID3-Algorithmus im Hintergrund an.

Knotenverunreinigung ist die Homogenität innerhalb eines Knotens. Ein Knoten ist unrein, wenn Fälle mehr als einen Wert für die Antwort haben. Ein Knoten ist rein, wenn alle Instanzen den gleichen Wert für die Antwort- oder Zielvariable haben oder die Verunreinigung = 0 ist.

Dies sind die beiden beliebtesten Methoden zur Messung der Knotenverunreinigung:

Die beste Aufteilung wird basierend auf dem Grad der Verunreinigung der untergeordneten Knoten ausgewählt. Die Knotenverunreinigung ist 0, wenn alle Muster am Knoten derselben Kategorie angehören. Die Verunreinigung wird maximal, wenn alle Klassen am Knoten N gleich wahrscheinlich sind.

Codeausschnitt zur Überprüfung der Reinheit:

def check_purity(data):label_column = data[:, -1]unique_classes = np.unique(label_column)

if len(unique_classes) == 1:return Trueelse:return False

In einem Entscheidungsbaum ist Entropie eine Art Unordnung oder Unsicherheit. Es ist das Maß für die Unreinheit, Unordnung oder Unsicherheit in einer Datenmenge. Dies ist eine Möglichkeit, die Aufteilung der Daten zu steuern, die durch einen Entscheidungsbaum festgelegt wird. Es beeinflusst, wie ein Entscheidungsbaum seine Grenzen bildet. Wir verwenden Entropie, um die Unreinheit oder Zufälligkeit eines Datensatzes zu messen.

Gegeben sei die unten gezeigte Entropiegleichung:

Abbildung 7: Gleichung für Entropie.

Codeausschnitt zur Berechnung der Entropie:

def get_entropy(data):label_col = data[:, -1]a, counts = np.unique(label_col, return_counts=True)prob = counts / counts.sum()entropy = sum(probabilities * -np.log2(probabilities))

Rückkehr Entropie

Ein einfaches Beispiel für Entropie:

Nehmen wir an, es gibt eine Tasche, die zwei verschiedene Szenarien darstellt:

  • Tasche A hat 100 grüne Kugeln. Peter möchte aus diesem Beutel einen grünen Ball auswählen. Hier hat Beutel A eine Entropie von 0, da dies 0 Verunreinigungen oder vollständige Reinheit impliziert.
  • Wir ersetzen 40 grüne Kugeln in Beutel A durch rote Kugeln und ebenso ersetzen wir 10 grüne Kugeln durch schwarze Kugeln. Nun möchte John einen grünen Ball aus dieser Tasche auswählen. In diesem Fall sinkt die Wahrscheinlichkeit, einen grünen Ball zu ziehen, aufgrund der zunehmenden Verunreinigung des Beutels von 1,0 auf 0,5.

Shannons Entropie Das Modell verwendet die Logarithmusfunktion zur Basis 2 (log2(P(x)) um die Entropie zu messen.

Shannons Informationstheorie

Es gibt nur zwei Klassen – Ja, Nein.

In unserem Beispiel, T ist eine Reihe von Nachrichten, die an einen Empfänger gesendet werden, der seine Klasse erraten muss, also:

  • Wenn p(Ja | t) = 1 (bzw. p(Nein | t) = 1), dann vermutet der Empfänger ein neues Beispiel als „Ja“. Es muss keine Nachricht gesendet werden.
  • Wenn p(Ja | t) = p (Nein | t) = 0,5dann kann der Empfänger nicht erraten, und wir müssen ihm die Klasse eines neuen Beispiels mitteilen, indem wir eine Ein-Bit-Nachricht senden.
  • Wenn 0dann benötigt der Empfänger im Durchschnitt weniger als ein Bit, um die Klasse eines neuen Beispiels zu kennen.

Informationsgewinn

Der Informationsgewinn misst, wie viele Informationen ein Feature über die Klasse bereitstellt.

Der Informationsgewinn ist in einem Entscheidungsbaum aufgrund der folgenden Punkte von Bedeutung:

  • Es ist der Primärschlüssel, der vom Entscheidungsbaumalgorithmus zum Erstellen eines Entscheidungsbaums akzeptiert wird.
  • Der Entscheidungsbaum wird immer versuchen, den Informationsgewinn zu maximieren.
  • Das Attribut mit dem höchsten Informationsgewinn wird zuerst getestet oder aufgeteilt.

Die folgende Abbildung zeigt die Gleichung für den Informationsgewinn:

Abbildung 8: Die Gleichung des Informationsgewinns.

Beispiel einer Entropieberechnung

Es gibt eine Straße zum Fahren von Fahrzeugen, und diese Straße weist zahlreiche Merkmale wie Steigung, Unebenheiten, Geschwindigkeitsbegrenzung und andere auf.

Dies ist der Datensatz:

Abbildung 9: Straßendatensatz.

Merkmale:

  • Zustand
  • Unebenheit
  • erlaubte Höchstgeschwindigkeit

Etikett:

Gesamtzahl der Beobachtungen: 4

Berechnen Sie die Entropie von Grade Feature:

Nehmen Sie Beschriftungen wie einen übergeordneten Knoten SSFF → Langsam Langsam Schnell Schnell.

Die Entropie von SSFF:

P(langsam) = 2/4 = 0,5

P(Schnell) = 2/4 = 0,5

Also die Entropie von SSFF:

Die Entropie des Elternteils = {0,5 log2(0,5) + 0,5 log2(0,5)} = -{-0,5 + (-0,5)}

Daher ist die Entropie des Elternteils = 1

Um den Informationsgewinn des Notenmerkmals zu ermitteln, teilen Sie als Nächstes den übergeordneten Knoten nach dem Notenmerkmal auf, wie in Abbildung 10 dargestellt.

Abbildung 10: Die Aufteilung des übergeordneten Knotens nach dem Notenmerkmal.

Berechnen Sie die Entropie der beiden (linken und rechten) Kinderknoten SSF bzw. F.

Die Entropie von Knoten F = 0 (Note: 0, da alle aus derselben Klasse stammen)

Die Entropie von Knoten-SSF:

P(langsam) = 2/3 = 0,334

P(Schnell) = 1/3 = 0,334

Also, Entropie von Knoten SSF = -{0,667 log2 (0,667) + 0,334 log2(0,334)}

= -{-0,38 + (-0,52)} = 0,9

Abbildung 11: Anzahl der Knoten im übergeordneten Knoten und untergeordneten Knoten.
Abbildung 12: Die Gleichung zur Berechnung der Entropie der untergeordneten Knoten.
Abbildung 13: Die Entropie des untergeordneten Knotens mit gewichtetem Durchschnitt.

Der Informationsgewinn der Note aus der Gleichung = 1–0,675 = 0,325

Der Entropiebereich liegt dazwischen 0 zu 1.

Wie die Entropie ist auch der Gini-Index eine Art Kriterium in Entscheidungsbäumen, das zur Berechnung des Informationsgewinns dient. Der Informationsgewinn wird vom Entscheidungsbaum genutzt, um einen Knoten aufzuteilen. Gini misst die Unreinheit eines Knotens.

Der Bereich von Gini liegt zwischen 0 und 0,5. Die Gini-Verunreinigung eignet sich im Vergleich zur Entropie besser für die Auswahl der besten Merkmale [3].

Die Gleichung des Gini-Index zur Messung der Verunreinigung:

Abbildung 14: Gleichung von Gini.

Das Aufteilungskriterium im Gini-Index:

  • Dabei wird davon ausgegangen, dass es für jedes Attribut mehrere mögliche Teilungswerte gibt.
  • Bei allen Attributen wird davon ausgegangen, dass sie einen kontinuierlichen Wert haben
  • Es kann für die kategorialen Attribute geändert werden.

Überanpassung ist ein schwerwiegendes Problem beim maschinellen Lernen, das zu den schlimmsten Leistungsproblemen im Modell führt. In ähnlicher Weise kann der Entscheidungsbaum aufgrund der folgenden Probleme auch mit dem Problem einer Überanpassung konfrontiert sein:

  • Wenn der Entscheidungsbaum zu weit wächst.
  • Wenn die Anzahl der Instanzen im Entscheidungsbaum kleiner wird, während der Baum erstellt wird.

Wir verwenden Pruning, um eine Überanpassung in Entscheidungsbäumen zu vermeiden.

Beim Beschneiden wird der Entscheidungsbaum angepasst, um Fehlklassifizierungsfehler zu minimieren. Es ist die Umkehrung der Aufteilung.

Es gibt zwei Möglichkeiten, das Beschneiden durchzuführen:

  • Vorschnitt.
  • Nach dem Beschneiden.

Es identifiziert und entfernt Zweige, die Rauschen oder Ausreißer widerspiegeln.

Vollständiger Baum

Ein vollständiger Baum gibt das Stoppmuster für den Baum an. Es folgt den folgenden Schritten:

  • Wenn alle Datensätze zur gleichen Klasse gehören, beenden Sie die Erweiterung eines Knotens.
  • Wenn alle Datensätze dieselben Attributwerte haben, beenden Sie die Erweiterung eines Knotens.

Vorschnitt

Beim Vorschnittansatz wächst der Baum nicht vollständig. Es folgt die Regel des frühen Anhaltens. Es folgt den folgenden Schritten:

  • Stoppt den Algorithmus, bevor er zu einem ausgewachsenen Baum wird.
  • Stoppt, wenn alle Instanzen zur gleichen Klasse gehören.
  • Stoppt, wenn alle Attributwerte gleich sind.

Nach dem Beschneiden

Post-Pruning ist der beliebteste Ansatz im Entscheidungsbaum, um eine Überanpassung zu vermeiden. Das Problem der Überanpassung wird im Wesentlichen gelöst, indem die folgenden Schritte ausgeführt werden:

  • Erweitern Sie den Entscheidungsbaum vollständig.
  • Befolgen Sie den Bottom-up-Ansatz, um die Knoten des Entscheidungsbaums zu kürzen.
  • Wenn sich der Generalisierungsfehler nach dem Trimmen der Knoten verbessert, ersetzen Sie den Unterbaum durch einen Blattknoten.
  • In einem Unterbaum wird die Klassenbezeichnung des Blattknotens durch die Mehrheitsklasse bestimmt.

Dies sind die Vor- und Nachteile der entscheidungsbaumbasierten Klassifizierung:

Vorteile

  • Der Bau ist sehr günstig.
  • Es bietet eine hervorragende Genauigkeit.
  • Es ist sehr schnell bei der Klassifizierung „unbekannter“ Datensätze.
  • Für kleine Bäume ist die Interpretation einfach.
  • Es kann sowohl kontinuierliche als auch symbolische Attribute verarbeiten.
  • Die Leistung bei verrauschten Daten ist akzeptabel.

Nachteile

  • Möglicherweise liegt ein Problem mit dem Systemspeicher vor, da die Daten in den Speicher passen müssen.
  • Es ist eine Neuschulung erforderlich, wenn neue Daten eingehen.
  • Es besteht das Problem achsenparalleler Entscheidungsgrenzen.

In diesem Beispiel verwenden wir den Iris-Datensatz. Hier zeigen wir Schritt für Schritt die Code-Implementierung eines Entscheidungsbaums:

Erforderliche Bibliotheken importieren:

numpy als np importieren, pandas als pd importieren, matplotlib.pyplot als pltimport seaborn als snsfrom sklearn importieren, tree%matplotlib inline importieren

Iris-Datensatz lesen:

data = pd.read_csv(‘Iris.csv’)data

Abbildung 15: Iris-Datensatz.

Die Form der Irisdaten:

data.shape

Spaltennamen des Iris-Datensatzes:

col_names = [‘id’, ‘sepal_length’, ‘sepal_width’, ‘petal_length’, ‘petal_width’, ‘species’]data.columns = col_namescol_names

Spalten des Iris-Datensatzes

Löschen Sie die Spalte „id“ aus dem Datensatz:

data = data.drop([‘id’]Achse=1)

Überprüfen Sie den Kopf des Iris-Datensatzes:

data.head()

Abbildung 16: Iris-Datensatz.

Rufen Sie die Informationen zum Iris-Datensatz ab:

data.info()

Abbildung 17: Informationen zum Iris-Datensatz.

Zählungen abrufen:

Daten[‘species’].value_counts()

Zielspalten abrufen:

target_col = [‘species’]

Ermitteln Sie den Wert von X und y:

X = data.drop([‘species’]Achse=1)y = Daten[‘species’]

Die Aufteilung des Datensatzes:

aus sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.33, random_state = 42)

Entscheidungsbaumklassifikator:

Importieren Sie DecisionTreeClassifier aus sklearn.tree

Wenden Sie die Entscheidungsbaumklassifizierung mit dem Gini-Index an:

clf_gini = DecisionTreeClassifier(criterion=’gini’, max_third=3, random_state=0)

Passend zum Modell:

clf_gini.fit(X_train, y_train)

Abbildung 18: Entscheidungsbaumklassifikator.

Vorhersage:

y_pred_gini = clf_gini.predict(X_test)y_pred_gini

Abbildung 19: Vorhersage.

Erhalten Sie Genauigkeit mit dem Kriterium Gini-Index:

aus sklearn.metrics import precision_scoreprint(‘Modellgenauigkeitsbewertung mit Kriterium-Gini-Index: {0:0.4f}’. format(accuracy_score(y_test, y_pred_gini)))# y_pred_gini sind die vorhergesagten Klassenbezeichnungen im Testsatz.

Abbildung 20: Modellgenauigkeit.

Auf Über- und Unteranpassung prüfen:

print(‘Ergebnis des Trainingssatzes: {:.4f}’.format(clf_gini.score(X_train, y_train)))print(‘Ergebnis des Testsatzes: {:.4f}’.format(clf_gini.score(X_test, y_test) ))

Abbildung 21: Bewertung des Trainings- und Testdatensatzes.

Entscheidungsbaum zeichnen:

plt.figure(figsize=(12,8))tree.plot_tree(clf_gini.fit(X_train, y_train))

Abbildung 22: Entscheidungsbaumdiagramm des Iris-Datensatzes.

Es gibt eine weitere entscheidende Verbesserung für die Entscheidungsbäume: Zufällige Wälder. Diese ähneln Entscheidungsbäumen, erfordern jedoch mehrere Bäume zusammen, daher der Name Wälder. Zufällige Wälder Ensemble ist eine überwachte Lerntechnik, die beim maschinellen Lernen verwendet wird. In einem einzelnen Entscheidungsbaum ist die Wahrscheinlichkeit einer Überanpassung größer, aber bei mehreren Bäumen zusammen ist der Trainingsfehler minimal, da der Baum immer tiefer wird.

Entscheidungsbäume sind weit verbreitet und gehören zu den am häufigsten verwendeten Methoden für die Vorhersagemodellierung. Sie helfen dabei, die Zukunft vorherzusagen, und sind sehr leicht zu verstehen. Sie arbeiten effizienter mit diskreten Attributen, es besteht jedoch eine hohe Wahrscheinlichkeit, dass diese Bäume unter einer Fehlerausbreitung leiden.

Entscheidungsbäume reagieren auch nicht auf Ausreißer, da die Partitionierung auf der Grundlage des Anteils der Stichproben innerhalb der Teilbereiche und nicht auf der Grundlage absoluter Werte erfolgt [5]. Sie sind recht intuitiv und auch für technisch nicht versierte Benutzer leicht zu erklären.

Eine weitere wichtige Vorgehensweise bei einem Entscheidungsbaum besteht darin, dass diese nichtlinearen Beziehungen zwischen den Parametern keinen Einfluss auf die Leistung des Baums haben. Folglich sind Vorhersagen in Entscheidungsbäumen für hochdimensionale Daten schneller.

Table of Contents