Настройка гиперпараметров
Модель машинного обучения определяется как математическая модель с рядом параметров, которые необходимо изучить на основе данных. Обучая модель с существующими данными, мы можем подобрать параметры модели.
 Однако есть еще один вид параметров, известный как гиперпараметры , которые нельзя узнать напрямую в процессе обычного обучения. Обычно их исправляют до начала самого тренировочного процесса. Эти параметры выражают важные свойства модели, такие как ее сложность или скорость обучения.
Некоторые примеры гиперпараметров модели включают:
- Штраф в классификаторе логистической регрессии, т.е. регуляризация L1 или L2
 - Скорость обучения для обучения нейронной сети.
 - Гиперпараметры C и сигма для машин опорных векторов.
 - 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 importsfrom sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import GridSearchCV # Creating the hyperparameter gridc_space = np.logspace( - 5 , 8 , 15 )param_grid = { 'C' : c_space} # Instantiating logistic regression classifierlogreg = LogisticRegression() # Instantiating the GridSearchCV objectlogreg_cv = GridSearchCV(logreg, param_grid, cv = 5 ) logreg_cv.fit(X, y) # Print the tuned parameters and scoreprint ( "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 importsfrom scipy.stats import randintfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.model_selection import RandomizedSearchCV # Creating the hyperparameter gridparam_dist = { "max_depth" : [ 3 , None ],              "max_features" : randint( 1 , 9 ),              "min_samples_leaf" : randint( 1 , 9 ),              "criterion" : [ "gini" , "entropy" ]} # Instantiating Decision Tree classifiertree = DecisionTreeClassifier() # Instantiating RandomizedSearchCV objecttree_cv = RandomizedSearchCV(tree, param_dist, cv = 5 ) tree_cv.fit(X, y) # Print the tuned parameters and scoreprint ( "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