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

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

Alex Scriven

Data Scientist

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

 

Некоторые гиперпараметры важнее настраивать в первую очередь.

Но какие значения стоит пробовать?

  • Зависит от конкретного алгоритма и гиперпараметра
  • Существуют рекомендации и лучшие практики

Рассмотрим основные советы!

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

Конфликтующие гиперпараметры

Следите за конфликтующими гиперпараметрами.

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

Некоторые конфликты неявны — параметр просто «игнорируется» (например, normalize в ElasticNet):

This parameter is ignored when fit_intercept is set to False

Обязательно обращайтесь к документации Scikit-Learn!

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

Бессмысленные значения гиперпараметров

 

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

  • Случайный лес с малым числом деревьев
    • Можно ли назвать «лесом» всего 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

Кривые обучения

Наш график:

кривая обучения: точность в зависимости от числа соседей в KNN

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

Удобный способ генерации значений

Функция range в Python не поддерживает дробный шаг.

Удобный способ — использовать np.linspace(start, end, num) из NumPy

  • Создаёт num равномерно распределённых значений в интервале от start до end.
print(np.linspace(1,2,5))
[1.   1.25 1.5  1.75 2.  ]
Подбор гиперпараметров в Python

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

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

Preparing Video For Download...