Примечание
Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере с помощью 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: F401 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)
HalvingRandomSearchCV(estimator=RandomForestClassifier(n_estimators=20,
random_state=RandomState(MT19937) at 0x784166B66A40),
factor=2,
param_distributions={'bootstrap': [True, False],
'criterion': ['gini', 'entropy'],
'max_depth': [3, None],
'max_features': <scipy.stats._distn_infrastructure.rv_discrete_frozen object at 0x784129d35e50>,
'min_samples_split': <scipy.stats._distn_infrastructure.rv_discrete_frozen object at 0x78416c563490>},
random_state=RandomState(MT19937) at 0x784166B66A40)
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить HTML-представление, или доверьте этому блокноту выполнение. На GitHub HTML-представление не отображается. Попробуйте открыть эту страницу с помощью nbviewer.org.
Параметры
Обученные атрибуты
RandomForestClassifier(bootstrap=False, criterion='entropy', max_features=4,
min_samples_split=5, n_estimators=20,
random_state=RandomState(MT19937) at 0x784117609540)Параметры
Обученные атрибуты
Теперь мы можем использовать атрибут 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 минут 7.454 секунды)
Связанные примеры
© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/auto_examples/model_selection/plot_successive_halving_iterations.html