app开发者平台在数字化时代的重要性与发展趋势解析
715
2022-09-02
交叉验证-原理小结
交叉验证是模型调参时常常借助的工具和方法,本文整理交叉验证相关内容。
定义和概念
训练集、验证集、测试集
如果给定的样本数据充足,进行模型选择的一种简单方法是随机地将数据集切分成三部分,分别为训练集(training set) 、验证集(validation set)和测试集(test set)。其中:
训练集用来训练模型验证集用于模型的选择测试集用于最终对学习方法的评估
在学习到的不同复杂度的模型中,选择对验证集有最小预测误差的模型。由于验证集有足够多的数据,用它对模型进行选择也是有效的。但是,在许多实际应用中数据是不充足的。为了选择好的模型,可以采用交叉验证方法。
经验误差和泛化误差
先给出几个定义:
误差(error):模型预测的y和样本真实的y的差异;不同的loss对"误差"有不同的定义经验误差(empirical error):模型在训练集上的误差,也称为训练误差(train error)泛化误差(generalization):模型在未知/新样本上的误差过拟合(overfitting):训练误差小而泛化误差大,可能是因为模型复杂度过高,把训练集自身的特点当成总体的特点欠拟合(underfitting):训练误差比较大
看个图:
一般而言,欠拟合可以通过增加模型复杂度解决,如增加树的深度、增加迭代次数。而过拟合比较困难,交叉验证是一种缓解过拟合和模型调优的方法。
交叉验证
交叉验证的基本想法是重复地使用数据,把给定的数据进行切分,将切分的数据集组合为训练集与测试集,在此基础上反复地进行训练、测试以及模型选择。此时,我们把测试误差当做泛化误差的一种近似(因为我们假设训练样本和测试样本独立同分布),一般情况下我们要求训练集和测试集不能有交集。
简单交叉验证/留出法(hand-out)
简单交叉验证方法:
首先随机地将已给数据分为两部分,一部分作为训练集,另一部分作为测试集(例如70%的数据为训练集,30%的数据为测试集)然后用训练集在各种条件下(例如, 不同的参数个数)训练模型,从而得到不同的模型最后在测试集上评价各个模型的测试误差, 选出测试误差最小的模型
使用该方法需要注意:
训练集和测试集的数据分布尽量一致,比如分类任务中保证正负样本比相似由于数据划分有多种方式,可能导致模型评估不稳定可靠,一般可以多次采样,也就是多次使用留出法,采用多次评估指标的均值如果训练集中数据占比较多,此时模型更贴近用全量数据训练的模型,但是测试集较小,评估结果可能不稳定如果训练集中数据较少,和原始数据差异较大。此时降低了评估指标的保真性(fidelity)通常做法,训练集占比2/3~4/5
K折交叉验证
应用最多的是K折交叉验证(K-fold cross validation),方法如下:
留一交叉验证
K折交叉验证的特殊情形是K=N, 称为留一交叉验证(leave-one-out cross validation),往往在数据缺乏的情况下使用。这里,N是给定数据集的容量。工作其实不会用,10w数据要训练10w个模型,谁有那闲工夫~
训练集、验证集、测试集的概念 交叉验证相当于把训练集和验证集放在一起了? 测试集上检验模型效果,怎么检验?也只是看有没有过拟合吧,如果数据本身质量堪忧,那么效果本身就不好啊
自助法(Bootstrap)
数据集较小时,可以采用自助法,其逻辑很简单:
其他问题
首先,交叉验证是为了选择合适的模型,使得泛化误差尽可能小当我们选择好模型参数时,模型的复杂度其实已经确定(即交叉验证所得最优模型)此时,训练数据越多,一般模型效果会更好,因此会再训练一次
工作中,我们通常是训练集训练、验证集调参、测试集检验泛化能力,其实也是在做K-flod cv,无非同一组参数只训练一次而不是K次,否则训练时间太久了
Ref
[1] 李航《统计学习方法》Ch1.5.2 [2] 周志华《机器学习》Ch2.2.2
2020-03-01 于南京市栖霞区
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~