Знайомство з Grid Search

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

Alex Scriven

Data Scientist

Автоматизація 2 гіперпараметрів

Ваші попередні кроки:

neighbors_list = [3,5,10,20,50,75]
accuracy_list = []
for test_number in neighbors_list:
    model = KNeighborsClassifier(n_neighbors=test_number)
    predictions = model.fit(X_train, y_train).predict(X_test)
    accuracy = accuracy_score(y_test, predictions)
    accuracy_list.append(accuracy)

Потім ми зібрали це в датафрейм для аналізу.

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

Автоматизація 2 гіперпараметрів

 

А як щодо перевірки значень 2 гіперпараметрів?

Використаємо алгоритм GBM:

  • learn_rate [0.001, 0.01, 0.05]
  • max_depth [4,6,8,10]

Можемо використати (вкладений) цикл for!

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

Автоматизація 2 гіперпараметрів

Спершу функція для створення моделі:

def gbm_grid_search(learn_rate, max_depth):
    model = GradientBoostingClassifier(
            learning_rate=learn_rate,
            max_depth=max_depth)

predictions = model.fit(X_train, y_train).predict(X_test)
return([learn_rate, max_depth, accuracy_score(y_test, predictions)])
Тюнінг гіперпараметрів у Python

Автоматизація 2 гіперпараметрів

 

Тепер можемо пройтись списками гіперпараметрів і викликати нашу функцію:

results_list = []

for learn_rate in learn_rate_list:
    for max_depth in max_depth_list:
        results_list.append(gbm_grid_search(learn_rate,max_depth))

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

Автоматизація 2 гіперпараметрів

 

Можемо також покласти ці результати в DataFrame і надрукувати:

results_df = pd.DataFrame(results_list, columns=['learning_rate', 'max_depth', 'accuracy'])
print(results_df)

таблиця результатів

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

Скільки моделей?

 

Додавши більше гіперпараметрів і значень, ми збудували набагато більше моделей.

  • Залежність не лінійна, а експоненційна
  • Одне додаткове значення гіперпараметра — це не лише одна модель
  • 5 для Гіперпараметра 1 і 10 для Гіперпараметра 2 — це 50 моделей!

А як щодо крос-валідації?

  • 10-фолдова крос-валідація дасть 50x10 = 500 моделей!
Тюнінг гіперпараметрів у Python

Від 2 до N гіперпараметрів

 

А якщо додати ще гіперпараметри?

Можемо загніздити наш цикл!

# Налаштуйте список значень для перевірки
learn_rate_list = [0.001, 0.01, 0.1, 0.2, 0.3, 0.4, 0.5]
max_depth_list = [4,6,8, 10, 12, 15, 20, 25, 30]
subsample_list = [0.4,0.6, 0.7, 0.8, 0.9]
max_features_list = ['auto', 'sqrt']
Тюнінг гіперпараметрів у Python

Від 2 до N гіперпараметрів

Підлаштуємо нашу функцію:

def gbm_grid_search(learn_rate, max_depth,subsample,max_features):
    model = GradientBoostingClassifier(
        learning_rate=learn_rate, 
        max_depth=max_depth,
        subsample=subsample,
        max_features=max_features)
    predictions = model.fit(X_train, y_train).predict(X_test)
    return([learn_rate, max_depth, accuracy_score(y_test, predictions)])
Тюнінг гіперпараметрів у Python

Від 2 до N гіперпараметрів

Коригуємо наш цикл for (вкладення):

for learn_rate in learn_rate_list:
    for max_depth in max_depth_list:
        for subsample in subsample_list:
            for max_features in max_features_list:
                results_list.append(gbm_grid_search(learn_rate,max_depth,
                                     subsample,max_features))
results_df = pd.DataFrame(results_list, columns=['learning_rate',
                         'max_depth', 'subsample', 'max_features','accuracy'])
print(results_df)
Тюнінг гіперпараметрів у Python

Від 2 до N гіперпараметрів

 

Скільки моделей тепер?

  • 7x9x5x2 = 630 (6 300 з крос-валідацією!)

Не можемо вкладати нескінченно!

До того ж, якщо нам потрібні:

  • Деталі часу навчання та оцінок
  • Деталі оцінок крос-валідації
Тюнінг гіперпараметрів у Python

Знайомство з Grid Search

Створімо ґрід:

  • У лівому стовпці — усі значення max_depth
  • У верхньому рядку — усі значення learning_rate

Таблиця комбінацій гіперпараметрів

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

Знайомство з Grid Search

Проходимо кожну комірку ґріда:

таблиця комбінацій гіперпараметрів

(4,0.001) еквівалентно створенню такого оцінювача:

GradientBoostingClassifier(max_depth=4, learning_rate=0.001)
Тюнінг гіперпараметрів у Python

Grid Search: переваги й недоліки

 

Переваги цього підходу:

Переваги:

  • Не потрібно писати тисячі рядків коду
  • Знаходить найкращу модель у межах ґріда (*особлива примітка тут!)
  • Легко пояснити
Тюнінг гіперпараметрів у Python

Grid Search: переваги й недоліки

 

Недоліки цього підходу:

  • Обчислювально затратний! Пам'ятаєте, як швидко ми отримали 6 000+ моделей?
  • Він «неінформований». Результати однієї моделі не допомагають створювати наступну.

 

«Інформовані» методи розглянемо далі!

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

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

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

Preparing Video For Download...