Complexité du modèle et surapprentissage

Concevoir des flux de travail Machine Learning en Python

Dr. Chris Anagnostopoulos

Honorary Associate Professor

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

RandomForestClassifier() accepte d'autres arguments, 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 flux de travail 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 flux de travail Machine Learning en Python

La pratique courante consiste à diviser les données en ensembles d'entraînement, de test (ou de mise au point) et de validation (ou de réserve).

Concevoir des flux de travail Machine Learning en Python

En validation croisée, la division entraînement-test est répétée plusieurs fois. Le jeu de données est découpé en N parties ; à chaque itération, N−1 servent à l'entraînement et la partie restante au test.

Concevoir des flux de travail Machine Learning en Python

Validation croisée

Évaluez la justesse 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 flux de travail Machine Learning en Python

Ajuster la complexité du modèle

Ajustez 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 flux de travail Machine Learning en Python

La justesse à l'entraînement part de 0,7 pour une profondeur maximale de 3 et approche 1,0 quand la profondeur varie de 5 à 30.

Concevoir des flux de travail Machine Learning en Python

La justesse hors échantillon part aussi de 0,7, culmine à 0,75 pour une profondeur de 10, puis retombe à 0,7 pour des profondeurs plus grandes.

Concevoir des flux de travail Machine Learning en Python

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

Concevoir des flux de travail Machine Learning en Python

Plus complexe n'est pas toujours mieux !

Concevoir des flux de travail Machine Learning en Python

Preparing Video For Download...