Подбор гиперпараметров

Обучение с учителем с помощью scikit-learn

George Boorman

Core Curriculum Manager

Подбор гиперпараметров

  • Ridge/лассо-регрессия: выбор alpha

  • KNN: выбор n_neighbors

  • Гиперпараметры: параметры, задаваемые до обучения модели

    • Например, alpha и n_neighbors
Обучение с учителем с помощью scikit-learn

Выбор гиперпараметров

  1. Перебрать множество значений гиперпараметров

  2. Обучить модель для каждого из них

  3. Оценить качество каждого варианта

  4. Выбрать наилучшие значения

 

  • Этот процесс называется подбором гиперпараметров

  • Обязательно используйте кросс-валидацию, чтобы избежать переобучения на тестовой выборке

  • Данные можно разбить и выполнять кросс-валидацию на обучающей выборке

  • Тестовая выборка резервируется для финальной оценки

Обучение с учителем с помощью scikit-learn

Поиск по сетке с кросс-валидацией

сетка возможных значений n_neighbors от 2 до 11 с шагом 3 и вариантов метрики: euclidean или manhattan

Обучение с учителем с помощью scikit-learn

Поиск по сетке с кросс-валидацией

результаты k-блочной кросс-валидации для каждой комбинации гиперпараметров в сетке

Обучение с учителем с помощью scikit-learn

Поиск по сетке с кросс-валидацией

выделены 5 соседей и метрика euclidean, оценка 0,8748

Обучение с учителем с помощью scikit-learn

GridSearchCV в scikit-learn

from sklearn.model_selection import GridSearchCV

kf = KFold(n_splits=5, shuffle=True, random_state=42)
param_grid = {"alpha": np.arange(0.0001, 1, 10), "solver": ["sag", "lsqr"]}
ridge = Ridge()
ridge_cv = GridSearchCV(ridge, param_grid, cv=kf)
ridge_cv.fit(X_train, y_train)
print(ridge_cv.best_params_, ridge_cv.best_score_)
{'alpha': 0.0001, 'solver': 'sag'}
0.7529912278705785
Обучение с учителем с помощью scikit-learn

Ограничения и альтернативный подход

  • 3-блочная кросс-валидация, 1 гиперпараметр, 10 значений = 30 обучений
  • 10-блочная кросс-валидация, 3 гиперпараметра, 30 значений = 900 обучений
Обучение с учителем с помощью scikit-learn

RandomizedSearchCV

from sklearn.model_selection import RandomizedSearchCV

kf = KFold(n_splits=5, shuffle=True, random_state=42) param_grid = {'alpha': np.arange(0.0001, 1, 10), "solver": ['sag', 'lsqr']} ridge = Ridge()
ridge_cv = RandomizedSearchCV(ridge, param_grid, cv=kf, n_iter=2) ridge_cv.fit(X_train, y_train)
print(ridge_cv.best_params_, ridge_cv.best_score_)
{'solver': 'sag', 'alpha': 0.0001}
0.7529912278705785
Обучение с учителем с помощью scikit-learn

Оценка на тестовой выборке

test_score = ridge_cv.score(X_test, y_test)

print(test_score)
0.7564731534089224
Обучение с учителем с помощью scikit-learn

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

Обучение с учителем с помощью scikit-learn

Preparing Video For Download...