Настройка гиперпараметров

Опубликовано: 25 Июля, 2021

Модель машинного обучения определяется как математическая модель с рядом параметров, которые необходимо изучить на основе данных. Обучая модель с существующими данными, мы можем подобрать параметры модели.
Однако есть еще один вид параметров, известный как гиперпараметры , которые нельзя узнать напрямую в процессе обычного обучения. Обычно их исправляют до начала самого тренировочного процесса. Эти параметры выражают важные свойства модели, такие как ее сложность или скорость обучения.

Некоторые примеры гиперпараметров модели включают:

  1. Штраф в классификаторе логистической регрессии, т.е. регуляризация L1 или L2
  2. Скорость обучения для обучения нейронной сети.
  3. Гиперпараметры C и сигма для машин опорных векторов.
  4. K в k-ближайших соседях.

Цель этой статьи - изучить различные стратегии настройки гиперпараметров для модели машинного обучения.

У моделей может быть много гиперпараметров, и поиск наилучшего сочетания параметров можно рассматривать как проблему поиска. Две лучшие стратегии настройки гиперпараметров:

  • GridSearchCV
  • RandomizedSearchCV

GridSearchCV
В подходе GridSearchCV модель машинного обучения оценивается для диапазона значений гиперпараметров. Этот подход называется GridSearchCV , потому что он ищет лучший набор гиперпараметров из сетки значений гиперпараметров.

Например, если мы хотим установить два гиперпараметра C и Alpha модели классификатора логистической регрессии с различным набором значений. Метод gridsearch построит множество версий модели со всеми возможными комбинациями гиперпараметров и вернет лучшую.

Как на изображении, для C = [0,1, 0,2, 0,3, 0,4, 0,5] и Alpha = [0,1, 0,2, 0,3, 0,4].
Для комбинации C = 0,3 и Alpha = 0,2 оценка производительности составляет 0,726 (Наивысший) , поэтому она выбрана.

В следующем коде показано, как использовать GridSearchCV.




# Necessary imports
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
# Creating the hyperparameter grid
c_space = np.logspace( - 5 , 8 , 15 )
param_grid = { 'C' : c_space}
# Instantiating logistic regression classifier
logreg = LogisticRegression()
# Instantiating the GridSearchCV object
logreg_cv = GridSearchCV(logreg, param_grid, cv = 5 )
logreg_cv.fit(X, y)
# Print the tuned parameters and score
print ( "Tuned Logistic Regression Parameters: {}" . format (logreg_cv.best_params_))
print ( "Best score is {}" . format (logreg_cv.best_score_))

Выход:

Tuned Logistic Regression Parameters: {‘C’: 3.7275937203149381}
Best score is 0.7708333333333334

Недостаток : GridSearchCV будет проходить через все промежуточные комбинации гиперпараметров, что делает поиск по сетке очень дорогим в вычислительном отношении.

RandomizedSearchCV
RandomizedSearchCV устраняет недостатки GridSearchCV, поскольку он проходит только фиксированное количество настроек гиперпараметров. Он перемещается в сетке случайным образом, чтобы найти наилучшие установленные гиперпараметры. Такой подход сокращает ненужные вычисления.

В следующем коде показано, как использовать RandomizedSearchCV.




# Necessary imports
from scipy.stats import randint
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import RandomizedSearchCV
# Creating the hyperparameter grid
param_dist = { "max_depth" : [ 3 , None ],
"max_features" : randint( 1 , 9 ),
"min_samples_leaf" : randint( 1 , 9 ),
"criterion" : [ "gini" , "entropy" ]}
# Instantiating Decision Tree classifier
tree = DecisionTreeClassifier()
# Instantiating RandomizedSearchCV object
tree_cv = RandomizedSearchCV(tree, param_dist, cv = 5 )
tree_cv.fit(X, y)
# Print the tuned parameters and score
print ( "Tuned Decision Tree Parameters: {}" . format (tree_cv.best_params_))
print ( "Best score is {}" . format (tree_cv.best_score_))

Выход:

Tuned Decision Tree Parameters: {‘min_samples_leaf’: 5, ‘max_depth’: 3, ‘max_features’: 5, ‘criterion’: ‘gini’}
Best score is 0.7265625