Dans cet exercice nous allons apprendre à manipuler la classe DecisionTreeClassifier du module tree qui permet de réaliser de la classification par la méthode des arbres de décision.
Nous travaillerons pour cela sur le jeu de données Iris que l'on peut charger à partir de scikit-learn et dont on trouve un descriptif sur Wikipedia.
Nous verrons comment construire un classifieur (l'appliquer pour obtenir des prédictions) et visualiser l'arbre de décision correspondant.
# generic imports #
#-----------------#
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
iris = load_iris()
X = iris.data
y = iris.target
class_ids = iris.target_names
print('the Iris dataset is made of %d instances and %d features. There are %d classes : %s'
% (X.shape[0], X.shape[1], len(class_ids), " ; ".join(class_ids)))
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify = y, test_size = 0.2)
tree_clf = DecisionTreeClassifier(max_depth=3)
tree_clf.fit(X_train,y_train)
preds_test = tree_clf.predict(X_test)
preds_train = tree_clf.predict(X_train)
from sklearn.metrics import confusion_matrix
print("*** training data : confusion matrix ***")
print(confusion_matrix(y_train, preds_train))
print("*** test data: confusion matrix ***")
print(confusion_matrix(y_test,preds_test))
# re-fit on entire dataset
tree_clf.fit(X,y)
# show tree
import graphviz
dot_data = tree.export_graphviz(tree_clf, out_file=None)
graph = graphviz.Source(dot_data)
graph.render("iris")