交叉验证(Cross
Validation,CV)是为了得到可靠稳定的模型在机器学习、数据挖掘中经常要用到的技巧。将数据样本切割成较小子集的实用方法。于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证。 一开始的子集被称为训练集。而其它的子集则被称为验证集或测试集。但是这个划分数据集过程常常会导致过度专门化(over-specialization)的问题,即数据的性质分布不均匀,将会导致由训练集训练出来的学习模型,在测试集上表现的很差,类似于过拟合(over-fit)的现象。基于这个原因,我们希望能够重复多次的进行训练学习模型和测试模型步骤。通过随机化抽样的方法选定K个不同的训练集和测试集,分别用来训练出学习模型和测试模型。最后,通过取K个学习模型性能的均值,来解决过度专门化的问题。
而这个过程也称之为交叉验证(Cross-Validation)。
交叉验证有如下三种方法:
(1)Hold-Out Method
随机从最初的样本中选出部分数据样本形成交叉验证数据,而剩余的就当做训练数据,记录最后的分类准确率为此Hold-OutMethod下分类器的性能指标.一般来说,少于原本样本三分之一的数据被选做验证数据。一般来说,Holdout
验证并非一种交叉验证,因为数据并没有交叉使用。,由于是随机的将原始数据分组,所以最后验证集分类准确率的高低与原始数据的分组有很大的关系,所以这种方法得到的结果其实并不具有说服性。
(2)K-fold
cross-validation(K-CV)
K次交叉验证,初始采样分割成K个子样本,一个单独的子样本被保留作为验证模型的数据,其他K-1个样本用来训练。交叉验证重复K次,每个子样本都要做一次验证集,即第一次第一个子样本做验证,第二次第二个子样本做验证。最后,我们K次的结果做一个平均,最终得到一个单一估测。这个方法的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次,10次交叉验证是最常用的。
(3)Leave-One-Out Cross Validation(留一验证,LOO-CV)
留一验证指只使用原本样本中的一项(一个样本)来当做验证资料, 而剩余的则留下来当做训练资料。 这个步骤一直持续到每个样本都被当做一次验证资料。
事实上,这等同于 K-fold 交叉验证是一样的,其中K为原本样本个数。
这样做有如下优点:
① 每一回合中几乎所有的样本皆用于训练模型,因此最接近原始样本的分布,这样评估所得的结果比较可靠。
② 实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。
但LOO-CV的缺点则是计算成本高,因为需要建立的模型数量与原始数据样本数量相同,当原始数据样本数量相当多时,LOO-CV在实作上便有困难几乎就是不显示,除非每次训练分类器得到模型的速度很快,或是可以用并行化计算减少计算所需的时间。
参考文献: