交叉验证是一种模型验证技术,用于评估统计分析结果如何推广到独立数据集。它主要用于目标是预测,并且人们希望估计预测模型在实践中的准确度的环境中。在预测问题中,通常给模型提供训练运行的已知数据(训练数据集)的数据集,以及测试模型的未知数据(或首次看到的数据)的数据集(称为验证数据集或测试设定)。交叉验证的目标是定义一个数据集以在训练阶段(即验证集)“测试”模型,以限制过度拟合等问题,并提供关于模型如何推广到一个独立的数据集(即未知数据集,例如来自实际问题)的相关结果。
一轮交叉验证包括将数据样本划分为互补子集,对一个子集(称为训练集)执行分析,并在另一个子集(称为验证集或测试集)上验证分析结果。为了减少可变性,在大多数方法中,使用不同的分区执行多轮交叉验证,并且在这些回合中验证结果被组合(例如,平均)以估计最终的预测模型。
使用交叉验证而不是使用传统验证的主要原因之一(例如,将数据集划分为两组70%用于训练和30%用于测试)是因为没有足够的数据将其分成单独的训练和测试集,但又不想失去失去重要的建模或测试能力。在这些情况下,正确估计模型预测性能的公平方法是使用交叉验证作为强大的通用技术。
交叉验证可以分为穷举和非穷举两类:
穷举的交叉验证又分为:
- 留出p个观察值(LpO CV)作为验证集,其余观察值作为训练集,并不断重复这一过程,直到所有的样本都循环完。
- 留一验证(LOOCV),意指只使用原本样本中的一项来当做验证资料,而剩余的则留下来当做训练资料。留一验证可以看作是p=1时的特殊情形。
非穷举的交叉验证又分为:
- K次交叉验证(k-fold cross-validation),将训练集分割成K个子样本,一个单独的子样本被保留作为验证模型的数据,其他K-1个样本用来训练。交叉验证重复K次,每个子样本验证一次,平均K次的结果或者使用其它结合方式,最终得到一个单一估测。这个方法的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次,10次交叉验证是最常用的。
- Holdout验证,常识来说,Holdout验证并非一种交叉验证,因为数据并没有交叉使用。随机从最初的样本中选出部分,形成交叉验证数据,而剩余的就当做训练数据。一般来说,少于原本样本三分之一的数据被选做验证数据。
- 重复随机子抽样验证(Repeated random sub-sampling validation):这种方法也称为蒙特卡洛交叉验证,每次随机将数据集分解为训练和验证数据,然后用训练数据拟合模型,并且使用验证数据评估预测准确性。这种方法(超过k倍交叉验证)的优点是,训练/验证拆分的比例不依赖于迭代次数(折叠),缺点是有些观测值可能从未被选入验证子样本,而其他观测值可能不止一次被选中。换句话说,验证子集可能会重叠。另外由于随机性的存在,每次实验结果可能有所不同。
交叉验证可用于比较不同预测建模程序的性能。例如,假设我们对光学字符识别感兴趣,并且我们正在考虑使用支持向量机(SVM)或k近邻(KNN)来预测手写字符图像中的真实字符。使用交叉验证,我们可以根据它们各自误分类字符的分数客观地比较这两种方法。如果我们简单地比较基于样本内误差率的方法,那么KNN方法可能表现得更好,因为它比弹性支持向量机方法更灵活,但也更容易出现过度拟合。
交叉验证也可用于变量选择。假设我们使用20种蛋白质的表达水平来预测癌症患者是否会对药物产生反应,在实际建模中往往需要确定应该使用20个特征的哪个子集来产生最佳预测模型。如果我们使用样本内错误率比较特征子集,则使用全部20个特征时将产生最小的错误。然而,在交叉验证下,最适合的模型通常只是20个特征的一个子集。
发展历史
描述
交叉验证从提出以后就得到了广泛的使用和分析。1983年美国统计学家杂志邀请Bradley Efron和Gail Gong提供了一篇文章,回顾了统计误差的非参数估计,主要是估计量的偏差和标准误差,或预测规则的误差率。涉及到的方法有自助法(bootstrap),刀切法(Jackknife)和交叉验证。
1995年Kohavi也对交叉验证和自助法进行了比较。当时的使用人为数据的实验结果显示在模型选择任务中,十倍交叉验证可能比更昂贵的留一验证更好。他在论文中使用了不同的折叠次数(K),以及分层(stratified)和未分层的折叠。对于自助法,他使用不同的bootstrap样本数量。结果表明,即使计算能力允许使用更多的折叠(K),用于模型选择的最佳方法是10K次交叉验证
Anders Krogh, Jesper Vedelsby将神经网络的模糊度(ambiguity)被定义为集成成员(ensemble members)的输出在未标记数据上的平均值的变化,因此它量化了网络间的不一致。他们讨论了如何结合交叉验证和模糊度来给出一个集成泛化误差(ensemble generalization error)的可靠的估计,以及这种类型的集成交叉验证(ensemble cross-validation)如何有时可以提高模型性能。他们同时讨论了如何使用未标记数据估计集成成员的最优权重。2003年Hawkins等人通过理论论证和大量基于QSAR(Quantitative structure–activity relationship)数据集的经验研究表明,当可用样本量小于几百个时,将其中一部分分离出来作为测试集是很浪费的,而交叉验证是一个更好的选择。
正是由于交叉验证是一种简单却有效的方法,有关交叉验证的研究非常多,并且在模型选择的方向已经给出了很多不同的结果,2010年Arlot和Celisse试图这些结果与模型选择理论的最新进展联系起来,将经验性陈述与严谨的理论结果区分开来,并根据不同问题的不同特点提供了选择最佳交叉验证程序的意见。
主要事件
年份 | 事件 | 相关论文/Reference |
1983 | 1983年美国统计学家杂志邀请Bradley Efron和Gail Gong提供了一篇文章,回顾了统计误差的非参数估计,主要是估计量的偏差和标准误差,或预测规则的误差率。涉及到的方法有自助法(bootstrap),刀切法(Jackknife)和交叉验证。 | Efron, B. & Gong, G. (1983). A Leisurely Look at the Bootstrap, the Jackknife, and Cross-Validation, The American Statistician, 37(1): 36-48. |
1995 | Kohavi也对交叉验证和自助法进行了比较 | Kohavi, R.(1995).A Study of Cross-Validation and Bootstrap for Accuracy Estimation and Model Selection.Appears in the International Joint Conference on Arti cial Intelligence (IJCAI). |
1995 | Anders Krogh, Jesper Vedelsby讨论了如何结合交叉验证和模糊度来给出一个集成泛化误差(ensemble generalization error)的可靠的估计,以及这种类型的集成交叉验证(ensemble cross-validation)如何有时可以提高模型性能。 | Krogh, A.; Vedelsby, J. (1995). Neural Network Ensembles, Cross Validation, and Active Learning. NIPS. |
2003 | Hawkins等人通过理论论证和大量基于QSAR(Quantitative structure–activity relationship)数据集的经验研究表明,当可用样本量小于几百个时,将其中一部分分离出来作为测试集是很浪费的,而交叉验证是一个更好的选择。 | Hawkins, D. M.; Basak, S. C.; Mills, D. (2003).Assessing Model Fit by Cross-Validation.Journal of Chemical Information and Computer Sciences.43(2): 579-586. |
2010 | Arlot和Celisse试图将关于交叉验证的研究结果与模型选择理论的最新进展联系起来,将经验性陈述与严谨的理论结果区分开来,并根据不同问题的不同特点提供了选择最佳交叉验证程序的意见 | Arlot, S.; Celisse, A.(2010). A survey of cross-validation procedures for model selection. Statist. Surv. 4: 40—7. |
发展分析
瓶颈
若将过多的数据分为验证集,则用于训练模型的数据量会减小,而若使用K次交叉验证等方法循环使用样本,又会增加计算成本。
未来发展方向
对不同评估方法之间的比较(如自助法vs交叉验证),以及对交叉验证进行改进以获得更高的运行效率。
Contributor: Yuanyuan Li