一.交叉验证的定义
交叉验证,指的是把初始的数据集进行分组,一部分做为训练集来训练模型,另一部分做为测试集来评价模型。对于K折交叉验证的话,先将数据集D随机划分成k个大小相同的互斥子集,对于每个子集,尽可能保持数据分布的一致性;然后,每次用k - 1个子集的并集作为训练集,剩下的那个子集作为测试集,这样就获得了K组训练/测试集,从而可以进行K次训练和测试,此时给你一些模型性能的指标(如,准确率),最终的返回的是K个测试结果的均值,即整体的性能度量。
二.为什么要使用交叉验证法?
- 交叉验证用于评估模型的预测性能,尤其是训练好的模型在新数据上的表现,可以在一定程度上减小过拟合。
- 还可以从有限的数据中获取尽可能多的有效信息,即尽可能多的利用数据集的信息。
- 个人理解,从以上可以看出,交叉验证可以看做是综合了普通的性能度量和泛化能力的综合指标。
三.交叉验证法的作用
1.可用于模型调参
最典型的应用就是sklearn.grid_search库中的GridSearchCV类,不过此处它使用的是GridSearch算法来进行超参数的组合,并用交叉验证来评估超参数的组合的性能。最终选择交叉验证效果最好的那组超参数作为最终的参数。
不过这里有几点需要注意一下:
(1)交叉验证在此处仅仅是起一个性能评估的作用,实际的调参算法还是GridSearch。
(2)GridSearch算法(即"网格搜索")和穷举法类似,相当于遍历一遍所有可能的组合,最后返回最优的那个组合。“网格搜索”的方法很直观但是看起来有些原始。事实上有许多高级的算法,比如可以使用一些近似算法或启发式的搜索来降低复杂度。但是我们倾向于使用“网格搜索”这一简单的方法。
2.可用于评估模型
根据交叉验证法的特性,K折交叉验证法在训练的过程中可以采用不同的模型,所以根据最后测试集结果的平均值就可以粗略的判断模型的好坏。
3.可用于特征的选择
其基本的原理,也是基于多种特组合,选择交叉验证效果最好的那一组作为最终的特征集。
关于交叉验证在调参、评估模型和特征选择中具体的实现,可以参考:https://blog.csdn.net/jasonding1354/article/details/50562513
================================================================总结===========================================================================
交叉验证的核心在于它能够充分利用数据集中的信息,它可以看做是一个同时能够评估泛化能力的性能度量,它的最主要作用是在于它提供了一个评价指标。在它的所有应用中,也是这一点的具体的表现。