Диагностика проблем смещения и дисперсии

Машинное обучение на основе древовидных моделей в Python

Elie Kawerk

Data Scientist

Оценка ошибки обобщения

  • Как оценить ошибку обобщения модели?

  • Напрямую это сделать невозможно, потому что:

    • $f$ неизвестна,

    • как правило, доступен только один набор данных,

    • шум непредсказуем.

Машинное обучение на основе древовидных моделей в Python

Оценка ошибки обобщения

Решение:

  • разбить данные на обучающую и тестовую выборки,
  • обучить $\hat{f}$ на обучающей выборке,
  • оценить ошибку $\hat{f}$ на невиданной тестовой выборке.
  • ошибка обобщения $\hat{f} \approx$ ошибка $\hat{f}$ на тестовой выборке.
Машинное обучение на основе древовидных моделей в Python

Улучшение оценки модели с помощью кросс-валидации

  • Тестовую выборку не следует трогать, пока мы не убедимся в качестве $\hat{f}$.

  • Оценка $\hat{f}$ на обучающей выборке: смещённая оценка — $\hat{f}$ уже видела все обучающие точки.

  • Решение $\rightarrow$ кросс-валидация (CV):

    • K-Fold CV,

    • Hold-Out CV.

Машинное обучение на основе древовидных моделей в Python

K-Fold CV

K-блочная кросс-валидация

Машинное обучение на основе древовидных моделей в Python

K-Fold CV

Ошибка кросс-валидации

Машинное обучение на основе древовидных моделей в Python

Диагностика проблем дисперсии

  • Если $\hat{f}$ страдает от высокой дисперсии:

    ошибка CV $\hat{f}$ > ошибка $\hat{f}$ на обучающей выборке.

  • Говорят, что $\hat{f}$ переобучается. Чтобы устранить переобучение:
    • уменьшите сложность модели,
    • например: уменьшите максимальную глубину, увеличьте минимальное число объектов в листе, ...
    • соберите больше данных, ..
Машинное обучение на основе древовидных моделей в Python

Диагностика проблем смещения

  • Если $\hat{f}$ страдает от высокого смещения:

    ошибка CV $\hat{f} \approx$ ошибка $\hat{f}$ на обучающей выборке $>>$ желаемая ошибка.

  • Говорят, что $\hat{f}$ недообучается. Чтобы устранить недообучение:

    • увеличьте сложность модели,
    • например: увеличьте максимальную глубину, уменьшите минимальное число объектов в листе, ...
    • добавьте более релевантные признаки.
Машинное обучение на основе древовидных моделей в Python

K-Fold CV в sklearn на наборе данных Auto

from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error as MSE
from sklearn.model_selection import cross_val_score

# Set seed for reproducibility SEED = 123 # Split data into 70% train and 30% test X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.3, random_state=SEED)
# Instantiate decision tree regressor and assign it to 'dt' dt = DecisionTreeRegressor(max_depth=4, min_samples_leaf=0.14, random_state=SEED)
Машинное обучение на основе древовидных моделей в Python

K-Fold CV в sklearn на наборе данных Auto

# Evaluate the list of MSE ontained by 10-fold CV 
# Set n_jobs to -1 in order to exploit all CPU cores in computation
MSE_CV = - cross_val_score(dt, X_train, y_train, cv= 10, 
                           scoring='neg_mean_squared_error',
                           n_jobs = -1)

# Fit 'dt' to the training set dt.fit(X_train, y_train) # Predict the labels of training set y_predict_train = dt.predict(X_train) # Predict the labels of test set y_predict_test = dt.predict(X_test)
Машинное обучение на основе древовидных моделей в Python
# CV MSE  
print('CV MSE: {:.2f}'.format(MSE_CV.mean()))
CV MSE: 20.51
# Training set MSE
print('Train MSE: {:.2f}'.format(MSE(y_train, y_predict_train)))
Train MSE: 15.30
# Test set MSE
print('Test MSE: {:.2f}'.format(MSE(y_test, y_predict_test)))
Test MSE: 20.92
Машинное обучение на основе древовидных моделей в Python

Давайте потренируемся!

Машинное обучение на основе древовидных моделей в Python

Preparing Video For Download...