一、为什么要使用交叉验证
在机器学习或者深度学习的过程中,划分数据集是一个十分重要的工作,我们在进行交叉验证的时候,可以有效的减少过拟合的情况,尽可能的利用数据的全部的有效特征来进行训练模型。
另外,如果存在数据分布不均衡的情况,可能会将结果的accuary降低,因此,在我们进行划分数据集的时候,需要注意数据集的分布的情况,如果是做一个分类的任务的话,是需要不同类别之间的数据的数量大概一致的,比如如果是三分类问题,第一类数据有10w条,第二类和第三类数据有1000条的话,是很容易出现欠拟合的情况。
如果出现数据不均衡的情况,我们可以采取两种方式来进行处理,比如上面的例子中,一种是利用数据增强的方法来增加数据中第二类第三类的数量,可以采取重采样(重采样可以参考我以前写过的博客),翻转,反转等方式,另外,也可以将第一类的数据减少至和第二类和第三类的数量相类似的数量。
这一部分的具体内容会在别的博客中进行撰写。
重采样:http://blog.csdn.net/SuperYR_210/article/details/78952152
二、交叉验证的概念
交叉验证(Cross-validation)主要用于建模应用中,例如PCR 、PLS 回归建模中。在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和。来自百度百科:https://baike.baidu.com/item/%E4%BA%A4%E5%8F%89%E9%AA%8C%E8%AF%81/8543100?fr=aladdin
三、交叉验证的方法
在进行划分数据集的时候,一般是有两种划分方式,一种是将数据集划分为训练集(train set)、测试集(test set)和验证集(validation set),一种是将数据集划分为训练集和测试街。两种划分数据集的方法的区别主要是在于,验证集用于进一步确定模型中的超参数,对于测试集来说,是为了验证模型的精度的,和训练集是相对应的。但使不管是采取哪种划分方式,都是可以采取以下方式来进行划分的。
1、留一法
原理:
假设数据的个数为N,在进行验证的时候,将数据划分为N份,其中的N-1份为训练集,N份为测试集,是一种特殊的交叉验证。
代码:
2、K折交叉验证
原理:
将数据集划分为不相交的K个子集,在进行训练的时候,每次随机的选