Складність моделі та перенавчання

Проєктування робочих процесів машинного навчання в Python

Dr. Chris Anagnostopoulos

Honorary Associate Professor

Що таке складність моделі?

RandomForestClassifier() має додаткові аргументи, як-от 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.
Проєктування робочих процесів машинного навчання в Python
m2 = RandomForestClassifier(
    max_depth=2)
m2.fit(X_train, y_train)

m2.estimators_[0]

Дерево рішень глибиною 2.

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

m4.estimators_[0]

Дерево рішень глибиною 4.

Проєктування робочих процесів машинного навчання в Python

Зазвичай дані ділять на training, test (або development) і validation (або hold-out).

Проєктування робочих процесів машинного навчання в Python

У крос-валідації розбиття на train‑test виконують кілька разів. Набір даних ділять на N частин; щоразу інші N−1 частин ідуть на навчання, а решта — на тест.

Проєктування робочих процесів машинного навчання в Python

Cross-validation

Оцініть точність за допомогою 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
Проєктування робочих процесів машинного навчання в Python

Тонке налаштування складності моделі

Налаштуйте глибину дерева через 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}
Проєктування робочих процесів машинного навчання в Python

Точність на train з 0,7 за максимальної глибини 3 зростає майже до 1,0, коли глибина збільшується від 5 до 30.

Проєктування робочих процесів машинного навчання в Python

Точність на test теж починається з 0,7, досягає максимуму 0,75 за глибини 10, а потім повертається до 0,7 для більших глибин.

Проєктування робочих процесів машинного навчання в Python

Діапазон від глибини 10 і більше позначено червоним — це перенавчання.

Проєктування робочих процесів машинного навчання в Python

Складніше — не завжди краще!

Проєктування робочих процесів машинного навчання в Python

Preparing Video For Download...