连续减半搜索示例

机器学习中,参数优化是一个至关重要的步骤。连续减半搜索是一种高效的参数优化方法,它通过迭代选择最佳参数组合来提高模型性能。本文将详细介绍如何使用这种方法,并展示其在随机森林分类器上的应用。

参数空间定义与模型训练

首先,需要定义参数空间,并训练一个连续减半随机搜索(HalvingRandomSearchCV)实例。使用随机森林分类器作为基础模型,并设置不同的参数分布,以探索最佳的参数组合。

import numpy as np from sklearn.datasets import make_classification from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import HalvingRandomSearchCV # 设置随机种子以保证结果的可重复性 rng = np.random.RandomState(0) # 生成模拟数据 X, y = 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": np.random.randint(1, 6), "min_samples_split": np.random.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_属性来检查和绘制搜索的演变过程。这有助于了解在每次迭代中,哪些参数组合表现最好,以及资源是如何分配的。

import pandas as pd import matplotlib.pyplot as plt # 将cv_results_转换为DataFrame 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("迭代中候选者的分数") ax.set_ylabel("平均测试分数", fontsize=15) ax.set_xlabel("迭代次数", fontsize=15) plt.tight_layout() plt.show()

迭代过程详解

在第一次迭代中,使用少量资源来评估所有候选者。在第二次迭代中,只评估表现最好的一半候选者,并将资源数量翻倍。这个过程会一直重复,直到最后一次迭代,只剩下两个候选者。最佳候选者是在最后一次迭代中得分最高的候选者。

脚本总运行时间

脚本的总运行时间为5.046秒。可以通过以下链接下载Jupyter笔记本或Python源代码,以进一步探索和学习连续减半搜索方法。

如果对连续减半搜索感兴趣,还可以查看以下相关示例:

  • 网格搜索与连续减半搜索的比较
  • scikit-learn 0.24版本发布亮点
  • 随机搜索与网格搜索在超参数估计中的比较
  • 自定义网格搜索的refit策略
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485