[PYTHON] La décision de scikit-learn Comment visualiser un modèle en bois

Aperçu

La décision de scikit-learn Ceci est une entrée sur la façon de visualiser un modèle d'un système arborescent. Je l'utilise beaucoup ces jours-ci, donc je vais l'écrire à la place d'un mémorandum et de mon aide-mémoire. Dans cette entrée, l'exemple de code est généré avec la version Windows de Python 3.5.2.

Préparer l'environnement

Les composants nécessaires pour visualiser l'arbre de décision sont:

La méthode d'installation de Graphviz diffère selon le système d'exploitation. Je pense que scikit-learn est souvent inclus par défaut. D'autre part, pydotplus devra être installé avec pip.

Installation de Graphviz (environnement Windows 7)

Graphviz est l'acronyme de Graph Visualization Software. C'est une bibliothèque qui transforme le contenu écrit en langage DOT en images. Veuillez lire ici pour plus de détails.  http://www.graphviz.org/Documentation.php

La page de téléchargement est la suivante.   --Version Windows  http://www.graphviz.org/Download_windows.php   --RHEL, version CentOS  http://www.graphviz.org/Download_linux_rhel.php   --versionubuntu  http://www.graphviz.org/Download_linux_ubuntu.php   --Version source  http://www.graphviz.org/Download_source.php     Puisqu'il sera installé dans un environnement Windows, téléchargez le fichier MSI à partir de la page suivante et exécutez-le.  http://www.graphviz.org/Download_windows.php

Lorsque vous exécutez le fichier MSI téléchargé, l'écran suivant s'affiche en premier. Cliquez sur Suivant pour continuer avec l'écran. install_01.png

La version au moment de la rédaction de l'entrée (2017/09/03) est 2.38. Ici, continuez avec "Tout le monde" sélectionné pour que tous les utilisateurs puissent l'utiliser. install_02.png

Ce message vous informe que vous êtes prêt à installer. Appuyez sur "Suivant" pour continuer. install_03.png

Au fur et à mesure que l'installation des composants progresse, l'indicateur de jauge se remplit. Cliquez sur Suivant lorsque les indicateurs sont complètement remplis. install_04.png

L'installation de Graphviz s'est terminée avec succès. Cliquez sur Fermer pour fermer la fenêtre. install_05.png

Ensuite, passez à l'installation de Pydotplus.

pydotplus   Un module python pour travailler avec le langage DOt mentionné précédemment. Cette fois, c'est un environnement Windows, nous allons donc travailler avec Anaconda Prompt.

launch_anaconda_prompt.png

Après avoir démarré Anaconda Prompt, exécutez la commande "pip install pydotplus".

(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

En cas de succès, la sortie ci-dessus sera sortie. Si aucune erreur ne se produit et qu'elle n'est pas interrompue, le travail d'installation de pydotplus est terminé.

Définition des variables d'environnement

Modifiez ensuite les variables d'environnement pour que pydotplus connaisse le chemin d'installation de Graphviz. Tout d'abord, localisez le répertoire "bin" à l'emplacement où graphviz est installé. Vous pouvez le vérifier en regardant les propriétés de "gvedit.exe" dans la liste du menu démarrer. install_path.png

Ajoutez ce chemin ("C: \ Program Files (x86) \ Graphviz2.38 / bin") au chemin de la variable d'environnement. setup_env.png

Après avoir modifié le chemin, redémarrez l'EDI Python (tel que PyCharm).

Exemple de code pour la visualisation du modèle de bois de décision

J'ai créé un modèle RandomForest en utilisant le jeu de données iris familier, j'ai sorti un modèle d'arbre de décision de ce modèle et je l'ai visualisé (= sortie sous forme d'image png). L'exemple de code est ci-dessous. L'instruction d'impression pour le débogage pour comprendre le traitement interne est laissée telle quelle.

u"""
Visualisez le modèle d'arbre de décision.
Visualisez un modèle d'arbre de décision à l'aide de Graphviz.
Elle peut être appliquée non seulement aux arbres de décision, mais également aux modèles de structure arborescente tels que les forêts aléatoires.

"""

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

#Packages nécessaires pour visualiser l'arborescence du modèle
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))

#Séparez les données d'entraînement et les données de test

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("Précision de la prédiction")
print(clf.score(df_test, label_test))

#Visualisez l'un des arbres pour essayer
estimators = clf.estimators_
file_name = "./tree_visualization.png "
dot_data = tree.export_graphviz(estimators[0], #Spécifiez un objet d'arbre de décision
                                out_file=None, #Étant donné que les données en langage à points sont transmises à Graphviz sans passer par un fichier, aucun
                                filled=True, #Lorsqu'il est défini sur True, il affichera en couleur le nœud le plus classé au moment de la création de branches.
                                rounded=True, #Lorsqu'il est défini sur True, les coins du nœud sont arrondis.
                                feature_names=features, #Si cela n'est pas spécifié, le nom du montant de la fonction ne sera pas affiché sur le graphique.
                                class_names=iris.target_names, #Si cela n'est pas spécifié, le nom de la classification ne sera pas affiché sur le graphique.
                                special_characters=True #Être capable de gérer les caractères spéciaux
                                )
graph = pdp.graph_from_dot_data(dot_data)
graph.write_png(file_name)

Jetons un coup d'œil à chaque partie. Voici la partie qui lit le jeu de données iris et prépare les données d'entraînement. Le nom de la fonction est défini dans iris.feature_names. La variable objectif (= type d'iris) est définie dans iris.target. Cependant, iris.target est un nombre et n'est pas facile à lire pour les humains. Par conséquent, en utilisant la notation de nom de genre dans iris.target_names, la variable objective qui est lisible par l'homme (= human-redable) est définie dans df ['species'].

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))

Vient ensuite le code de la partie qui crée le modèle RandomForest. Le df qui stocke les données d'entraînement contient également la variable objectif. Il est nécessaire de séparer la partie de quantité de fonction et la variable d'objectif et de les saisir dans le modèle. Par conséquent, définissez la partie caractéristiques sur les fonctions et la variable objectif sur l'étiquette. Ensuite, train_test_split divise les données en données d'entraînement et de test de modèle. L'objet RandomForest est défini dans clf. Le nombre d'arbres de décision à utiliser est de 150. (Argument: n_estimator = 150) Après cela, spécifiez les données d'entraînement et entraînez le modèle avec la méthode 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)

Et enfin la visualisation. L'objet RandomForest a une propriété appelée estimators_. estimators_ est une liste d'objets d'arbre de décision. Ici, nous allons visualiser le premier objet de l'arbre de décision (estimateurs [0]) sous forme d'échantillon. Sortie sous forme de fichier image png "tree_visualization.png ". tree.export_graphviz () effectue le processus de visualisation. L'explication de l'argument est décrite dans le commentaire du code. ** Veuillez noter que si vous ne spécifiez pas correctement l'argument, ni le nom de la quantité de caractéristiques ni le nom de la classification ne seront affichés. ** **

#Visualisez l'un des arbres pour essayer
estimators = clf.estimators_
file_name = "./tree_visualization.png "
dot_data = tree.export_graphviz(estimators[0], #Spécifiez un objet d'arbre de décision
                                out_file=None, #Étant donné que les données en langage à points sont transmises à Graphviz sans passer par un fichier, aucun
                                filled=True, #Lorsqu'il est défini sur True, il affichera en couleur le nœud le plus classé au moment de la création de branches.
                                rounded=True, #Lorsqu'il est défini sur True, les coins du nœud sont arrondis.
                                feature_names=features, #Si cela n'est pas spécifié, le nom de la quantité de fonction ne sera pas affiché sur le graphique.
                                class_names=iris.target_names, #Si cela n'est pas spécifié, le nom de la classification ne sera pas affiché sur le graphique.
                                special_characters=True #Être capable de gérer les caractères spéciaux
                                )
graph = pdp.graph_from_dot_data(dot_data)
graph.write_png(file_name)

Ensuite, la visualisation suivante de l'arbre de décision sera obtenue sous forme d'image png.

tree_visualization.png

Recommended Posts

La décision de scikit-learn Comment visualiser un modèle en bois
Visualisez les résultats des arbres de décision réalisés avec Python scikit-learn
Python pratique 100 coups J'ai essayé de visualiser l'arbre de décision du chapitre 5 en utilisant graphviz
Comment vérifier la version de Django
[NNabla] Comment ajouter une couche de quantification à la couche intermédiaire d'un modèle entraîné
Comment trouver la zone du diagramme de Boronoi
Comment connaître le numéro de port du service xinetd
Comment obtenir le nombre de chiffres en Python
[Blender] Comment définir dynamiquement les sélections EnumProperty
J'ai essayé de visualiser les informations spacha de VTuber
[Python] Résumé de la façon de spécifier la couleur de la figure
Comment utiliser le modèle appris dans Lobe en Python
Comment frapper le document de Magic Function (Line Magic)
Comment accéder à la variable globale du module importé
[Selenium] Comment spécifier le chemin relatif de chromedriver?
[Python] Méthode de calcul de la formule d'approximation de la même section 0 qu'Excel [scikit-learn] Mémo
Comment utiliser le générateur
Visualisez la trajectoire de Hayabusa 2
Comment utiliser le décorateur
Comment augmenter l'axe
Comment démarrer la première projection
Comment augmenter la vitesse de traitement de l'acquisition de la position des sommets
[Ubuntu] Comment supprimer tout le contenu du répertoire
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
Comment tester les attributs ajoutés par add_request_method de pyramid
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
J'ai fait une fonction pour vérifier le modèle de DCGAN
Comment calculer la quantité de calcul appris de ABC134-D
(Note) Comment passer le chemin de votre propre module
Comment résumer les résultats de FreeSurfer ~ aparc, aseg, wmparc ~
Comment exécuter automatiquement la fonction d'exportation de GCP Datastore
Comment augmenter le nombre d'images de jeux de données d'apprentissage automatique
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
Comment voir le contenu du fichier ipynb du notebook Jupyter
Comment trouver le coefficient de mise à l'échelle d'une ondelette bipolaire
Comment connecter le contenu de la liste dans une chaîne de caractères
Comment calculer le coefficient d'autocorrélation
Visualisez verticalement la quantité correspondant au sommet de networkx à l'aide d'Axes3D
Comment utiliser la fonction zip
[Pytorch] Je souhaite attribuer manuellement les paramètres d'entraînement du modèle
Comment déterminer l'existence d'un élément sélénium en Python
Comment modifier le niveau de journalisation d'Azure SDK pour Python
Comment implémenter du code Java en arrière-plan de Red Hat (Linux ONE)
Créer un arbre déterminé avec scikit-learn
Comment changer la couleur du seul bouton pressé avec Tkinter
Comment obtenir l'ID de Type2Tag NXP NTAG213 avec nfcpy
[EC2] Comment installer Chrome et le contenu de chaque commande
Créez le thème de Pythonista 3 comme Monokai (comment créer votre propre thème)
[Python] Comment obtenir le premier et le dernier jour du mois
Résumé de l'utilisation de pyenv-virtualenv
Comment lire l'ensemble de données SNLI
Comment obtenir la version Python
Apprentissage automatique ③ Résumé de l'arbre de décision
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Simulation Python du modèle épidémique (modèle Kermack-McKendrick)
[TensorFlow 2] Comment vérifier le contenu de Tensor en mode graphique
[Linux] Comment désactiver la mise à jour automatique du fichier /etc/resolv.conf (AmazonLinux2)
Comment trouver l'adresse mémoire de la valeur de la trame de données Pandas