交叉验证、网格搜索的目的都是寻找最优超参;
- 知道交叉验证是什么?
- 知道网格搜索是什么?
- 知道交叉验证网格搜索API函数用法
- 能实践交叉验证网格搜索进行模型超参数调优
- 利用KNN算法实现手写数字识别
1. 交叉验证:
交叉验证 本质上就是复验即重复校验;多验几回,最后求均值;
交叉验证法,是划分数据集的一种方法,目的就是为了得到更加准确可信的模型评分。
(图示:交叉验证也叫几折验证,将数据集分成n份,图中分成了4份即 4折交叉验证,分成了几份就叫几折验证;第一次:把第一份当做验证集即测试集,其他的当做训练集来训练模型,训练之后再用第一份的验证集进行验证,得到 80%的正确率;第二次:把第二份当验证集、其他的当做训练集,重新对模型进行训练、进行预测了,又会得到一个78%的正确率;第三次拿第3份做验证、第四次拿第4份做验证;一共验证了4次。4折就是4次,几折就是几次。在划分之前只做一次,80%就作为最终得分、但现在4折是验证了4次,就要算一下几个值的平均值78.75作为最终的结果。如果哪一次最好,再使用全部的训练集对它再做一次训练,训练完后在使用测试,假设最后一次得分最高,拿总的4份做训练,最后的一份(红色部分’验证集’)做测试即谁得分最好,在使用全部的对它再训练一次,再做一次评估;)
2. 网格搜索:
简述:
(图示:交叉验证是多验几回,最后求均值;上图交叉验证图里面的k与KNN算法中的K不是一个,前者k只是把数据分成几份、KNN中的K表示找最近的K个邻居(样本);交叉验证就是复验,复验几次,而网格搜索才是找最有超参,什么是最有超参?KNN算法中创建模型对象estimator=KNeighborsClassifier(n_neighbors=3)中的3这种用户手动录入的变化的数据就称为超参。为什么叫网格搜索?因为模型有很多超参,其能力也存在着很大的差异,如 n_neighbors=3时准确率可能是93.多,=5准确率可能96.多,所以需要手动产生很多超参的组合:此种模型只有一个参数即3,但可能模型需要3个参数,那组合方式有2的3次方=8种;所以网格搜索时帮忙寻找最有超参;为什么每组超参都采用交叉验证评估?假如拿着3这个参数只测一回,不能说明最终的准确率,因为要复验,多测几次;当 n_neighbors=[1,2,3,5,7],结合4折验证,程序共执行了20次:因为每一个参数都要经过4折验证,4折验证就是4回,则一共执行4*5=20回;[1,2,3,5,7]结合不同折的验证,效果会不一样:如4折验证时可能2最好,7折验证时可能5最好,所以网格搜索时帮忙寻找最优超参。
网格搜索时模型调参的有力工具,啥叫模型调参?n_neighbors=3为什么=3不等于其他值,此为模型调参。
将来寻找最有超参可使用:网格搜索+交叉验证。
为什么叫网格搜索?:本来是n_neighbors=3参数值只有一个3,它会像网格一样划分很多值如 [1,2,3,5,7],每个参数都结合交叉验证去验证哪个参数最好;像网格一样将参数隔开,去做排列组合;)
API解释: