我们在看论文时,经常会看到文章中出现“5折交叉验证”等字样,那么什么是k折交叉验证呢
在机器学习领域,K折交叉验证(K-fold cross validation)是一种常用的模型评估方法。其原理是将原始数据集随机分成K个子集,其中一个子集作为验证集,剩余的K-1个子集作为训练集,进行K次模型训练和验证。最终将K次验证结果的均值作为模型的评估结果,从而得到更可靠的模型效果评估指标。
那么我们为什么要使用k折交叉验证呢?
K折交叉验证在机器学习中具有重要意义,主要原因包括:
- 可以更好地评估模型的泛化能力,减少过拟合的风险;
- 充分利用数据集中的信息,提高模型评估的准确性;
- 对于小样本数据集,K折交叉验证可以更好地评估模型的性能;
- 在模型选择和超参数调优过程中,K折交叉验证可以提供客观的评价依据
bestc = 0;bestg = 0; bestacc = 0;
c=10.^(-4:4);
g=2.^(-3:1:4);
for i =1:length(c)
for j = 1:length(g)
cmd = ['-v 5 ','-c ',num2str(c(i)),' -g ',num2str(g(j))];%5折交叉验证
acc = svmtrain(train_label',train_sample,cmd);
acc = svmtrain(train_label',train_sample,cmd);
if acc > bestacc
bestc = c(i);
bestg = g(j);
bestacc = acc;
end
end
end
注意,我们最终得到是一组参数,即选择最优的c和g,而不是一个model。
参数c与惩罚项有关,而参数g是核函数中的gamma函数设置(这两个参数的取值在代码中已体现)。
选完这两个参数,再使用svmtrain函数进行训练和svmpredict进行预测就可以啦。
参考文章:
【1】k折交叉验证