Classifier avec des arbres de décision

en langage python

1- Tracer un premier arbre de décision

Tracer un arbre de décision à partir de données au format data.frame.

Le coefficient de gini permet de voir ici si les données sont réparties de façon équitable (on se rapproche de 0) ou hétérogène (on se rapproche de 1).

import seaborn as sns

# Charger le jeu de données iris

iris = sns.load_dataset('iris')

# Définir les données et les catégories déjà existantes

from sklearn.model_selection import train_test_split

X = iris.iloc[:,0:4]

Y = iris.iloc[:,4:5]

# Définir un jeu de données pour entraînement (train) et un autre pour tester l'efficacité (test)

X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=42)

# Créer le modèle d'arbre

from sklearn import tree.DecisionTreeClassifier

from dtreeviz.trees import *

clf = tree.DecisionTreeClassifier(max_depth=3, random_state=42, min_samples_leaf=3)

# min_samples_leaf : nombre minimum d'individus par branche

clf.fit(X_train, y_train)

# Afficher


tree.plot_tree(clf,

feature_names = list(X.columns), # Noms des colonnes

class_names=list(np.unique(Y)),# Catégories

rounded=True,

filled = True);

import matplotlib.pyplot as plt

plt.show()

# Afficher l'efficacité de l'arbre

clf.score(X_test, y_test)


2- Tracer un arbre de décision plus élaboré

Un arbre qui permet de voir l'efficacité d'un arbre de décision.

# Importation des données

import seaborn as sns

iris = sns.load_dataset('iris')

# Il est nécessaire de définir les variables numériques (données) et la variable de catégorie

from sklearn.preprocessing import LabelEncoder

label_encoder = LabelEncoder()

label_encoder.fit(iris.species)

iris['species'] = label_encoder.transform(iris.species)

# Créer l'arbre de décision

from sklearn import tree

classifier = tree.DecisionTreeClassifier()

classifier.fit(iris.iloc[:,:3], iris.species)

# Tracer : ATTENTION, cela nécessite graphviz qui peut poser des problèmes à l'installation (cf. ci-dessous).

from dtreeviz.trees import *

viz = dtreeviz(classifier,

iris.iloc[:,:3],

iris.species,

target_name='Espèes',

feature_names=iris.columns[0:3],

class_names=list(label_encoder.classes_)

)

import matplotlib.pyplot as plt

viz.view()

viz.save("decision_tree.svg")

import os as os

print("Current Working Directory " , os.getcwd())

En cas de problème avec graphviz, une procédure qui peut aider à le faire marcher :

1.- Installer graphiviz

Install windows package from: https://graphviz.gitlab.io/_pages/Download/Download_windows.html

2.- Installer la version python de graphviz - à taper dans la console windows :

pip install graphviz

3.- Définir les liens entre python et graphviz

import os

os.environ["PATH"] += os.pathsep + 'C:/Program Files/Graphviz/bin/' # Remplacer l'adresse de bin par celle sur votre PC