Modellkomplexitet och överanpassning

Att designa maskininlärningsflöden i Python

Dr. Chris Anagnostopoulos

Honorary Associate Professor

Vad är modellkomplexitet?

RandomForestClassifier() tar ytterligare argument, som 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.
Att designa maskininlärningsflöden i Python
m2 = RandomForestClassifier(
    max_depth=2)
m2.fit(X_train, y_train)

m2.estimators_[0]

Ett beslutsträd med djup 2.

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

m4.estimators_[0]

Ett beslutsträd med djup 4.

Att designa maskininlärningsflöden i Python

Standardmetoden är att dela upp data i träning, test (eller utveckling) och validering (eller hållen datamängd).

Att designa maskininlärningsflöden i Python

Vid korsvalidering utförs träning-testdelningen flera gånger. Datamängden delas i N delar, och varje gång används N-1 av dem för träning medan den återstående används för test.

Att designa maskininlärningsflöden i Python

Korsvalidering

Beräkna noggrannhet med 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
Att designa maskininlärningsflöden i Python

Justera modellkomplexitet

Finjustera träddjupet med 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}
Att designa maskininlärningsflöden i Python

Noggrannheten på träningsdata börjar vid 0,7 för ett maximalt djup på 3 och ökar nästan till 1,0 när djupet varierar mellan 5 och 30.

Att designa maskininlärningsflöden i Python

Noggrannheten på testdata börjar också vid 0,7, når sitt maximum på 0,75 vid ett djup av 10 och sjunker sedan tillbaka mot 0,7 för större djup.

Att designa maskininlärningsflöden i Python

Intervallet från djup 10 och framåt är markerat i rött, vilket indikerar att överanpassning sker.

Att designa maskininlärningsflöden i Python

Mer komplext är inte alltid bättre!

Att designa maskininlärningsflöden i Python

Preparing Video For Download...