Entscheidung von scikit-learn Dies ist ein Eintrag zur Visualisierung eines Modells eines Baumsystems. Ich benutze es heutzutage oft, also schreibe ich es anstelle eines Memorandums und meines Spickzettel. In diesem Eintrag wird der Beispielcode mit der Windows-Version von Python 3.5.2 erstellt.
Die zur Visualisierung des Entscheidungsbaums erforderlichen Komponenten sind:
Die Installationsmethode von Graphviz unterscheidet sich je nach Betriebssystem. Ich denke, Scikit-Learn ist oft standardmäßig enthalten. Auf der anderen Seite muss pydotplus mit pip installiert werden.
Graphviz steht für Graph Visualization Software. Es ist eine Bibliothek, die den in DOT-Sprache geschriebenen Inhalt in Bilder umwandelt. Bitte lesen Sie hier für Details. http://www.graphviz.org/Documentation.php
Die Download-Seite ist wie folgt. --Fensterversion http://www.graphviz.org/Download_windows.php --RHEL, CentOS-Version http://www.graphviz.org/Download_linux_rhel.php --ubuntu Version http://www.graphviz.org/Download_linux_ubuntu.php
Wenn Sie die heruntergeladene MSI-Datei ausführen, wird zuerst der folgende Bildschirm angezeigt. Klicken Sie auf Weiter, um mit dem Bildschirm fortzufahren.
Die Version zum Zeitpunkt des Schreibens (2017/09/03) ist 2.38. Fahren Sie hier mit "Jeder" fort, damit alle Benutzer es verwenden können.
Diese Meldung informiert Sie darüber, dass Sie zur Installation bereit sind. Drücken Sie "Weiter", um fortzufahren.
Mit fortschreitender Installation der Komponenten füllt sich die Anzeige. Klicken Sie auf Weiter, wenn die Indikatoren vollständig ausgefüllt sind.
Die Installation von Graphviz wurde erfolgreich abgeschlossen. Klicken Sie auf Schließen, um das Fenster zu schließen.
Fahren Sie dann mit der Installation von Pydotplus fort.
pydotplus Ein Python-Modul zum Arbeiten mit der zuvor erwähnten DOt-Sprache. Diesmal handelt es sich um eine Windows-Umgebung, daher arbeiten wir mit Anaconda Prompt.
Führen Sie nach dem Starten von Anaconda Prompt den Befehl "pip install pydotplus" aus.
(C:\Program Files\Anaconda3) C:\Users\usr********>pip install pydotplus
Collecting pydotplus
Downloading pydotplus-2.0.2.tar.gz (278kB)
100% |################################| 286kB 860kB/s
Requirement already satisfied: pyparsing>=2.0.1 in c:\program files\anaconda3\li
b\site-packages (from pydotplus)
Building wheels for collected packages: pydotplus
Running setup.py bdist_wheel for pydotplus ... done
Stored in directory: C:\Users\usr********\AppData\Local\pip\Cache\wheels\43\31\
48\e1d60511537b50a8ec28b130566d2fbbe4ac302b0def4baa48
Successfully built pydotplus
Installing collected packages: pydotplus
Successfully installed pydotplus-2.0.2
Bei Erfolg wird die obige Ausgabe ausgegeben. Wenn kein Fehler auftritt und dieser nicht unterbrochen wird, sind die Installationsarbeiten von pydotplus abgeschlossen.
Bearbeiten Sie dann die Umgebungsvariablen, um pydotplus auf den Graphviz-Installationspfad aufmerksam zu machen. Suchen Sie zunächst das Verzeichnis "bin" an dem Speicherort, an dem graphviz installiert ist. Sie können dies überprüfen, indem Sie sich die Eigenschaften von "gvedit.exe" in der Liste des Startmenüs ansehen.
Fügen Sie diesen Pfad ("C: \ Programme (x86) \ Graphviz2.38 / bin") zum Pfad der Umgebungsvariablen hinzu.
Starten Sie nach dem Ändern des Pfads die Python-IDE (z. B. PyCharm) neu.
Ich habe ein RandomForest-Modell unter Verwendung des bekannten Iris-Datasets erstellt, ein Entscheidungsbaummodell aus diesem Modell herausgenommen und es visualisiert (= Ausgabe als PNG-Bild). Der Beispielcode ist unten. Die print-Anweisung zum Debuggen, um die interne Verarbeitung zu verstehen, bleibt unverändert.
u"""
Visualisieren Sie das Entscheidungsbaummodell.
Visualisieren Sie das Modell des Entscheidungsbaums mit Graphviz.
Es kann nicht nur auf Entscheidungsbäume angewendet werden, sondern auch auf Baumstrukturmodelle wie zufällige Wälder.
"""
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.cross_validation import train_test_split
from sklearn.model_selection import cross_val_score
#Pakete, die zur Visualisierung der Baumstruktur des Modells benötigt werden
from sklearn import tree
import pydotplus as pdp
import pandas as pd
import numpy as np
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
print(df.head(5))
print(iris.target)
print(iris.target_names)
df['species'] = pd.Categorical.from_codes(iris.target, iris.target_names)
print(df.head(5))
#Trainingsdaten und Testdaten trennen
features = df.columns[:4]
label = df["species"]
print(features)
print(label)
print(df[features].head(5))
df_train, df_test, label_train, label_test = train_test_split(df[features], label)
clf = RandomForestClassifier(n_estimators=150)
clf.fit(df_train, label_train)
print("========================================================")
print("Vorhersagegenauigkeit")
print(clf.score(df_test, label_test))
#Stellen Sie sich einen der Bäume vor, um es zu versuchen
estimators = clf.estimators_
file_name = "./tree_visualization.png "
dot_data = tree.export_graphviz(estimators[0], #Geben Sie ein Entscheidungsbaumobjekt an
out_file=None, #Da Punktsprachdaten an Graphviz übergeben werden, ohne eine Datei zu durchlaufen, ist Keine vorhanden
filled=True, #Wenn True festgelegt ist, wird in Farbe angezeigt, welcher Knoten zum Zeitpunkt der Verzweigung am meisten klassifiziert wurde.
rounded=True, #Bei der Einstellung True werden die Ecken des Knotens rund gezeichnet.
feature_names=features, #Wenn dies nicht angegeben ist, wird der Name des Funktionsbetrags nicht im Diagramm angezeigt.
class_names=iris.target_names, #Wenn dies nicht angegeben ist, wird der Klassifizierungsname nicht in der Tabelle angezeigt.
special_characters=True #Mit Sonderzeichen umgehen können
)
graph = pdp.graph_from_dot_data(dot_data)
graph.write_png(file_name)
Schauen wir uns jeden Teil an. Der folgende Teil liest den Iris-Datensatz und bereitet die Trainingsdaten vor. Der Funktionsname wird in iris.feature_names festgelegt. Die Zielvariable (= Typ der Iris) wird in iris.target festgelegt. Iris.target ist jedoch eine Zahl und für Menschen unfreundlich zu lesen. Daher wird unter Verwendung der Artnamen-Notation in iris.target_names die vom Menschen lesbare (= vom Menschen redigierbare) Zielvariable in df ['species'] festgelegt.
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
print(df.head(5))
print(iris.target)
print(iris.target_names)
df['species'] = pd.Categorical.from_codes(iris.target, iris.target_names)
print(df.head(5))
Als nächstes folgt der Code für den Teil, der das RandomForest-Modell erstellt. Der df, der die Trainingsdaten speichert, enthält auch die Zielvariable. Es ist erforderlich, den Merkmalsmengenanteil und die Zielvariable zu trennen und in das Modell einzugeben. Setzen Sie also den Feature-Teil auf Features und die Zielvariable auf Beschriftung. Anschließend unterteilt train_test_split die Daten in Modelltrainings- und Testdaten. clf wird auf das RandomForest-Objekt gesetzt. Die Anzahl der zu verwendenden Entscheidungsbäume beträgt 150. (Argument: n_estimator = 150) Geben Sie anschließend die Trainingsdaten an und trainieren Sie das Modell mit der Methode fit ().
features = df.columns[:4]
label = df["species"]
print(features)
print(label)
print(df[features].head(5))
df_train, df_test, label_train, label_test = train_test_split(df[features], label)
clf = RandomForestClassifier(n_estimators=150)
clf.fit(df_train, label_train)
Und schließlich die Visualisierung. Das RandomForest-Objekt hat eine Eigenschaft namens Estimators_. Estimators_ ist eine Liste von Entscheidungsbaumobjekten. Hier visualisieren wir das erste Entscheidungsbaumobjekt (Schätzer [0]) als Beispiel. Ausgabe als PNG-Bilddatei "tree_visualization.png ". tree.export_graphviz () führt den Visualisierungsprozess durch. Die Erklärung des Arguments wird im Kommentar des Codes beschrieben. ** Bitte beachten Sie, dass, wenn Sie das Argument nicht richtig angeben, weder der Name der Merkmalsmenge noch der Name der Klassifizierung angezeigt werden. ** ** **
#Stellen Sie sich einen der Bäume vor, um es zu versuchen
estimators = clf.estimators_
file_name = "./tree_visualization.png "
dot_data = tree.export_graphviz(estimators[0], #Geben Sie ein Entscheidungsbaumobjekt an
out_file=None, #Da Punktsprachdaten an Graphviz übergeben werden, ohne eine Datei zu durchlaufen, ist Keine vorhanden
filled=True, #Wenn True festgelegt ist, wird in Farbe angezeigt, welcher Knoten zum Zeitpunkt der Verzweigung am meisten klassifiziert wurde.
rounded=True, #Bei der Einstellung True werden die Ecken des Knotens rund gezeichnet.
feature_names=features, #Wenn dies nicht angegeben ist, wird der Name des Funktionsbetrags nicht im Diagramm angezeigt.
class_names=iris.target_names, #Wenn dies nicht angegeben ist, wird der Klassifizierungsname nicht in der Tabelle angezeigt.
special_characters=True #Mit Sonderzeichen umgehen können
)
graph = pdp.graph_from_dot_data(dot_data)
graph.write_png(file_name)
Dann wird die folgende Visualisierung des Entscheidungsbaums als PNG-Bild erhalten.
Recommended Posts