L’élagage des arbres de décision est une technique essentielle pour améliorer la performance et la généralisation des modèles d’arbres de décision en machine learning. Dans ce tutoriel, nous allons explorer en détail le post-élagage des arbres de décision en utilisant Python et la bibliothèque Scikit-learn.
Les arbres de décision sont extrêmement polyvalents et performants dans de nombreux cas d’utilisation en machine learning. Cependant, les arbres de décision peuvent facilement surapprendre les données d’entraînement, ce qui signifie qu’ils apprennent à mémoriser les données d’entraînement plutôt que de généraliser à de nouvelles données. C’est là qu’intervient l’élagage des arbres de décision, qui consiste à réduire la complexité de l’arbre pour améliorer sa généralisation.
Le post-élagage est une technique d’élagage qui consiste à construire un arbre de décision complet, puis à le réduire en supprimant des nœuds inutiles tout en maintenant autant que possible la performance du modèle. Cela permet d’éviter le surapprentissage tout en préservant la capacité de l’arbre de décision à généraliser aux nouvelles données.
Commençons par importer les bibliothèques nécessaires :
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.tree import plot_tree
Ensuite, nous allons charger un jeu de données d’exemple. Dans cet exemple, nous allons utiliser le jeu de données iris, qui est un jeu de données classique en machine learning :
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
Ensuite, divisons les données en ensembles de formation et de test :
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Entraînons maintenant un arbre de décision sur les données d’entraînement :
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
Calculons la précision du modèle sur les données de test :
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
Maintenant que nous avons entraîné un arbre de décision sur nos données, nous allons visualiser l’arbre pour mieux comprendre sa structure. Utilisons la fonction plot_tree
de Scikit-learn pour visualiser l’arbre :
import matplotlib.pyplot as plt
plt.figure(figsize=(20,10))
plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)
plt.show()
Maintenant, nous allons passer à l’étape du post-élagage de l’arbre de décision. Scikit-learn prend en charge une méthode de post-élagage appelée "Cost Complexity Pruning" qui optimise un hyperparamètre alpha pour trouver le meilleur compromis entre la complexité de l’arbre et sa performance.
Pour ce faire, nous allons utiliser la classe DecisionTreeClassifier
avec l’argument ccp_alpha
qui contrôle le paramètre alpha. Plus la valeur de ccp_alpha
est élevée, plus l’arbre sera élagué :
clf = DecisionTreeClassifier(ccp_alpha=0.01)
clf.fit(X_train, y_train)
Calculons à nouveau la précision du modèle sur les données de test après le post-élagage :
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy after post-pruning: {accuracy}")
Visualisons à nouveau l’arbre après le post-élagage :
plt.figure(figsize=(20,10))
plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)
plt.show()
En utilisant le post-élagage, nous avons pu réduire la complexité de l’arbre de décision tout en maintenant une performance similaire à celle de l’arbre initial. Cela permet d’éviter le surapprentissage et d’améliorer la capacité de généralisation du modèle.
En conclusion, le post-élagage des arbres de décision est une technique importante en machine learning pour améliorer la performance des modèles d’arbres de décision. En utilisant Python et la bibliothèque Scikit-learn, nous avons pu mettre en œuvre le post-élagage et améliorer la performance de notre modèle d’arbre de décision sur le jeu de données iris. N’hésitez pas à explorer davantage cette technique et à l’appliquer à d’autres jeux de données pour améliorer vos modèles d’arbres de décision.