参数优化比较:HalvingGridSearchCV vs GridSearchCV

机器学习领域,参数优化是提升模型性能的关键步骤之一。本文将介绍两种参数优化方法:HalvingGridSearchCV和GridSearchCV,并比较它们在训练支持向量机(SVM)模型时的性能。

参数空间定义与模型训练时间

首先,定义了SVM估计器的参数空间,并计算了训练HalvingGridSearchCV实例和GridSearchCV实例所需的时间。通过随机数生成器和数据集生成函数,创建了一个包含1000个样本的分类问题。参数网格包括了不同的gamma和C值,这些值将用于SVM模型的训练。

首先导入了必要的库,包括时间、绘图、数值计算和数据处理库。然后,启用了HalvingGridSearchCV,并从sklearn.model_selection导入了GridSearchCV和HalvingGridSearchCV。接着,从sklearn.svm导入了SVC类。

import numpy as np import pandas as pd from sklearn import datasets from sklearn.model_selection import GridSearchCV, HalvingGridSearchCV from sklearn.svm import SVC import time import matplotlib.pyplot as plt

使用随机数生成器创建了一个随机状态,并使用make_classification函数生成了特征和标签。然后,定义了gamma和C的值,这些值将用于构建参数网格。

rng = np.random.RandomState(0) X, y = datasets.make_classification(n_samples=1000, random_state=rng) gammas = [1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6, 1e-7] Cs = [1, 10, 100, 1e3, 1e4, 1e5] param_grid = {"gamma": gammas, "C": Cs} clf = SVC(random_state=rng)

接下来,计算了训练HalvingGridSearchCV和GridSearchCV实例所需的时间。记录了开始时间,然后分别训练了这两种搜索CV实例,并计算了结束时间与开始时间的差值。

tic = time.time() gsh = HalvingGridSearchCV(estimator=clf, param_grid=param_grid, factor=2, random_state=rng) gsh.fit(X, y) gsh_time = time.time() - tic tic = time.time() gs = GridSearchCV(estimator=clf, param_grid=param_grid) gs.fit(X, y) gs_time = time.time() - tic

热图绘制

为了比较这两种方法的性能,绘制了它们的热图。热图显示了SVM实例的参数组合的平均测试分数。HalvingGridSearchCV还显示了参数组合最后一次使用的迭代次数。标记为0的组合仅在第一次迭代中被评估,而标记为5的组合被认为是最佳的参数组合。

定义了一个名为make_heatmap的函数,该函数用于创建热图。该函数接受一个轴对象、一个搜索估计器对象,以及两个可选参数:is_sh和make_cbar。is_sh用于指示是否为HalvingGridSearchCV,make_cbar用于指示是否创建颜色条。

def make_heatmap(ax, gs, is_sh=False, make_cbar=False): """Helper to make a heatmap.""" results = pd.DataFrame(gs.cv_results_) results[["param_C", "param_gamma"]] = results[["param_C", "param_gamma"]].astype(np.float64) # ... 省略部分代码 ...

使用subplots函数创建了两个子图,并分别为HalvingGridSearchCV和GridSearchCV绘制了热图。还为每个热图添加了标题,显示了训练时间。

fig, axes = plt.subplots(ncols=2, sharey=True) ax1, ax2 = axes make_heatmap(ax1, gsh, is_sh=True) make_heatmap(ax2, gs, make_cbar=True) ax1.set_title("Successive Halving\ntime = {:.3f}s".format(gsh_time), fontsize=15) ax2.set_title("GridSearch\ntime = {:.3f}s".format(gs_time), fontsize=15) plt.show()

通过比较这两种方法的热图,可以看到HalvingGridSearchCV能够在更短的时间内找到与GridSearchCV同样准确的参数组合。这表明HalvingGridSearchCV是一种更高效的参数优化方法。

脚本总运行时间

脚本的总运行时间为7.098秒。这个时间包括了参数空间的定义、模型训练、热图绘制等所有步骤。

本文还提供了一些相关的示例,包括:

  • 连续减半迭代
  • 随机搜索与网格搜索的比较
  • PCA与逻辑回归的管道连接
  • 贝叶斯高斯混合模型的浓度先验类型分析
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485