Примечание
Перейти в конец, чтобы загрузить полный код примера. или запустить этот пример в браузере через JupyterLite или Binder
Итерации последовательного удвоения
В данном примере показано, как поиск последовательного удвоения (HalvingGridSearchCV и HalvingRandomSearchCV) итеративно выбирает лучшую комбинацию параметров из нескольких кандидатов.
# Authors: The scikit-learn developers # SPDX-License-Identifier: BSD-3-Clause import matplotlib.pyplot as plt import numpy as np import pandas as pd from scipy.stats import randint from sklearn import datasets from sklearn.ensemble import RandomForestClassifier from sklearn.experimental import enable_halving_search_cv # noqa from sklearn.model_selection import HalvingRandomSearchCV
Сначала мы определяем пространство параметров и обучаем экземпляр HalvingRandomSearchCV.
rng = np.random.RandomState(0)
X, y = datasets.make_classification(n_samples=400, n_features=12, random_state=rng)
clf = RandomForestClassifier(n_estimators=20, random_state=rng)
param_dist = {
"max_depth": [3, None],
"max_features": randint(1, 6),
"min_samples_split": randint(2, 11),
"bootstrap": [True, False],
"criterion": ["gini", "entropy"],
}
rsh = HalvingRandomSearchCV(
estimator=clf, param_distributions=param_dist, factor=2, random_state=rng
)
rsh.fit(X, y)
Теперь мы можем использовать атрибут cv_results_ поиска, чтобы проверить и построить эволюцию поиска.
results = pd.DataFrame(rsh.cv_results_)
results["params_str"] = results.params.apply(str)
results.drop_duplicates(subset=("params_str", "iter"), inplace=True)
mean_scores = results.pivot(
index="iter", columns="params_str", values="mean_test_score"
)
ax = mean_scores.plot(legend=False, alpha=0.6)
labels = [
f"iter={i}\nn_samples={rsh.n_resources_[i]}\nn_candidates={rsh.n_candidates_[i]}"
for i in range(rsh.n_iterations_)
]
ax.set_xticks(range(rsh.n_iterations_))
ax.set_xticklabels(labels, rotation=45, multialignment="left")
ax.set_title("Scores of candidates over iterations")
ax.set_ylabel("mean test score", fontsize=15)
ax.set_xlabel("iterations", fontsize=15)
plt.tight_layout()
plt.show()

Количество кандидатов и объем ресурсов на каждой итерации
На первой итерации используется небольшое количество ресурсов. Ресурсом здесь является количество образцов, на которых обучаются оценщики. Все кандидаты оцениваются.
На второй итерации оценивается только лучшая половина кандидатов. Количество выделенных ресурсов удваивается: кандидаты оцениваются на удвоенном количестве образцов.
Этот процесс повторяется до последней итерации, где остаются только 2 кандидата. Лучший кандидат — это кандидат, имеющий лучший результат на последней итерации.
Общее время выполнения скрипта: (0 минут 5.938 секунд)
Связанные примеры
© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/model_selection/plot_successive_halving_iterations.html