Примечание
Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере с помощью JupyterLite или Binder.
Сравнение случайного поиска и поиска по сетке для оценки гиперпараметров
Сравните случайный поиск и поиск по сетке для оптимизации гиперпараметров линейного SVM с обучением с помощью SGD. Все параметры, влияющие на обучение, ищутся одновременно (за исключением числа оценщиков, для которого приходится выбирать между временем выполнения и качеством).
Случайный поиск и поиск по сетке исследуют одно и то же пространство параметров. Результаты в виде настроек параметров весьма схожи, тогда как время выполнения случайного поиска значительно меньше.
Производительность случайного поиска может быть немного хуже, что, вероятно, обусловлено шумом и не отразится на отложенной тестовой выборке.
Обратите внимание, что на практике с помощью поиска по сетке не стали бы одновременно перебирать такое количество различных параметров, а выбрали бы только те, которые считаются наиболее важными.
RandomizedSearchCV took 4.99 seconds for 15 candidates parameter settings.
Model with rank: 1
Mean validation score: 0.989 (std: 0.007)
Parameters: {'alpha': np.float64(0.03316103995553317), 'average': False, 'l1_ratio': np.float64(0.13239599139405112)}
Model with rank: 2
Mean validation score: 0.987 (std: 0.013)
Parameters: {'alpha': np.float64(0.13167436790446876), 'average': False, 'l1_ratio': np.float64(0.37515445669598946)}
Model with rank: 3
Mean validation score: 0.987 (std: 0.013)
Parameters: {'alpha': np.float64(0.07336560025373573), 'average': False, 'l1_ratio': np.float64(0.7427415224489912)}
GridSearchCV took 22.57 seconds for 60 candidate parameter settings.
Model with rank: 1
Mean validation score: 0.994 (std: 0.007)
Parameters: {'alpha': np.float64(0.1), 'average': False, 'l1_ratio': np.float64(0.3333333333333333)}
Model with rank: 2
Mean validation score: 0.993 (std: 0.007)
Parameters: {'alpha': np.float64(0.01), 'average': False, 'l1_ratio': np.float64(0.1111111111111111)}
Model with rank: 3
Mean validation score: 0.991 (std: 0.006)
Parameters: {'alpha': np.float64(0.01), 'average': False, 'l1_ratio': np.float64(0.8888888888888888)}
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause
from time import time
import numpy as np
import scipy.stats as stats
from sklearn.datasets import load_digits
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import GridSearchCV, RandomizedSearchCV
# get some data
X, y = load_digits(return_X_y=True, n_class=3)
# build a classifier
clf = SGDClassifier(loss="hinge", penalty="elasticnet", fit_intercept=True)
# Utility function to report best scores
def report(results, n_top=3):
for i in range(1, n_top + 1):
candidates = np.flatnonzero(results["rank_test_score"] == i)
for candidate in candidates:
print("Model with rank: {0}".format(i))
print(
"Mean validation score: {0:.3f} (std: {1:.3f})".format(
results["mean_test_score"][candidate],
results["std_test_score"][candidate],
)
)
print("Parameters: {0}".format(results["params"][candidate]))
print("")
# specify parameters and distributions to sample from
param_dist = {
"average": [True, False],
"l1_ratio": stats.uniform(0, 1),
"alpha": stats.loguniform(1e-2, 1e0),
}
# run randomized search
n_iter_search = 15
random_search = RandomizedSearchCV(
clf, param_distributions=param_dist, n_iter=n_iter_search
)
start = time()
random_search.fit(X, y)
print(
"RandomizedSearchCV took %.2f seconds for %d candidates parameter settings."
% ((time() - start), n_iter_search)
)
report(random_search.cv_results_)
# use a full grid over all parameters
param_grid = {
"average": [True, False],
"l1_ratio": np.linspace(0, 1, num=10),
"alpha": np.power(10, np.arange(-2, 1, dtype=float)),
}
# run grid search
grid_search = GridSearchCV(clf, param_grid=param_grid)
start = time()
grid_search.fit(X, y)
print(
"GridSearchCV took %.2f seconds for %d candidate parameter settings."
% (time() - start, len(grid_search.cv_results_["params"]))
)
report(grid_search.cv_results_)
Общее время выполнения скрипта: (0 минут 27.566 секунд)
Связанные примеры
© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/auto_examples/model_selection/plot_randomized_search.html