交叉验证(Cross Validation)

交叉验证(Cross Validation

交叉验证,有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法。于是可以先在一个子集上做分析,而其它子集则用来做后续对此分析的确认及验证。一开始的子集被称为训练集。而其它的子集则被称为验证集测试集。交叉验证的目标是在训练阶段定义一组用于“测试”模型的数据集,以便减少像过拟合的问题,得到该模型将如何衍生到一个独立的数据集的提示。

1.训练集 vs. 测试集

在模式识别与机器学习的相关研究中,经常会将数据集分为训练集跟测试集这两个子集,前者用以建立模型,后者则用来评估该模型对未知样本进行预测时的精确度,也即泛化能力(generalization ability)。怎么将完整的数据集分为训练集跟测试集,必须遵守如下要点:

  • 只有训练集才可以用在模型的训练过程中,测试集则必须在模型完成之后才被用来评估模型优劣的依据。
  • 训练集中样本数量必须够多,一般至少大于总样本数的50%。
  • 两组子集必须从完整集合中均匀取样。

2.交叉验证的使用 

交叉验证法的基本思想就是将原始数据进行分组,一部分做为训练集来训练模型,另一部分做为测试集来评价模型。

假设有个未知模型具有一个或多个待定的参数,且有一个数据集能够反映该模型的特征属性(训练集)。适应的过程是对模型的参数进行调整,以使模型尽可能反映训练集的特征。如果从同一个训练样本中选择独立的样本作为验证集合,当模型因训练集过小或参数不合适而产生过拟合时,验证集的测试予以反映。 交叉验证是一种预测模型拟合性能的方法。

3.常见的交叉验证形式

Hold-out 验证

严格意义上说,Holdout 验证并非一种交叉验证,因为数据并没有交叉使用。 随机从最初的样本中选出部分,形成交叉验证数据,而剩余的就当做训练数据。 一般来说,少于原本样本三分之一的数据被选做验证数据。此种方法的好处的处理简单,只需随机把原始数据分为两组即可,因此用于样本数量较多的情况。

k折交叉验证(k-CV)

k折交叉验证(k-fold cross-validation),将训练集分割成k个子样本,一个单独的子样本被保留作为验证模型的数据,其他k − 1个样本用来训练。交叉验证重复k次,每个子样本验证一次,平均k次的结果或者使用其它结合方式,最终得到一个单一估测。这个方法的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次,可以有效的避免过学习以及欠学习状态的发生,10次交叉验证是最常用的。

留一验证(LOO-CV)

正如名称所建议,留一验证(leave-one-out cross-validation, LOOCV)意指只使用原本样本中的一项来当做验证样本,而剩余的则留下来当做训练样本。该方法用于样本数较少的情况。这个步骤一直持续到每个样本都被当做一次验证样本。 事实上,这等同于k折交叉验证,是k折交叉验证的一种特殊情况,其中k为原本样本个数。在某些情况下是存在有效率的算法,如使用kernel regression 和吉洪诺夫正则化。相比于前面的K-CV,LOO-CV有两个明显的优点:

  • 每一回合中几乎所有的样本皆用于训练模型,因此最接近原始样本的分布,这样评估所得的结果比较可靠。
  • 实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。

自助法(bootstrapping)

这是一种比较特殊的交叉验证方式,用于样本量少的时候。比如我们有m个样本(m较小),每次在这m个样本中随机采集一个样本,放入训练集,采样完后把样本放回。这样重复采集m次,我们得到m个样本组成的训练集。当然,这m个样本中很有可能有重复的样本数据。同时,用没有被采样到的样本做测试集。这样接着进行交叉验证。由于我们的训练集有重复数据,这会改变数据的分布,因而训练结果会有估计偏差,因此,此种方法不是很常用,除非数据量真的很少,比如小于20个。


【补充】

1.十折交叉验证:10-fold cross validation

英文名叫做10-fold cross-validation,用来测试算法准确性。是常用的测试方法。将数据集分成十分,轮流将其中9份作为训练数据,1份作为测试数据,进行试验。每次试验都会得出相应的正确率(或差错率)。10次的结果的正确率(或差错率)的平均值作为对算法精度的估计,一般还需要进行多次10折交叉验证(例如10次10折交叉验证),再求其均值,作为对算法准确性的估计。

之所以选择将数据集分为10份,是因为通过利用大量数据集、使用不同学习技术进行的大量试验,表明10折是获得最好误差估计的恰当选择,而且也有一些理论根据可以证明这一点。但这并非最终诊断,争议仍然存在。而且似乎5折或者20折与10折所得出的结果也相差无几。

2.交叉验证中的“交叉”体现在哪儿?

交叉验证是在机器学习建立模型和验证模型参数时常用的办法。交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。

 

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值