2. Multivariate Analyse in Python 7-1. Entscheidungsbaum (Scikit-Learn)
- Der Entscheidungsbaum wird auch als Entscheidungsbaum bezeichnet.
- Um einen bestimmten Zweck zu erreichen, handelt es sich um eine Klassifizierungsmethode, bei der die Verzweigung basierend auf jedem Attribut (erklärende Variable) von Daten wiederholt wird. Es wird als Entscheidungsbaum bezeichnet, nachdem der Prozess im gesamten Dendrogramm angezeigt wurde.
- Wenn die zu klassifizierende Zielvariable kategoriale Daten sind, wird sie als ** Klassifizierungsbaum ** bezeichnet, und wenn es sich um numerische Daten handelt, wird sie als ** Regressionsbaum ** bezeichnet.
** Lassen Sie uns hier zunächst ein Beispiel für einen Klassifizierungsbaum durchgehen. ** ** **
⑴ Bibliothek importieren
#Klasse zum Erstellen eines Entscheidungsbaummodells
from sklearn.tree import DecisionTreeClassifier
#Modul basierend auf dem Entscheidungsbaummodell
from sklearn import tree
#Datensatzpaket für maschinelles Lernen
from sklearn import datasets
#Dienstprogramm zum Aufteilen von Daten
from sklearn.model_selection import train_test_split
#Modul zum Anzeigen von Bildern in Notebook
from IPython.display import Image
#Modul zur Visualisierung des Entscheidungsbaummodells
import pydotplus
⑵ Datenerfassung und Lesen
iris = datasets.load_iris()
print(iris)
- Es ist ein sehr berühmter Datensatz, aber er scheint neu zu sein, aber es ist ein Datensatz, in dem 4 Merkmalsgrößen gespeichert sind, die die Länge und Breite von "Blütenblättern" und "Gaku" von 3 Arten von Iris messen.
- Die drei Typen sind Kategoriedaten von Setosa, Versicolour und Virginica mit 50 Proben für jeden Typ und insgesamt 150 Proben.
- Klicken Sie hier für die offizielle Erklärung von scikit-learn unter https://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html
|
Variablennamen |
Bedeutung |
Hinweis |
Datentyp |
1 |
sepal length |
Die Länge des Stückes |
Kontinuierliche Menge(cm) |
float64 |
2 |
sepal width |
Breite des Stückes |
Kontinuierliche Menge(cm) |
float64 |
3 |
petal length |
Blütenblattlänge |
Kontinuierliche Menge(cm) |
float64 |
4 |
petal width |
Blütenblattbreite |
Kontinuierliche Menge(cm) |
float64 |
5 |
species |
Art |
Setosa=1, Versicolour=2, Virginica=3 |
int64 |
- Der Inhalt des Iris-Datensatzes besteht aus fünf Teilen: dem Etikett und den Daten der erklärenden Variablen (Merkmalsmenge), dem Etikett und den Daten der Zielvariablen (Typ) sowie dem Umriss der Daten.
- Überprüfen Sie für alle Fälle, wie die Daten gespeichert sind.
#Erläuterung der Variablenbezeichnung
print(iris.feature_names)
#Erklärende variable Form
print(iris.data.shape)
#Zeigen Sie die ersten 5 Zeilen der erklärenden Variablen an
iris.data[0:5, :]
- Insgesamt 150 Proben mit 4 Messwerten als erklärende Variablen.
- Als nächstes werden die Zielvariablen als kategoriale Variablen mit drei Typen [0, 1, 2] gespeichert.
#Objektive Variablenbezeichnung
print(iris.target_names)
#Form der Zielvariablen
print(iris.target.shape)
#Zielvariable anzeigen
iris.target
(3) Datenvorverarbeitung
#Speichern Sie erklärende Variablen bzw. objektive Variablen
X = iris.data
y = iris.target
#Für Training und Test getrennt
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
- Sofern Sie kein bestimmtes Zuordnungsverhältnis angeben, wird es zufällig mit einem Verhältnis von 75% für das Training und 25% für das Testen standardmäßig aufgeteilt.
- Durch Angabe von "random_state = 0" im Argument wird der erste Teilungszustand reproduziert, unabhängig davon, wie oft die Teilung wiederholt wird.
⑷ Modellkonstruktion und Bewertung des Entscheidungsbaums
#Initialisieren Sie die Klasse, die das Entscheidungsbaummodell erstellt
clf = DecisionTreeClassifier(criterion='gini', max_depth=3, random_state=0)
#Generieren Sie ein Entscheidungsbaummodell
model = clf.fit(X_train, y_train)
#Berechnen Sie die richtige Antwortrate für jedes Training und jeden Test
print('Richtige Antwortrate(train):{:.3f}'.format(model.score(X_train, y_train)))
print('Richtige Antwortrate(test):{:.3f}'.format(model.score(X_test, y_test)))
- Die Grundlage für den Prozess der Erstellung des Entscheidungsbaums ist der ** unreine ** Index der Kategorieidentifikation. Wenn es 0,0 ist, bedeutet dies, dass lediglich klassifiziert wird, wie viel Verunreinigungen gemischt werden.
- Deshalb heißt das Argument "Kriterium =" Gini ", was explizit ** Gini-Verunreinigungen ** spezifiziert. (Die Standardeinstellung ist Gini Impure, daher muss sie nicht beschrieben werden.)
- Außerdem wird ** Tiefe der bedingten Verzweigungshierarchie ** in diesem Beispiel als "max_depth = 3" angegeben, höchstens bis zu 3 Ebenen. Das Erhöhen der Anzahl von Ebenen, um einen "tiefen Baum" zu erstellen, erhöht die Genauigkeitsrate, kann aber auch das Risiko von Überlernen erhöhen.
- Berechnen Sie für das generierte Modell die richtige Antwortrate für jedes Training und testen Sie mit der Funktion
score ()
. Die Trainingsdaten sind mit 0,982 sehr hoch und die Testdaten liegen leicht darunter, aber beide liegen nahe bei 1,0 und hoch.
⑸ Zeichnen eines Baumdiagramms
- Das Zeichnen des Diagramms erfolgt in den folgenden 3 Schritten.
- ** Entscheidungsbaummodell in DOT-Daten konvertieren **
- ** Zeichnen Sie ein Diagramm aus DOT-Daten **
- ** In
png
konvertieren und im Notebook anzeigen **
#Konvertieren Sie das Entscheidungsbaummodell in DOT-Daten
dot_data = tree.export_graphviz(model, #Geben Sie das Entscheidungsbaummodell an
out_file = None, #Gibt an, dass anstelle einer Ausgabedatei eine Zeichenfolge zurückgegeben werden soll
feature_names = iris.feature_names, #Geben Sie den Anzeigenamen des Funktionsbetrags an
class_names = iris.target_names, #Geben Sie den Anzeigenamen der Klassifizierung an
filled = True) #Farbknoten in der Mehrheitsklasse
#Zeichnen Sie ein Diagramm
graph = pydotplus.graph_from_dot_data(dot_data)
#Diagramm anzeigen
Image(graph.create_png())
- ** DOT-Daten ** sind Daten, die in der DOT-Sprache geschrieben sind. ** DOT-Sprache ** ist eine Sprache zur Beschreibung von Graphstrukturen (Netzwerkstrukturen, die aus Knoten und Kanten bestehen). Ein Knoten bedeutet einen Knoten (□) und eine Kante bedeutet eine Verbindungslinie (↓).
- Ein Werkzeug zum Zeichnen solcher Graphstrukturen ist ** Graphviz **. Die Funktion export_graphviz (), die zum Baummodul von sklearn gehört, konvertiert das Entscheidungsbaummodell in das DOT-Format. Zu diesem Zeitpunkt werden detaillierte Spezifikationen wie Zeichnungsspezifikationen und Anzeigename als Argumente angegeben.
- Zeichnen Sie als Nächstes ein Diagramm mit der Funktion
graph_from_dot_data ()
des Moduls ** pydotplus ** für die Behandlung der DOT-Sprache in Python.
- Um das Diagramm in Notebook anzuzeigen, konvertiere ich das Diagramm in "png" und führe die "Image ()" - Methode des ** IPython.display ** -Moduls aus.
So lesen Sie ein Baumdiagramm
- Der Entscheidungsbaum wird von oben angezeigt. Zunächst beginnen hier die gültigen Klassifizierungsbedingungen ➀.
- Der bedingte Ausdruck "Blütenblattbreite (cm) <= 0,8" bedeutet, dass die Breite der Blütenblätter 0,8 oder weniger beträgt. Folgen Sie gegebenenfalls dem Pfeil "Wahr", andernfalls dem Pfeil "Falsch".
- Knoten, die über den "True" -Pfeil kommen, zeigen eine ** Gini-Unreinheit von 0,0 **, und alle 37 Proben werden ausschließlich als Setosa-Arten klassifiziert. Dies ist das erste Ziel.
- Andererseits verzweigt sich der Knoten auf der Seite "Falsch" je nach der neuen Klassifizierungsbedingung ➁ weiter nach Wahr oder Falsch. Auf diese Weise gehen wir beim Verzweigen die Hierarchie durch und zielen auf das Ziel ** ab, bei dem die Reinheit von Gini 0,0 beträgt.
Ergänzung
- Wie oben erwähnt, führen Sie die folgenden Schritte aus, um das Dendrogramm auf den lokalen PC zu importieren, da es in Google Colaboratory implementiert ist.
#In PNG-Datei exportieren
graph.write_png("iris.png ")
#Download von Google Colaboratory
from google.colab import files
files.download('iris.png')