IntermédiaireMachine Learning
20 min de lecture11 vues

SVM, Arbres de Décision et Random Forest en Profondeur

Maîtrisez les algorithmes classiques les plus puissants du ML : SVM avec kernel trick, arbres de décision et Random Forest. Comprendre quand ces modèles battent le Deep Learning.

SVM, Arbres de Décision et Random Forest

Ces trois algorithmes constituent le socle du machine learning classique. Ils restent incontournables en 2026 sur les petits et moyens datasets où les réseaux de neurones n'apportent pas de valeur ajoutée.


1. Support Vector Machine : l'hyperplan de séparation maximal

Intuition géométrique

Un SVM cherche l'hyperplan qui sépare les classes avec la marge maximale. Les points les plus proches de l'hyperplan s'appellent les vecteurs de support.

Maximiser la marge améliore la généralisation. Un hyperplan centré entre les deux classes résiste mieux aux nouvelles données.

Le paramètre C

  • C petit : large marge, quelques erreurs tolérées (underfitting possible)
  • C grand : marge étroite, peu d'erreurs d'entraînement (overfitting possible)

2. Le Kernel Trick : projeter en dimension supérieure

Que faire si les données ne sont pas linéairement séparables ?

Le kernel trick calcule le produit scalaire dans l'espace projeté sans jamais calculer la projection explicitement : c'est l'astuce qui rend le SVM scalable.

KernelUsage
LinéaireTexte sparse, haute dimension
RBF (Gaussien)Usage général, recommandé par défaut
PolynomialVision, données structurées

Le paramètre gamma (γ) du kernel RBF contrôle le rayon d'influence. Un gamma trop élevé crée des décisions complexes qui surapprennent.


3. Arbres de Décision : CART et mesures d'impureté

Un arbre divise récursivement l'espace des features en posant des questions binaires (feature <= seuil ?).

Impureté de Gini vs Entropie

  • Gini : 1 - Σ pᵢ² : probabilité qu'un échantillon aléatoire soit mal classé
  • Entropie : -Σ pᵢ log₂(pᵢ) : mesure du désordre

En pratique, les deux donnent des résultats très similaires. Gini est légèrement plus rapide.

from sklearn.tree import DecisionTreeClassifier, export_text
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
tree = DecisionTreeClassifier(max_depth=3)
tree.fit(X, y)
print(export_text(tree, feature_names=load_iris().feature_names))

Un arbre sans contrainte (max_depth, min_samples_leaf) surapprend facilement : il mémorise le dataset au lieu de généraliser.


4. Random Forest : la sagesse des foules

Random Forest entraîne N arbres indépendants, chacun sur un sous-échantillon aléatoire. La prédiction finale est le vote majoritaire.

Feature sampling : à chaque nœud, seul un sous-ensemble de features est considéré (sqrt(n_features) par défaut). Cela décorrèle les arbres : si une feature dominante existe, elle ne sera pas dans chaque arbre.

La loi des grands nombres garantit que la moyenne de N estimateurs bruités converge vers la vraie valeur. Plus d'arbres = moins de variance, sans augmenter le biais.


5. Micro-exercice : SVM vs Random Forest sur Breast Cancer

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report
import time

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# SVM nécessite une normalisation
scaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train)
X_test_s  = scaler.transform(X_test)

svm = SVC(kernel="rbf", C=1.0, gamma="scale")
rf  = RandomForestClassifier(n_estimators=100, random_state=42)

for name, model, Xtr, Xte in [
    ("SVM", svm, X_train_s, X_test_s),
    ("Random Forest", rf, X_train, X_test)
]:
    t0 = time.time()
    model.fit(Xtr, y_train)
    print(f"\n{name} ({time.time()-t0:.3f}s) :")
    print(classification_report(y_test, model.predict(Xte)))

6. Feature Importance avec Random Forest

import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import RandomForestClassifier

data = load_breast_cancer()
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(data.data, data.target)

importance = pd.Series(rf.feature_importances_, index=data.feature_names)
print(importance.sort_values(ascending=False).head(10))

7. Hyperparamètres clés

ModèleParamètreRôleValeurs à tester
SVMCRégularisation0.1, 1, 10, 100
SVMgammaRayon RBF"scale", "auto", 0.001
Random Forestn_estimatorsNombre d'arbres100, 200, 500
Random Forestmax_depthProfondeur maxNone, 5, 10, 20

8. Quand SVM surpasse le Deep Learning

SVM excelle quand :

  • Petits datasets (< 10 000 exemples) : le DL a besoin de données
  • Haute dimensionnalité sparse : texte TF-IDF (milliers de features)
  • Bio-informatique : séquences génomiques, peu d'exemples, beaucoup de features

Sur un dataset de 500 séquences génomiques avec 20 000 features, un SVM linéaire battra un réseau de neurones en précision ET en temps d'entraînement.

CritèreSVMArbre de DécisionRandom Forest
InterprétabilitéFaibleHauteMoyenne
Résistance overfittingHauteFaibleHaute
Normalisation requiseOuiNonNon
Dataset idéalPetit, haute dim.Prototypage rapideUsage général

Specialiste IA — Master Intelligence Artificielle

Diplome d'un Master en Intelligence Artificielle, je travaille au quotidien sur des projets IA en entreprise. J'ai cree IwanttolearnAI pour rendre l'apprentissage de l'IA accessible a tous, gratuitement.