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
Allez plus loin sur ce site (anglophone)
https://www.kdnuggets.com/2021/03/beautiful-decision-tree-visualizations-dtreeviz.html