ConsigneEntraîne un arbre de décision et analyse son importance
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 BSinon : 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}')L'importance ne compte pas les splits : elle additionne la baisse d'impureté que la feature apporte, pondérée par le nombre d'exemples concernés. Une feature utilisée une seule fois près de la racine pèse donc souvent bien plus que dix découpes faites tout en bas de l'arbre.
Sans contrainte, un arbre peut être très profond et overfitter (mémoriser le bruit). Limitations courantes :
max_depth=5 profondeur maxmin_samples_split=20 minimum d'exemples pour split un nœudmin_samples_leaf=10 minimum dans une feuillemax_features='sqrt' sous-ensemble de features à considérer à chaque splitÀ régler par cross-validation.
import numpy as npfrom sklearn.tree import DecisionTreeClassifierfrom 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_treeplot_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 →