Tour d'horizon des familles : linéaires, kernel, arbres et ensembles.
C et gammafeature_importances_ et identifier les biais (bias toward high cardinality)La régression linéaire ordinaire (OLS) minimise la somme des carrés résiduels. Quand le nombre de features p approche ou dépasse le nombre d'observations n, ou en cas de multicolinéarité, la solution explose. La régularisation ajoute une pénalité sur la norme du vecteur de coefficients.
| Modèle | Pénalité | Effet | Hyperparamètre |
|---|---|---|---|
LinearRegression | Aucune | OLS pure, sensible à la multicolinéarité | — |
Ridge | L2 (carré des coefs) | Réduit les coefs sans les annuler | alpha |
Lasso | L1 (valeur absolue) | Sélection de features : annule les coefs non informatifs | alpha |
ElasticNet | L1 + L2 combinées | Compromis Ridge/Lasso, gère mieux les groupes corrélés | alpha, l1_ratio |
Selon scikit-learn (User Guide 1.1.4) : « The Lasso is a linear model that estimates sparse coefficients. It is useful in some contexts due to its tendency to prefer solutions with fewer non-zero coefficients. »
Source : scikit-learn.org/stable/modules/linear_model.html#lasso
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
pipe = Pipeline([
('scaler', StandardScaler()),
('ridge', Ridge())
])
param_grid = {'ridge__alpha': [0.001, 0.01, 0.1, 1, 10, 100, 1000]}
grid = GridSearchCV(pipe, param_grid, cv=5, scoring='neg_mean_squared_error', n_jobs=-1)
grid.fit(X_train, y_train)
print(f"Best alpha: {grid.best_params_}, score: {-grid.best_score_:.3f}")
Malgré son nom, c'est un classificateur. Modélise la probabilité d'appartenance à une classe via la fonction sigmoïde. Avec penalty='l1', équivalent au Lasso pour la classification.
Multinomial (multi_class='multinomial', solver lbfgs ou saga) pour la classification multiclasse softmax. Évitez One-vs-Rest sauf cas particulier.
Construit l'hyperplan maximisant la marge entre classes. Avec le kernel trick, traite des frontières non-linéaires sans projeter explicitement.
| Kernel | Usage | Hyperparamètres-clés |
|---|---|---|
linear | Données linéairement séparables, haute dimensionnalité (texte) | C |
rbf (Gaussien) | Frontières non-linéaires complexes (défaut sklearn) | C, gamma |
poly | Interactions polynomiales explicites | C, degree, gamma |
sigmoid | Rare, équivalent à un perceptron à 2 couches | C, gamma |
C = inverse de la régularisation (grand = overfitting). gamma = inverse de la portée d'influence d'un point (grand = surapprentissage local). Toujours grid search sur une grille logarithmique : [0.001, 0.01, 0.1, 1, 10, 100].
Construit n_estimators arbres décisionnels indépendants sur des échantillons bootstrap (tirage avec remise) et un sous-ensemble aléatoire de features (max_features). Agrège par moyenne (régression) ou vote majoritaire (classification).
| Hyperparamètre | Effet | Valeur typique |
|---|---|---|
n_estimators | Nombre d'arbres — converge en variance | 300-1000 |
max_depth | Profondeur max — contrôle l'overfitting | 10-30 ou None |
min_samples_split | Min observations pour diviser un nœud | 2-20 |
max_features | Features candidates par split | 'sqrt' (classification), 1.0 (régression) |
class_weight | Gérer le déséquilibre classes | 'balanced' ou dict |
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(
n_estimators=500,
max_depth=20,
min_samples_split=10,
max_features='sqrt',
class_weight='balanced', # déséquilibre 0.17 % fraude
n_jobs=-1,
random_state=42
)
rf.fit(X_train, y_train)
print(f"Train: {rf.score(X_train, y_train):.4f}")
print(f"Test: {rf.score(X_test, y_test):.4f}")
L'attribut rf.feature_importances_ donne l'importance Gini moyenne décroissance. Méfiance : biais en faveur des variables à haute cardinalité.
Construit les arbres séquentiellement, chaque nouvel arbre corrigeant les erreurs résiduelles du précédent. Plus performant que Random Forest sur la majorité des tâches tabulaires, mais entraînement séquentiel = plus lent.
scikit-learn fournit GradientBoostingClassifier et HistGradientBoostingClassifier. HistGBM (depuis sklearn 0.21) est 10-100× plus rapide grâce à la binarisation par histogrammes — équivalent fonctionnel de LightGBM/XGBoost en pure sklearn.
HistGradientBoostingClassifier en baseline avant de passer à XGBoost/LightGBM/CatBoost. Performance ~équivalente et zéro dépendance externe.
| Contexte | Algorithme recommandé | Justification |
|---|---|---|
| n < 1 000, p > n (texte vectorisé TF-IDF) | LogisticRegression L1 | Régularisation + interprétabilité |
| Tabulaire, n < 100 000 | HistGBM ou XGBoost | Meilleur compromis perf/vitesse |
| Tabulaire, n > 1 M | LightGBM | Optimisé big data, GPU support |
| Images, texte non vectorisé | Deep Learning (voir Leçon 2-2) | Représentations apprises > ML classique |
| Petit n, interprétabilité critique | Logistic / Ridge + SHAP | Coefficients lisibles |
Inscrivez-vous pour accéder aux 5 autres leçons + le quiz final.
Créer mon compteChoisis quels cookies tu acceptes — modifiable à tout moment.