In diesem Lernprogramm lernen Sie die decision tree klassifizierung, Maßnahmen zur Attributauswahl und wie Sie mit dem Python-SciKit-Learn-Paket einen decision tree klassifizierer erstellen und optimieren.
Als Marketingmanager möchten Sie eine Gruppe von Kunden haben, die Ihr Produkt mit höchster Wahrscheinlichkeit kaufen. So können Sie Ihr Marketingbudget schonen, indem Sie Ihre Zielgruppe finden. Als Kreditmanager müssen Sie riskante Kreditanträge identifizieren, um eine niedrigere Kreditausfallrate zu erreichen. Dieser Prozess der Klassifizierung von Kunden in eine Gruppe potenzieller und nicht potenzieller Kunden oder 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 Grundlage der gegebenen Trainingsdaten entwickelt. Im Vorhersageschritt wird das Modell verwendet, um die Reaktion auf gegebene Daten vorherzusagen. Ein decision tree ist einer der einfachsten und beliebtesten Klassifizierungsalgorithmen zum Verstehen und Interpretieren von Daten. Er kann sowohl für Klassifizierungs- als auch für Regressionsprobleme verwendet werden.
Um den Beispielcode in diesem Tutorial ganz einfach selbst auszuführen, können Sie kostenlos eine DataLab-Arbeitsmappe erstellen , in der Python vorinstalliert ist und die alle Codebeispiele enthält. Eine Videoerklärung zur decision tree klassifizierung finden Sie in diesem DataCamp-Kursvideo .
Der decision tree-Algorithmus
Ein decision tree ist eine flussdiagrammähnliche Baumstruktur, bei der ein interner Knoten ein Merkmal (oder Attribut) darstellt, der Zweig eine Entscheidungsregel darstellt und jeder Blattknoten das Ergebnis darstellt.
Der oberste Knoten in einem decision tree wird als Stammknoten bezeichnet. Er lernt, auf der Grundlage des Attributwerts zu partitionieren. Er partitioniert den Baum auf rekursive Weise, was als rekursive Partitionierung bezeichnet wird. Diese flussdiagrammähnliche Struktur hilft Ihnen bei der Entscheidungsfindung. Es handelt sich um eine Visualisierung wie ein Flussdiagramm, das das menschliche Denken leicht nachahmt. Deshalb sind decision tree leicht zu verstehen und zu interpretieren.
Ein decision tree ist ein ML-Algorithmus vom Typ Whitebox. Er nutzt eine interne Entscheidungslogik, die bei Algorithmen vom Typ Blackbox, wie z. B. einem neuronalen Netzwerk, nicht verfügbar ist . Seine Trainingszeit ist im Vergleich zum neuronalen Netzwerkalgorithmus kürzer.
Die zeitliche Komplexität von decision tree ist eine Funktion der Anzahl der Datensätze und Attribute in den gegebenen Daten. Der decision tree ist eine verteilungsfreie oder nichtparametrische Methode, die nicht von Wahrscheinlichkeitsverteilungsannahmen abhängt. decision tree können hochdimensionale Daten mit guter Genauigkeit verarbeiten.
Wie funktioniert der decision tree-Algorithmus?
Die Grundidee hinter jedem decision treealgorithmus ist wie folgt:
- Wählen Sie mithilfe von Attribute Selection Measures (ASM) das beste Attribut aus, um die Datensätze aufzuteilen.
- Machen Sie dieses Attribut zu einem Entscheidungsknoten und teilen Sie den Datensatz in kleinere Teilmengen auf.
- Beginnen Sie mit dem Erstellen des Baums, indem Sie diesen Vorgang rekursiv für jedes untergeordnete Element wiederholen, bis eine der Bedingungen erfüllt ist:
- Alle Tupel gehören zum selben Attributwert.
- Es sind keine weiteren Attribute vorhanden.
- Es sind keine weiteren Instanzen vorhanden.
Maßnahmen zur Attributauswahl
Das Attributauswahlmaß ist eine Heuristik zur Auswahl des Aufteilungskriteriums, das die Daten auf die bestmögliche Weise partitioniert. Es wird auch als Aufteilungsregel bezeichnet, da es uns hilft, Haltepunkte für Tupel auf einem bestimmten Knoten zu bestimmen. ASM weist jedem Feature (oder Attribut) einen Rang zu, indem es den gegebenen Datensatz erklärt. Das Attribut mit der besten Punktzahl wird als Aufteilungsattribut ausgewählt ( Quelle ). Im Fall eines Attributs mit kontinuierlichem Wert müssen auch Aufteilungspunkte für Zweige definiert werden. Die beliebtesten Auswahlmaße sind Informationsgewinn, Gewinnverhältnis und Gini-Index.
Informationsgewinn
Claude Shannon erfand das Konzept der Entropie, das die Unreinheit des Eingabesatzes misst. In der Physik und Mathematik wird Entropie als Zufälligkeit oder Unreinheit in einem System bezeichnet. In der Informationstheorie bezieht sie sich auf die Unreinheit in einer Gruppe von Beispielen. 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 basierend auf gegebenen Attributwerten. Der decision treealgorithmus ID3 (Iterative Dichotomiser) verwendet Informationsgewinn.
Wobei Pi die Wahrscheinlichkeit ist, dass ein beliebiges Tupel in D zur Klasse Ci gehört.
Wo:
- Info(D) ist die durchschnittliche Menge an Informationen, die zum Identifizieren der Klassenbezeichnung eines Tupels in D erforderlich ist.
- |Dj|/|D| fungiert als Gewicht der j-ten Partition.
- InfoA(D) ist die erwartete Information, die erforderlich ist, um ein Tupel aus D basierend auf der Partitionierung durch A zu klassifizieren.
Das Attribut A mit dem höchsten Informationsgewinn, Gain(A), wird als Aufteilungsattribut am Knoten N() ausgewählt.
Verstärkungsverhältnis
Der Informationsgewinn ist für das Attribut mit vielen Ergebnissen verzerrt. Das heißt, es wird das Attribut mit einer großen Anzahl unterschiedlicher Werte bevorzugt. Betrachten Sie beispielsweise ein Attribut mit einer eindeutigen Kennung wie customer_ID, das aufgrund einer reinen Partitionierung null info(D) hat. Dies maximiert den Informationsgewinn und erzeugt eine nutzlose Partitionierung.
C4.5, eine Verbesserung von ID3, verwendet eine Erweiterung des Informationsgewinns, die als Gain Ratio bezeichnet wird. Gain Ratio behandelt das Problem der Verzerrung, indem der Informationsgewinn mithilfe von Split Info normalisiert wird. Die Java-Implementierung des C4.5-Algorithmus heißt J48 und ist im Data-Mining-Tool WEKA verfügbar.
Wo:
- |Dj|/|D| fungiert als Gewicht der j-ten Partition.
- v ist die Anzahl der diskreten Werte im Attribut A.
Das Verstärkungsverhältnis kann definiert werden als
Das Attribut mit dem höchsten Gewinnverhältnis wird als Aufteilungsattribut ausgewählt ( Quelle ).
Gini-Index
Ein anderer decision treealgorithmus, CART (Classification and Regression Tree), verwendet die Gini-Methode zum Erstellen von Teilungspunkten.
Wobei Pi die Wahrscheinlichkeit ist, dass ein Tupel in D zur Klasse Ci gehört.
Der Gini-Index berücksichtigt eine binäre Aufteilung für jedes Attribut. Sie können eine gewichtete Summe der Unreinheit jeder Aufteilung berechnen. Wenn eine binäre Aufteilung für Attribut A die Daten D in D1 und D2 aufteilt, lautet der Gini-Index von D:
Bei einem diskreten Attribut wird die Teilmenge, die den minimalen Gini-Index für das ausgewählte Attribut liefert, als Teilungsattribut ausgewählt. Bei kontinuierlichen Attributen besteht die Strategie darin, jedes Paar benachbarter Werte als möglichen Teilungspunkt auszuwählen, und ein Punkt mit einem kleineren Gini-Index wird als Teilungspunkt ausgewählt.
Als Aufteilungsattribut wird das Attribut mit dem minimalen Gini-Index ausgewählt.
Erstellen eines decision tree-Klassifikators in Scikit-learn
Importieren erforderlicher Bibliotheken
Laden wir zuerst die erforderlichen Bibliotheken.
Daten werden geladen
Lassen Sie uns zunächst den erforderlichen Pima Indian Diabetes-Datensatz mit der CSV-Lesefunktion von Pandas laden. Sie können den Kaggle-Datensatz herunterladen , um den Vorgang zu verfolgen.
Merkmalsauswahl
Hier müssen Sie die angegebenen Spalten in zwei Typen von Variablen unterteilen: abhängige (oder Zielvariable) und unabhängige Variablen (oder Merkmalsvariablen).
Aufteilen von Daten
Um die Modellleistung zu verstehen, empfiehlt es sich, den Datensatz in einen Trainingssatz und einen Testsatz aufzuteilen.
Teilen wir den Datensatz mithilfe der Funktion auf train_test_split(). Sie müssen drei Parameter übergeben: „target“ und „test_set size“.
Erstellen eines decision treemodells
Erstellen wir mit Scikit-learn ein decision treemodell.
Auswerten des Modells
Lassen Sie uns schätzen, wie genau der Klassifikator oder das Modell den Sortentyp vorhersagen kann.
Die Genauigkeit kann durch Vergleich der tatsächlichen Testsatzwerte und der vorhergesagten Werte berechnet werden.
Wir haben eine Klassifizierungsrate von 67,53 % erreicht, was als gute Genauigkeit gilt. Sie können diese Genauigkeit verbessern, indem Sie die Parameter im decision treealgorithmus anpassen.
decision tree visualisieren
Sie können die Funktion export_graphviz von Scikit-learn verwenden, um den Baum in einem Jupyter-Notebook anzuzeigen. Zum Plotten des Baums müssen Sie außerdem graphviz und pydotplus installieren.
Die Funktion export_graphviz konvertiert den decision tree-Klassifikator in eine Punktdatei, und pydotplus konvertiert diese Punktdatei in ein PNG oder eine auf Jupyter anzeigbare Form.
Im decision treediagramm hat jeder interne Knoten eine Entscheidungsregel, die die Daten aufteilt. Gini, auch Gini-Verhältnis genannt, misst die Unreinheit des Knotens. Man kann sagen, ein Knoten ist rein, wenn alle seine Datensätze zur selben Klasse gehören. Solche Knoten werden als Blattknoten bezeichnet.
Hier ist der resultierende Baum unbeschnitten. Dieser unbeschnittene Baum ist unerklärlich und nicht leicht zu verstehen. Lassen Sie uns ihn im nächsten Abschnitt durch Beschneiden optimieren.
Optimieren der decision treeleistung
- Kriterium: optional (Standard = „gini“) oder Wählen Sie ein Attributauswahlmaß. Dieser Parameter ermöglicht es uns, das unterschiedliche Attributauswahlmaß zu verwenden. Unterstützte Kriterien sind „gini“ für den Gini-Index und „Entropie“ für den Informationsgewinn.
- Splitter: Zeichenfolge, optional (Standard = „best“) oder Split-Strategie. Mit diesem Parameter können wir die Split-Strategie auswählen. Unterstützte Strategien sind „best“, um die beste Aufteilung auszuwählen, und „random“, um die beste zufällige Aufteilung auszuwählen.
- max_depth: int oder Keine, optional (Standard=Keine) oder Maximale Tiefe eines Baums. Die maximale Tiefe des Baums. Wenn Keine, werden die Knoten erweitert, bis alle Blätter weniger als min_samples_split-Samples enthalten. Ein höherer Wert der maximalen Tiefe führt zu Überanpassung, ein niedrigerer Wert zu Unteranpassung ( Quelle ).
In Scikit-learn wird die Optimierung des decision treeklassifizierers nur durch Vorabschneiden durchgeführt. Die maximale Tiefe des Baums kann als Kontrollvariable für das Vorabschneiden verwendet werden. Im folgenden Beispiel können Sie einen decision tree mit max_depth=3 auf denselben Daten zeichnen. Außer den Vorabschnittparametern können Sie auch andere Attributauswahlmaße wie Entropie ausprobieren.
Die Klassifizierungsrate stieg auf 77,05 %, was einer besseren Genauigkeit als beim Vorgängermodell entspricht.
decision tree visualisieren
Machen wir unseren decision tree mit dem folgenden Code etwas verständlicher:
Hier haben wir die folgenden Schritte ausgeführt:
- Die erforderlichen Bibliotheken wurden importiert.
- Es wurde ein StringIOObjekt erstellt, dot_datadas die Textdarstellung des decision tree enthält.
- Exportieren Sie den decision tree dotmithilfe der export_graphvizFunktion in das Format und schreiben Sie die Ausgabe in den dot_dataPuffer.
- Erstellt ein pydotplusGraphobjekt aus der dotFormatdarstellung des im Puffer gespeicherten decision tree dot_data.
- Das generierte Diagramm wird in eine PNG-Datei mit dem Namen „diabetes.png“ geschrieben.
- Das generierte PNG-Bild des decision tree wird unter Verwendung des ImageObjekts aus dem IPython.displayModul angezeigt.
Wie Sie sehen, ist dieses beschnittene Modell weniger komplex, besser erklärbar und leichter zu verstehen als die vorherige Darstellung desdecision tree modells manic pixie dream girl.
decision tree-Profis
- decision tree sind leicht zu interpretieren und zu visualisieren.
- Nichtlineare Muster können damit problemlos erfasst werden.
- Es erfordert weniger Datenvorverarbeitung durch den Benutzer; beispielsweise ist es nicht erforderlich, Spalten zu normalisieren.
- Es kann für das Feature Engineering, beispielsweise zum Vorhersagen fehlender Werte, verwendet werden und ist für die Variablenauswahl geeignet.
- Aufgrund der nichtparametrischen Natur des Algorithmus enthält der decision tree keine Annahmen über die Verteilung. ( Quelle )
Nachteile eines decision tree
- Empfindlich gegenüber verrauschten Daten. Es kann zu einer Überanpassung verrauschter Daten kommen.
- Die kleine Abweichung (oder Varianz) in den Daten kann zu unterschiedlichen decision tree führen. Dies kann durch Bagging- und Boosting-Algorithmen reduziert werden.
- decision tree sind durch unausgewogene Datensätze verzerrt. Es wird daher empfohlen, den Datensatz vor dem Erstellen des decision tree auszugleichen.
Fazit
Herzlichen Glückwunsch, Sie haben es bis zum Ende dieses Tutorials geschafft!
In diesem Tutorial haben Sie viele Details zu decision tree behandelt: wie sie funktionieren, Attributauswahlmaße wie Informationsgewinn, Gewinnverhältnis und Gini-Index, Erstellen von decision treemodellen, Visualisierung und Auswertung eines Diabetes-Datensatzes mithilfe des Scikit-learn-Pakets von Python. Wir haben auch die Vor- und Nachteile besprochen und wie man die Leistung von decision tree mithilfe der Parameteroptimierung optimieren kann.
Hoffentlich können Sie jetzt den decision treealgorithmus nutzen, um Ihre eigenen Datensätze zu analysieren.
Wenn Sie mehr über maschinelles Lernen in Python erfahren möchten, nehmen Sie am Kurs „Maschinelles Lernen mit baumbasierten Modellen in Python“ von DataCamp teil .
Sehen Sie sich unser Kaggle-Tutorial an: Ihr erstes Modell für maschinelles Lernen .
Häufig gestellte Fragen zur decision treeklassifizierung
Die Klassifizierung anhand von decision tree wird häufig in verschiedenen Bereichen verwendet, beispielsweise im Finanzwesen zur Kreditwürdigkeitsprüfung, im Gesundheitswesen zur Krankheitsdiagnose, im Marketing zur Kundensegmentierung und mehr. Sie hilft bei der Entscheidungsfindung, indem sie Daten anhand verschiedener Kriterien in Teilmengen aufteilt.
Überanpassung kann verhindert werden, indem der Baum beschnitten wird, eine maximale Tiefe festgelegt wird, eine Mindestanzahl von Stichproben verwendet wird, die zum Aufteilen eines internen Knotens erforderlich ist, und eine Mindestanzahl von Stichproben verwendet wird, die für einen Blattknoten erforderlich ist. Auch eine Kreuzvalidierung kann dabei helfen, diese Parameter effektiv anzupassen.
Ein decision tree ist eine einzelne Baumstruktur, die zur Klassifizierung oder Regression verwendet wird. Ein Random Forest hingegen ist ein Ensemble aus mehreren decision tree, das die Vorhersagegenauigkeit verbessert und Überanpassung durch Mittelung der Ergebnisse verschiedener Bäume kontrolliert.
decision tree können fehlende Werte verarbeiten, indem sie Ersatzaufteilungen verwenden oder fehlende Werte durch den häufigsten Wert oder den Mittelwert/Modus des Features ersetzen. Scikit-learn bietet auch Methoden wie SimpleImputerdas Auffüllen fehlender Werte vor dem Trainieren des Modells.
Scikit-learn bietet ein einfaches und effizientes Tool für Data Mining und Datenanalyse, einschließlich decision treeklassifizierern. Es bietet verschiedene Funktionen wie einfache Integration, umfangreiche Dokumentation, Unterstützung für verschiedene Metriken und Parameterabstimmung sowie Methoden zur Visualisierung von decision tree, was es zu einer beliebten Wahl für Praktiker des maschinellen Lernens macht.