Значення гіперпараметрів

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

Alex Scriven

Data Scientist

Значення гіперпараметрів

 

Деякі гіперпараметри важливіші за інші для початкового тюнінгу.

А які саме значення варто пробувати?

  • Залежить від алгоритму та гіперпараметра
  • Є поради й кращі практики

Розгляньмо кілька топпорад!

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

Конфліктні вибори гіперпараметрів

Зважайте на конфліктні вибори гіперпараметрів.

  • У LogisticRegression() параметри solver і penalty можуть конфліктувати.
The 'newton-cg', 'sag' and 'lbfgs' solvers support only l2 penalties.

Інколи це неявно — параметр просто «ігнорують» (у ElasticNet з гіперпараметром normalize):

This parameter is ignored when fit_intercept is set to False

Обов'язково звертайтеся до документації Scikit Learn!

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

Безглузді значення гіперпараметрів

 

Остерігайтеся «безглуздих» значень для різних алгоритмів:

  • Random forest із дуже малою кількістю дерев
    • Чи можна назвати «лісом» лише 2 дерева?
  • 1 сусід у алгоритмі KNN
    • Усереднення «голосів» однієї людини навряд чи надійне!
  • Збільшення гіперпараметра на крихітну величину

Варто задокументувати розумні діапазони значень гіперпараметрів.

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

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

 

У попередній вправі ми будували моделі так:

knn_5 =  KNeighborsClassifier(n_neighbors=5)
knn_10 = KNeighborsClassifier(n_neighbors=10)
knn_20  = KNeighborsClassifier(n_neighbors=20)

Це не дуже ефективно. Чи можна краще?

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

Автоматизація тюнінгу гіперпараметрів

Спробуйте цикл for, щоб перебрати варіанти:

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

Автоматизація тюнінгу гіперпараметрів

Можемо зберегти результати в DataFrame для перегляду:

results_df = pd.DataFrame({'neighbors':neighbors_list, 'accuracy':accuracy_list})
print(results_df)

Таблиця точності для різної кількості сусідів

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

Навчальні криві

Створімо графік навчальної кривої

Цього разу перевіримо набагато більше значень

neighbors_list = list(range(5,500, 5))

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) results_df = pd.DataFrame({'neighbors':neighbors_list, 'accuracy':accuracy_list})
Тюнінг гіперпараметрів у Python

Навчальні криві

Побудуємо більший DataFrame:

plt.plot(results_df['neighbors'], 
    results_df['accuracy'])

# Add the labels and title plt.gca().set(xlabel='n_neighbors', ylabel='Accuracy', title='Accuracy for different n_neighbors') plt.show()
Тюнінг гіперпараметрів у Python

Навчальні криві

Наш графік:

крива навчання: точність vs кількість сусідів для knn

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

Зручний прийом для генерування значень

Функція range у Python не підтримує дробові кроки.

Зручний прийом — NumPy-функція np.linspace(start, end, num)

  • Створює num значень, рівномірно розподілених у вказаному інтервалі (start, end).
print(np.linspace(1,2,5))
[1.   1.25 1.5  1.75 2.  ]
Тюнінг гіперпараметрів у Python

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

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

Preparing Video For Download...