Налаштування гіперпараметрів

Кероване навчання зі scikit-learn

George Boorman

Core Curriculum Manager

Налаштування гіперпараметрів

  • Регресія Ridge/Lasso: вибір alpha

  • KNN: вибір n_neighbors

  • Гіперпараметри: параметри, які задаємо до навчання моделі

    • Наприклад, alpha і n_neighbors
Кероване навчання зі scikit-learn

Вибір правильних гіперпараметрів

  1. Спробуйте багато значень гіперпараметрів

  2. Навчіть модель для кожного з них окремо

  3. Оцініть якість

  4. Оберіть найкращі значення

 

  • Це називається налаштуванням гіперпараметрів

  • Обов'язково використовуйте кросвальдацію, щоб не підганятись під тестову вибірку

  • Дані все одно ділимо й кросвальдуємо на тренувальній частині

  • Тестову вибірку тримаємо для фінальної оцінки

Кероване навчання зі scikit-learn

Grid search з кросвальдацією

сітка можливих значень n neighbors від 2 до 11 з кроком 3 і варіанти metric: euclidean або manhattan

Кероване навчання зі scikit-learn

Grid search з кросвальдацією

оцінки k-fold cross validation для кожної комбінації гіперпараметрів у сітці

Кероване навчання зі scikit-learn

Grid search з кросвальдацією

підсвічено 5 neighbors і euclidean metric, з оцінкою 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...