目录
3、python实现交叉验证cross_val_score(网格搜索算法GridSearchCV)
2)sklearn中的cross_val_score()函数参数
前面写了一篇关于参数(C,gamma)的文章,但是只是从感性上去说明了一下参数对模型和结果的影响,但没有说明如何对参数(C,gamma)进行选择。因此写下这篇。
一、(C,gamma)简介
对于SVM模型,最主要的参数就是C和gamma,C被称为惩罚因子,越大说明对错误的容忍度越小,可能发生过拟合(overfitting),C太小可能会导致容错率过高,这样的模型就没有意义了。
对于C和gamma参数的确定,一般是通过交叉验证的方法来进行确定的,大概思路就是将C和gamma参数在一定地取值范围内按照一定的步长(默认为1)进行取值组合,在不同(C,gamma)的组合下,将训练集样本均分成k组,一组作为验证的数据样本,其余k-1组则用来作为训练的数据,每一组数据都轮流着作为验证数据样本,这样在一组(C,gamma)组合下,就需要进行K次计算,把这K次计算的模型测试准确率score的均值作为这组(C,gamma)下模型的得分。这样的话就能够得到不同(C,gamma)组合下模型的得分,取得分最高的那组(C,gamma)即可,如果碰到有相同分的,一般考虑参数C,取C小的,因为在保证模型的准确率的情况下,C越小模型容错率大,可以避免过拟合,若C也相同,则取先出现的那一组gamma
二、交叉验证
1、什么是交叉验证?
主要使用k-fold Cross Validation(记为k-CV)
就是将训练样本集进行均分,比如将训练样本集均分为k组,称为k折,每次k-1折进行训练,另一折用于验证,每一组数据轮换作为验证数据。这里验证的是模型的识别率(accuracy)。在每一组(C,gamma)下对每一折数据进行轮换验证,这就是交叉验证,一般折数越多,越精确,但是计算的时间就会增加,需要在效率和精度之间进行权衡。
将C和gamma参数在一定地取值范围内按照一定的步长(默认为1)进行取值组合,在不同(C,gamma)的组合下,将训练集样本均分成k组,一组作为验证的数据样本,其余k-1组则用来作为训练的数据,每一组数据都轮流着作为验证数据样本,这样在一组(C,gamma)组合下,就需要进行K次计算,把这K次计算的模型测试准确率score的均值作为这组(C,gamma)下模型的得分。这样的话就能够得到不同(C,gamma)组合下模型的得分,取得分最高的那组(C,gamma)即可,如果碰到有相同分的,一般考虑参数C,取C小的,因为在保证模型的准确率的情况下,C越小模型容错率大,可以避免过拟合,若C也相同,则取先出现的那一组gamma
2、参数优化方法
可能很多人会有点懵,难道交叉验证不是一