[PYTHON] Die Entscheidung von scikit-learn Wie man ein Holzmodell visualisiert

Überblick

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.

Umwelt vorbereiten

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-Installation (Windows 7-Umgebung)

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. install_01.png

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. install_02.png

Diese Meldung informiert Sie darüber, dass Sie zur Installation bereit sind. Drücken Sie "Weiter", um fortzufahren. install_03.png

Mit fortschreitender Installation der Komponenten füllt sich die Anzeige. Klicken Sie auf Weiter, wenn die Indikatoren vollständig ausgefüllt sind. install_04.png

Die Installation von Graphviz wurde erfolgreich abgeschlossen. Klicken Sie auf Schließen, um das Fenster zu schließen. install_05.png

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.

launch_anaconda_prompt.png

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.

Umgebungsvariablen einstellen

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. install_path.png

Fügen Sie diesen Pfad ("C: \ Programme (x86) \ Graphviz2.38 / bin") zum Pfad der Umgebungsvariablen hinzu. setup_env.png

Starten Sie nach dem Ändern des Pfads die Python-IDE (z. B. PyCharm) neu.

Beispielcode zur Visualisierung des Entscheidungsholzmodells

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.

tree_visualization.png

Recommended Posts

Die Entscheidung von scikit-learn Wie man ein Holzmodell visualisiert
Visualisieren Sie die Ergebnisse von Entscheidungsbäumen, die mit Python scikit-learn erstellt wurden
Python-Übung 100 Schläge Ich habe versucht, den Entscheidungsbaum von Kapitel 5 mit graphviz zu visualisieren
So überprüfen Sie die Version von Django
[NNabla] Hinzufügen einer Quantisierungsschicht zur mittleren Schicht eines trainierten Modells
So finden Sie den Bereich des Boronoi-Diagramms
Wie man die Portnummer des xinetd-Dienstes kennt
So ermitteln Sie die Anzahl der Stellen in Python
[Blender] So legen Sie die Auswahlelemente von EnumProperty dynamisch fest
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
[Python] Zusammenfassung, wie die Farbe der Figur angegeben wird
Verwendung des in Lobe in Python erlernten Modells
Wie man das Dokument der magischen Funktion (Linienmagie) trifft
So greifen Sie auf die globale Variable des importierten Moduls zu
[Selen] Wie wird der relative Pfad des Chromedriver angegeben?
[Python] Berechnungsmethode der Approximationsformel von Abschnitt 0 wie Excel [scikit-learn] Memo
Verwendung des Generators
Visualisieren Sie die Flugbahn von Hayabusa 2
Wie benutzt man den Dekorateur?
So erhöhen Sie die Achse
So starten Sie die erste Projektion
So erhöhen Sie die Verarbeitungsgeschwindigkeit der Erfassung der Scheitelpunktposition
[Ubuntu] So löschen Sie den gesamten Inhalt des Verzeichnisses
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
So testen Sie die Attribute, die durch add_request_method of pyramid hinzugefügt wurden
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
Berechnen des aus ABC134-D gelernten Rechenaufwands
(Hinweis) So übergeben Sie den Pfad Ihres eigenen Moduls
Wie man die Ergebnisse von FreeSurfer ~ aparc, aseg, wmparc ~ zusammenfasst
So führen Sie die Exportfunktion des GCP-Datenspeichers automatisch aus
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
So sehen Sie den Inhalt der ipynb-Datei des Jupyter-Notizbuchs
So ermitteln Sie den Skalierungskoeffizienten eines bipolaren Wavelets
So verbinden Sie den Inhalt der Liste mit einer Zeichenfolge
Wie berechnet man den Autokorrelationskoeffizienten?
Visualisieren Sie mit Axes3D vertikal den Betrag, der dem Scheitelpunkt von networkx entspricht
Verwendung der Zip-Funktion
[Pytorch] Ich möchte die Trainingsparameter des Modells manuell zuweisen
So bestimmen Sie die Existenz eines Selenelements in Python
So ändern Sie die Protokollstufe von Azure SDK für Python
So implementieren Sie Java-Code im Hintergrund von Red Hat (Linux ONE)
Erstellen eines bestimmten Baums mit Scikit-Learn
So ändern Sie die Farbe nur der mit Tkinter gedrückten Taste
So erhalten Sie die ID von Type2Tag NXP NTAG213 mit nfcpy
[EC2] So installieren Sie Chrome und den Inhalt jedes Befehls
Erstellen Sie das Thema von Pythonista 3 wie Monokai (wie Sie Ihr eigenes Thema erstellen)
[Python] So erhalten Sie den ersten und den letzten Tag des Monats
Zusammenfassung der Verwendung von pyenv-virtualenv
Lesen des SNLI-Datensatzes
So erhalten Sie die Python-Version
Maschinelles Lernen ③ Zusammenfassung des Entscheidungsbaums
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
Python-Simulation des Epidemiemodells (Kermack-McKendrick-Modell)
[TensorFlow 2] So überprüfen Sie den Inhalt von Tensor im Diagrammmodus
[Linux] Deaktivieren der automatischen Aktualisierung der Datei /etc/resolv.conf (AmazonLinux2)
So ermitteln Sie die Speicheradresse des Pandas-Datenrahmenwerts