Підбір по сітці у Scikit Learn

Тюнінг гіперпараметрів у Python

Alex Scriven

Data Scientist

Об'єкт GridSearchCV

 

Знайомство з об'єктом GridSearchCV:

sklearn.model_selection.GridSearchCV(
    estimator,
    param_grid, scoring=None, fit_params=None,
    n_jobs=None, refit=True, cv='warn',
    verbose=0, pre_dispatch='2*n_jobs',
    error_score='raise-deprecating',
    return_train_score='warn')
Тюнінг гіперпараметрів у Python

Кроки в Grid Search

 

Кроки у Grid Search:

  1. Алгоритм для налаштування гіперпараметрів (часто зветься «estimator»)
  2. Визначити, які гіперпараметри ми налаштовуємо
  3. Задати діапазон значень для кожного гіперпараметра
  4. Налаштувати схему перехресної перевірки
  5. Визначити функцію оцінки, щоб обрати «найкращу» клітинку сітки
  6. Додати корисну додаткову інформацію чи функції
Тюнінг гіперпараметрів у Python

Вхідні параметри GridSearchCV

Важливі вхідні параметри:

  • estimator
  • param_grid
  • cv
  • scoring
  • refit
  • n_jobs
  • return_train_score
Тюнінг гіперпараметрів у Python

GridSearchCV «estimator»

 

Параметр estimator:

  • Власне наш алгоритм
  • Ви вже працювали з KNN, Random Forest, GBM, Logistic Regression

 

Пам'ятайте:

  • Лише один estimator на об'єкт GridSearchCV
Тюнінг гіперпараметрів у Python

GridSearchCV «param_grid»

Параметр param_grid:

  • Визначає, які гіперпараметри та значення тестувати

Замість списків:

max_depth_list = [2, 4, 6, 8]
min_samples_leaf_list = [1, 2, 4, 6]

Це має бути:

param_grid = {'max_depth': [2, 4, 6, 8],
              'min_samples_leaf': [1, 2, 4, 6]}
Тюнінг гіперпараметрів у Python

GridSearchCV «param_grid»

Параметр param_grid:

Пам'ятайте: ключі у словнику param_grid мають бути чинними гіперпараметрами.

Наприклад, для estimator Logistic Regression:

# Incorrect
param_grid = {'C': [0.1,0.2,0.5],
              'best_choice': [10,20,50]}
ValueError: Invalid parameter best_choice for estimator LogisticRegression
Тюнінг гіперпараметрів у Python

GridSearchCV «cv»

Параметр cv:

  • Вибір способу перехресної перевірки
  • Ціле число означає k-fold; зазвичай беруть 5 або 10

k-fold wikipedia

Тюнінг гіперпараметрів у Python

GridSearchCV «scoring»

 

Параметр scoring:

  • Який показник використовувати, щоб вибрати найкращу клітинку сітки (модель)
  • Використайте власну функцію або модуль metrics зі Scikit Learn

Перелік вбудованих метрик:

from sklearn import metrics
sorted(metrics.SCORERS.keys())
Тюнінг гіперпараметрів у Python

GridSearchCV «refit»

 

Параметр refit:

  • Навчає модель з найкращими гіперпараметрами на тренувальних даних
  • Дозволяє об'єкту GridSearchCV бути estimator'ом (для передбачення)
  • Дуже зручно!
Тюнінг гіперпараметрів у Python

GridSearchCV «n_jobs»

Параметр n_jobs:

  • Дозволяє паралельне виконання
  • Кілька моделей будуються одночасно, а не послідовно

Корисний код:

import os
print(os.cpu_count())

Обачно використовуйте всі ядра, якщо паралельно працюєте над іншим!

Тюнінг гіперпараметрів у Python

GridSearchCV «return_train_score»

 

Параметр return_train_score:

  • Логує статистику тренувальних запусків
  • Корисно для аналізу компромісу зміщення-розкид, але дорожче обчислювально
  • Не допомагає обрати найкращу модель — лише для аналізу
Тюнінг гіперпараметрів у Python

Створення об'єкта GridSearchCV

 

Створюємо власний об'єкт GridSearchCV:

# Create the grid
param_grid = {'max_depth': [2, 4, 6, 8], 'min_samples_leaf': [1, 2, 4, 6]}

#Get a base classifier with some set parameters. rf_class = RandomForestClassifier(criterion='entropy', max_features='auto')
Тюнінг гіперпараметрів у Python

Створення об'єкта GridSearchCv

 

Об'єднуємо все разом:

grid_rf_class = GridSearchCV(
    estimator = rf_class,
    param_grid = parameter_grid,
    scoring='accuracy',
    n_jobs=4,
    cv = 10,
    refit=True,
    return_train_score=True)
Тюнінг гіперпараметрів у Python

Використання об'єкта GridSearchCV

 

Оскільки refit встановлено в True, можна одразу використовувати об'єкт:

#Fit the object to our data
grid_rf_class.fit(X_train, y_train)

# Make predictions
grid_rf_class.predict(X_test)
Тюнінг гіперпараметрів у Python

Давайте потренуємось!

Тюнінг гіперпараметрів у Python

Preparing Video For Download...