result表示进行6次简单交叉验证所得到的评分.我们可以看到两者6次的平均值都是一样的,也就是说选哪个模型都行了.
K折交叉验证很好的帮我们解决了"参数"选择的问题,问什么要加引号呢? 是因为我们此时仅仅只是徘徊在2个(或者几个)参数的选择上,所以可以这样手动的进行模型选择.试想一下,如果有大量的参数呢? 例如上面的支持向量机中,最基本的就有 C = 1.0 , g a m m a = ′ a u t o ′ C=1.0, gamma='auto' C=1.0,gamma=′auto′这两个参数,如果C和gamma的取值范围为都为1-10,那么这时就有100个模型,但总不能一个一个的来训练吧. 所以此时就要用到并行搜索.
3.并行搜索
由于超参数的空间是无尽的,因此超参数的组合配置只能是"更优"解,没有最优解.通常情况下我们依靠并行搜索对多种超参数组合进行暴力搜索.
举例:使用支持向量机,对20newsgroups进行分类
第一步:导入20newsgroups,将数据集分割成训练集和测试集;
第二步:并且使用TFidf进行向量化;
第三步:设置参数列表,并开始训练模型
第四部:选择评分最高的模型(参数)
注:此处的测试集不用于训练模型,在于测试模型的泛化能力
#Step 4.
print gs.best_score_
print gs.best_params_
# 以下为输出结果
# Fitting 5 folds for each of 6 candidates, totalling 30 fits
# [Parallel(n_jobs=-1)]: Done 30 out of 30 | elapsed: 19.0min finished
# 0.898055391868
# {'C': 10.0, 'gamma': 0.31622776601683794}
从上面我们可以看出,在 C = [ 0.1 , 10. ] , g a m m a = [ 0.01 , 0.3162 , 10. ] C=[0.1,10.], gamma=[0.01,0.3162,10.] C=[0.1,10.],gamma=[0.01,0.3162,10.]这6种组合中,当 C = 10 , g a m m a = 0.316 C=10,gamma=0.316 C=10,gamma=0.316时,模型的分类能力最强.我们可以用下面的方法来验证: