机器学习基础知识之交叉验证

交叉验证定义

在使用某一个数据集对模型进行训练时,模型的实际训练情况会受到数据集的直接影响,且其实际训练结果是难以确定的,极有可能出现欠拟合与过拟合的情况。欠拟合一般是指模型对数据集训练不足,从而在训练数据集与测试数据集上表现都较差,过拟合是指模型单纯在对训练数据集的信息获取上表现较为优秀,但当应用与测试数据集时则会表现较差。模型是否表现出欠拟合的情况可以直接从模型在训练数据集上的表现可以看出,而是否出现过拟合的情况则需要采用测试数据集对模型进行验证,因此通常在对模型使用某个数据集进行训练后,还要将此模型应用到另一个数据结构相同的数据集上,倘若在新的数据集上此模型的应用效果表现优秀,则对此模型的训练才算成功。
由于在实际的研究过程中,使用两组数据结构相同但具体数据信息不同的数据集进行相关实验会增加实验的复杂度,因此通常会对需要进行实验的数据集进行分组,从中选出一部分数据集作为训练数据集对模型进行训练,剩下的部分数据集作为测试数据集对训练好的模型进行验证。这种验证方式被称为交叉验证(Cross Validation,简称CV),该方法方法主要用于对训练好的模型在实际数据预测或数据分类时的准确度进行估计,以此来判断此模型的泛化能力是否优秀。交叉验证可以对训练完成的模型性能进行评估,以此确定在此数据集上表现最好的模型,另外它还可以在一定程度上减小模型对数据的过拟合和欠拟合,从新的数据上获得更多的有效信息。
目前常用的交叉验证方法主要有四种,它们分别为随机子抽样验证(Hold-out Method)、K折交叉验证(K-fold Cross Validation)、留一法交叉验证(Leave-one-out Cross Validation)以及自助采样验证(Bootstrapping)。

1、随机子抽样验证

随机子抽样验证提出时间相对其他几种交叉验证方法最早,严格来说,随机子抽样验证对数据集并没有交叉使用,它涉及到的只是单纯的将原数据集随机分成两组,一组作为训练数据集对模型进行训练,一组作为测试数据集用于模型的验证过程。此方法相对来说操作简单,只涉及到数据集的随机分组,但是当使用这种方法对数据集进行分组之后,训练数据集与原始数据集或测试数据集与训练数据集的数据分布情况可能会存在很大的区别,因此容易导致训练好的模型只在训练数据集上表现优秀,而在测试数据集上表现较差,即最后测试数据集的验证结果与数据集的随机分组情况有很大的关系。由于上述问题的存在,通过此方法得到的验证结果在某些时候并不具有说服性。
在这里插入图片描述

2、K折交叉验证

K折交叉验证是在随机子抽样验证的基础上进行改进后提出的方法,与随机子抽样验证不同的是,此方法不重复抽样将原始数据集随机平均分成K组,从而获得K个子数据集,然后进行K次模型的训练与测试过程。在每次训练与测试过程中选取K个子数据集中的一个作为模型的测试数据集,其余的K-1子数据集作为模型的训练数据集,然后进行相关实验,获得验证数据集上的验证评估结果。最后将K个测试数据集上的验证评估结果进行平均计算以获得最后的验证评估结果。
使用K折交叉验证对模型性能进行验证时,原始数据集中每个样本数据既被用作于训练数据集,也被用作于测试数据集,因此在验证结果中可以避免过拟合的情况发生,较随机子抽样验证也更有说服性。但其依旧存在一个缺点,那就是对于K值的确定方式没有一个统一的方法,一般只有在数据量较小的情况下会将K值取值为2,其他时候均选取3及其以上的正整数。
在这里插入图片描述

3、留一法交叉验证

留一交叉验证法与K折交叉验证的中心思想是相同的,均让数据集中的每个样本数据既作为训练数据,也作为测试数据。其不同点在于K折交叉验证选用的每个测试数据均为数据集,而留一交叉验证法所选用的为单个的样本数据。
假设原始数据集中有N个样本数据,那么将对模型进行N次训练与测试过程,每次训练与测试过程中,原始数据集中的每个样本数据将被依次选择作为测试过程的测试数据,其余N-1个样本数据将被作为训练过程的训练数据集,最后针对N个验证评估结果进行平均计算以获得最后的验证评估结果。
此方法最大的优点在于交叉验证的过程中所有样本都用于模型训练,因此训练数据集样本的分布特点最接近于原本样本数据集,在此基础上评估得到的结果更可靠。但是由于每个样本数据依次作为测试数据,若当原始数据集的样本总量N为一个较大值,则由此带来的模型计算量以及模型训练时间则会相对较大,因此计算成本相对较高。
在这里插入图片描述

4、自助采样验证

自助采样验证是一种使用较少的特殊交叉验证方法,它一般应用于数据量较少的数据集。这种方法最大的特点在于通过有放回的随机采样方式从原始数据集中选出训练数据集,未被选中的数据作为测试数据集,在数据集较小时,这种方法可以有效帮助进行训练数据集与测试数据集的划分。
假设原始数据集中有N个样本数据,那么将对该原始数据集进行N次有放回的随机抽取,然后将N个被抽取出来的样本数据作为训练数据集,原始数据集中未被抽取过的样本数据作为测试数据集,一般来说,当N值趋近于无穷大时,约有36.8%的样本数据作为测试数据集。
使用此方法最后获得的训练数据集与原始数据集大小完全相同,而测试数据集约占训练数据集的1/3,因此训练数据集与测试数据集的划分比例较为合理,但是一旦数据过大时,训练数据集的数据分布情况则会与原始数据集之间存在较大的出入,对模型的验证结果会有比较大的影响。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42051846/article/details/129441378
今日推荐