网格搜索法非常简单,它通过对我们指定的不同超参列表进行暴力穷举搜索,并计算评估每个组合对模型性能的影响,以获得参数的最优组合。
使用上述代码,我们初始化了一个sklearn.grid_search模块下的GridSearchCV对象,用于对支持向量机流水线的训练与调优。我们将GridSearchCV的param_grid参数以字典的方式定义为待调优的参数。对线性SVM来说,我们只需调优正则化参数(C);对基于RBF的核SVM来说,我们同时需要调优C和gamma参数。请注意此处的gamma是针对核SVM特别定义的。在训练数据集上完成网格搜索后,可以通过best_scroe_属性得到最优模型的性能评分,具体参数信息可通过best_params_属性得到。在本例中,当'cfl_C'=0.1时,线性SVM模型可得到的最优k折交叉验证准确率为97.8%。
最后,我们将使用独立的测试数据集,通过GridSearchCV对象的best_estimator_属性对最优模型进行性能评估:
虽然网格搜索是寻找最优参数集合的一种功能强大的方法,但评估所有参数组合的计算成本也是相当昂贵的。使用scikit-learn抽取不同参数组合的另一种方法就是随机搜索(randomized search)。借助于scikit-learn中的RandomizedSearchCV类,我们可以以特定的代价从抽样分布中抽取出随机的参数组合。关于此方法的更详细细节及其示例请访问链接:http://scikit-learn.org/stable/modules/grid_search.html#randomized-parameter-optimization。