Un arbre de décision construit une série de questions oui/non sur les features pour classer (ou prédire). Très visuel et interprétable.
Si feat_0 > 0.5 :
Si feat_2 > 0.3 → classe A
Sinon → classe B
Sinon :
Si feat_1 > 0 → classe B
Sinon → classe AÀ chaque nœud, l'algorithme cherche la question qui minimise l'impureté (Gini ou entropie) des deux groupes obtenus. On répète récursivement jusqu'à un critère d'arrêt (profondeur max, taille min...).
from sklearn.tree import DecisionTreeClassifiertree = DecisionTreeClassifier(max_depth=3, random_state=42)
tree.fit(X_train, y_train)
acc = tree.score(X_test, y_test)Après fit, l'arbre fournit l'importance de chaque feature (somme = 1) :
for name, imp in zip(features, tree.feature_importances_):
print(f' {name}: {imp:.3f}')Les features les plus utilisées dans les splits ont une importance plus élevée.
Sans contrainte, un arbre peut être très profond et overfitter (mémoriser le bruit). Limitations courantes :
max_depth=5 profondeur max
min_samples_split=20 minimum d'exemples pour split un nœud
min_samples_leaf=10 minimum dans une feuille
max_features='sqrt' sous-ensemble de features à considérer à chaque splitÀ régler par cross-validation.
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_splitnp.random.seed(42)
X = np.random.randn(200, 4)
y = ((X[:, 0] > 0) & (X[:, 2] > 0)).astype(int)
features = ['feat_0', 'feat_1', 'feat_2', 'feat_3']X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)tree = DecisionTreeClassifier(max_depth=3, random_state=42)
tree.fit(X_train, y_train)print(f'Accuracy: {tree.score(X_test, y_test):.2%}')
for n, imp in zip(features, tree.feature_importances_):
print(f' {n}: {imp:.3f}')from sklearn.tree import plot_tree
plot_tree(tree, feature_names=features, class_names=['0','1'], filled=True)Un arbre seul est souvent moyen. Combiné en forêt (leçon 88), il devient un des meilleurs modèles classiques.
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →