Стратегии поиска гиперпараметров: Grid Search и Random Search
Выбор оптимальных значений гиперпараметров может значительно улучшить эффективность модели. В этой статье мы рассмотрим две популярные стратегии поиска гиперпараметров: метод сетки (Grid Search) и метод случайного поиска (Random Search).
Метод сетки (Grid Search)
Метод сетки (Grid Search) заключается в том, чтобы определить набор возможных значений для каждого гиперпараметра и затем обучить модель для каждой комбинации этих значений. Это гарантирует, что мы найдем оптимальное сочетание гиперпараметров в заданном пространстве поиска.
Рассмотрим пример кода на Python с использованием библиотеки scikit-learn:
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# Загрузка набора данных
iris = load_iris()
X, y = iris.data, iris.target
# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Создание модели
model = SVC()
# Определение сетки гиперпараметров
param_grid = {
'C': [0.1, 1, 10, 100],
'gamma': [0.1, 0.01, 0.001, 0.0001],
'kernel': ['linear', 'rbf']
}
# Применение Grid Search
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5)
grid_search.fit(X_train, y_train)
# Вывод лучших гиперпараметров
print("Лучшие гиперпараметры: ", grid_search.best_params_)
В этом примере мы используем класс GridSearchCV
для поиска оптимальных гиперпараметров для модели SVM (Support Vector Machine). Мы определяем сетку значений для гиперпараметров C
, gamma
и kernel
, а затем применяем метод fit
для обучения модели с различными комбинациями этих значений. В конце выводятся лучшие гиперпараметры, которые обеспечивают наилучшую эффективность на кросс-валидации.
Метод случайного поиска (Random Search)
Метод случайного поиска (Random Search) основан на идее случайного выбора значений гиперпараметров из заданного распределения. Этот подход может быть более эффективным, чем метод сетки, особенно когда пространство поиска гиперпараметров является большим.
Пример кода для метода случайного поиска:
from sklearn.model_selection import RandomizedSearchCV
from sklearn.tree import DecisionTreeClassifier
from scipy.stats import randint
# Создание модели
model = DecisionTreeClassifier()
# Определение распределений для гиперпараметров
param_dist = {
'max_depth': randint(2, 10),
'min_samples_split': randint(2, 10),
'min_samples_leaf': randint(1, 10)
}
# Применение Random Search
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_dist, n_iter=10, cv=5)
random_search.fit(X_train, y_train)
# Вывод лучших гиперпараметров
print("Лучшие гиперпараметры: ", random_search.best_params_)
В этом примере мы используем класс RandomizedSearchCV
для поиска оптимальных гиперпараметров для модели Decision Tree. Мы определяем распределения для гиперпараметров max_depth
, min_samples_split
и min_samples_leaf
, а затем применяем метод fit
для обучения модели с различными комбинациями значений, сгенерированных случайным образом. В конце выводятся лучшие гиперпараметры.
Метод случайного поиска часто более эффективен, чем метод сетки, когда пространство поиска гиперпараметров является большим или когда некоторые гиперпараметры имеют большее влияние на эффективность модели, чем другие.
Обе стратегии, Grid Search и Random Search, являются мощными инструментами в оптимизации гиперпараметров. Выбор между ними зависит от конкретной задачи, доступных ресурсов и природы пространства поиска гиперпараметров.