Сложность модели и переобучение

Проектирование рабочих процессов машинного обучения на 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

Стандартная практика — разделить данные на обучающую, тестовую (или разработочную) и валидационную (или отложенную) выборки.

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

При кросс-валидации разделение на обучающую и тестовую выборки выполняется несколько раз. Набор данных делится на N частей; каждый раз N-1 часть используется для обучения, а оставшаяся — для теста.

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

Кросс-валидация

Оцените точность с помощью 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

Точность на обучающей выборке начинается с 0,7 при максимальной глубине 3 и возрастает почти до 1,0 при глубине от 5 до 30.

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

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

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

Диапазон начиная с глубины 10 выделен красным — это зона переобучения.

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

Сложнее — не значит лучше!

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

Preparing Video For Download...