Složitost modelu a přetrénování

Designing Machine Learning Workflows in Python

Dr. Chris Anagnostopoulos

Honorary Associate Professor

Co je složitost modelu?

RandomForestClassifier() přijímá další argumenty, například 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.
Designing Machine Learning Workflows in Python
m2 = RandomForestClassifier(
    max_depth=2)
m2.fit(X_train, y_train)

m2.estimators_[0]

Rozhodovací strom s hloubkou 2.

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

m4.estimators_[0]

Rozhodovací strom s hloubkou 4.

Designing Machine Learning Workflows in Python

Standardní postup spočívá v rozdělení dat na trénovací, testovací (nebo vývojovou) a validační (nebo hold-out) sadu.

Designing Machine Learning Workflows in Python

Při křížové validaci se rozdělení na trénovací a testovací sadu provádí opakovaně. Dataset se rozdělí na N částí, přičemž pokaždé se N-1 z nich použije pro trénování a zbývající část pro testování.

Designing Machine Learning Workflows in Python

Křížová validace

Vyhodnocení přesnosti 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
Designing Machine Learning Workflows in Python

Ladění složitosti modelu

Ladění hloubky stromu 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}
Designing Machine Learning Workflows in Python

Přesnost na trénovacích datech začíná na 0,7 při maximální hloubce 3 a roste téměř k 1,0 při hloubce od 5 do 30.

Designing Machine Learning Workflows in Python

Přesnost na testovacích datech také začíná na 0,7, dosahuje maxima 0,75 při hloubce 10 a při větších hloubkách klesá zpět na 0,7.

Designing Machine Learning Workflows in Python

Oblast od hloubky 10 výše je označena červeně, což indikuje přetrénování.

Designing Machine Learning Workflows in Python

Větší složitost není vždy lepší!

Designing Machine Learning Workflows in Python

Preparing Video For Download...