Complexité du modèle et surapprentissage

Concevoir des workflows de Machine Learning en Python

Dr. Chris Anagnostopoulos

Honorary Associate Professor

Qu'est-ce que la complexité d'un modèle ?

RandomForestClassifier() accepte des arguments supplémentaires, comme max_depth :

help(RandomForestClassifier)
Help on class RandomForestClassifier in module sklearn.ensemble.forest:
...
 |  max_depth : integer or None, optional (default=None)
 |      The maximum depth of the tree. If None, then nodes are expanded until
 |      all leaves are pure or until all leaves contain less than
 |      min_samples_split samples.
Concevoir des workflows de Machine Learning en Python
m2 = RandomForestClassifier(
    max_depth=2)
m2.fit(X_train, y_train)

m2.estimators_[0]

Un arbre de décision de profondeur 2.

m4 = RandomForestClassifier(
    max_depth=4)
m4.fit(X_train, y_train)

m4.estimators_[0]

Un arbre de décision de profondeur 4.

Concevoir des workflows de Machine Learning en Python

La pratique courante consiste à séparer les données en ensembles d'entraînement, de test (ou développement) et de validation (ou hold‑out).

Concevoir des workflows de Machine Learning en Python

En validation croisée, la séparation entraînement‑test est répétée. Le jeu de données est découpé en N blocs ; à chaque itération, N‑1 servent à l'entraînement et le bloc restant au test.

Concevoir des workflows de Machine Learning en Python

Validation croisée

Évaluer la précision avec cross_val_score() :

from sklearn.model_selection import cross_val_score

cross_val_score(RandomForestClassifier(), X, y)
array([0.7218 , 0.7682, 0.7866])
numpy.mean(cross_val_score(RandomForestClassifier(), X, y))
0.7589
Concevoir des workflows de Machine Learning en Python

Régler la complexité du modèle

Ajuster la profondeur avec GridSearchCV() :

from sklearn.model_selection import GridSearchCV
param_grid = {'max_depth':[5,10,20]}
grid = GridSearchCV(RandomForestClassifier(), param_grid)
grid.fit(X,y)
grid._best_params
{'max_depth': 10}
Concevoir des workflows de Machine Learning en Python

La précision en échantillon démarre à 0,7 pour une profondeur max de 3 et augmente presque jusqu'à 1,0 quand la profondeur va de 5 à 30.

Concevoir des workflows de Machine Learning en Python

La précision hors échantillon démarre aussi à 0,7, atteint 0,75 pour une profondeur de 10 puis retombe à 0,7 pour des profondeurs plus grandes.

Concevoir des workflows de Machine Learning en Python

La zone à partir de la profondeur 10 est en rouge, indiquant un surapprentissage.

Concevoir des workflows de Machine Learning en Python

Plus complexe n'est pas toujours mieux !

Concevoir des workflows de Machine Learning en Python

Preparing Video For Download...