Złożoność modelu i przeuczenie

Projektowanie przepływów pracy uczenia maszynowego w Pythonie

Dr. Chris Anagnostopoulos

Honorary Associate Professor

Czym jest złożoność modelu?

RandomForestClassifier() przyjmuje dodatkowe argumenty, np. 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.
Projektowanie przepływów pracy uczenia maszynowego w Pythonie
m2 = RandomForestClassifier(
    max_depth=2)
m2.fit(X_train, y_train)

m2.estimators_[0]

Drzewo decyzyjne o głębokości 2.

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

m4.estimators_[0]

Drzewo decyzyjne o głębokości 4.

Projektowanie przepływów pracy uczenia maszynowego w Pythonie

Standardową praktyką jest podział danych na zbiory: treningowy, testowy (lub deweloperski) i walidacyjny (lub hold-out).

Projektowanie przepływów pracy uczenia maszynowego w Pythonie

W walidacji krzyżowej podział na zbiór treningowy i testowy jest wykonywany wielokrotnie. Dane są dzielone na N części; każdorazowo N-1 z nich służy do treningu, a pozostała jedna do testu.

Projektowanie przepływów pracy uczenia maszynowego w Pythonie

Walidacja krzyżowa

Ocena dokładności za pomocą 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
Projektowanie przepływów pracy uczenia maszynowego w Pythonie

Dostrajanie złożoności modelu

Dostrajanie głębokości drzewa za pomocą 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}
Projektowanie przepływów pracy uczenia maszynowego w Pythonie

Dokładność na zbiorze treningowym zaczyna od 0,7 przy głębokości 3 i rośnie prawie do 1,0 przy głębokości od 5 do 30.

Projektowanie przepływów pracy uczenia maszynowego w Pythonie

Dokładność na zbiorze testowym również zaczyna od 0,7, osiąga maksimum 0,75 przy głębokości 10, po czym spada z powrotem do 0,7 przy większych głębokościach.

Projektowanie przepływów pracy uczenia maszynowego w Pythonie

Zakres od głębokości 10 wzwyż zaznaczono na czerwono, co wskazuje na wystąpienie przeuczenia.

Projektowanie przepływów pracy uczenia maszynowego w Pythonie

Większa złożoność nie zawsze jest lepsza!

Projektowanie przepływów pracy uczenia maszynowego w Pythonie

Preparing Video For Download...