【机器学习入门】解决过拟合的又一方法:交叉验证

在上一篇文章当中我们说到,可以使用正则化来解决过拟合问题,今天我们再来介绍另一种方法:交叉验证法。

那么,什么是交叉验证呢?

交叉验证:

一般的情况下,交叉验证法指的是将数据集随机切分为训练集验证集测试集这三部分,训练集用来训练模型**,验证集用于训练过程中模型的验证和选择,也就是说如果存在着多个模型,从中挑选出训练误差最小的那个模型,而测试集是用来对选定的模型进行一个总的评估

交叉验证的原理:

如果模型在训练集以及验证集中表现效果很好,也就是拟合度很好,而在测试集中拟合效果较差,那么就说此时模型出现了过拟合问题。
这也就是交叉验证能避免过拟合的原理。

交叉验证的使用场合:数据集较小的情况下;

当数据较小的时候,可以利用交叉验证的方法将训练集切分为很多份,然后进行组合,以此扩大可用训练集的数量,训练出较好的模型。

交叉验证的种类:

按照样本切分和组合的方式,可以分为一下几种:

  • Holdout检验
  • 简单交叉验证
  • K折交叉验证
  • 留一交叉验证

Holdout检验(holdout cross validation):

这种方法是将数据集分为两个集合,A和B,A作为训练集,B作为测试集,先使用A训练模型,然后利用B来验证模型的效果。
指标可以用平均绝对误差(MAE)、平均绝对百分比误差(MAPE)、精确率、召回率或是绘制ROC曲线来进行评估。
总体来说,Holdout并不是一种很好的检验方法,其在测试集的基础上所计算出来的各种统计指标,十分依赖于刚开始的分类,与原始的分组情况有着很大的关系

K折交叉验证(k-fold cross validation):

将数据集切分成为K个互不相交的大小相同的数据集,利用其中K-1个集合作为训练集训练模型,用剩余一个子集进行测试,重复上述步骤K次,选出平均测试误差最小的模型。

显而易见,当K的取值越大的时候,统计的偏误也就越小,但这也会带来一个问题,就是计算量变大,计算成本变高。

经过长期实验人们发现,当K取值为10的时候,代价与模型之间的能够达到很好的平衡。

留一交叉验证(Leave one out cross validation):

使用场合:K等于样本数N时,在数据缺乏的情况下使用。
假设样本数据集中有N个样本,将其中一个单独作为测试集,其中N-1个样本作为训练集进行训练模型,重复K(N)次,得到N个模型,用N个模型的分类准确率的平均数作为分类器的性能指标。

优点:每一个模型几乎使用所有的样本来训练模型的,并且由于最终取平均的原因,结果较为可靠。
缺点:当N比较大时,计算耗时,计算成本较高。

自助法(Bootstrap):

假设给定的数据集包含d个样本。将该数据集有放回地抽样m次,产生m个样本的训练集。这样原数据样本中的某些样本很可能在该样本集中出现多次,没有进入该训练集的样本最终形成检验集(测试集)。

显然每个样本被选中的概率是1/m,因此未被选中的概率就是(1-1/m),这样一个样本在训练集中没出现的概率就是m次都未被选中的概率,即(1-1/m)^m。

当m趋于无穷大时,这一概率就将趋近于e^-1=0.368,所以留在训练集中的样本大概就占原来数据集的63.2%。

优点:训练集的样本数和原数据机一样都是m,并且有三分之一的数据可以作为训练集,适合样本数较少的数据集。
缺点:经过抽样的数据分布与原始数据的数据分布不同,会导致偏差增大

你可能感兴趣的:(机器学习入门,人工智能,深度学习)