机器学习中,测试集的误差反而比训练集的误差要低,这个该咋解释

这种现象乍一看不怎么符合常理,其实并不算罕见,主要问题在于训练集和测试集的分布差异可能比较大。
用生活中的例子来类比,平时做卷子的平均得分比正式考试时的的得分要低。这种现象其实很常见,最可能的解释是老师在不能准确估计正式考试难度的情况下,或者考虑到正式考试时因为紧张等原因可能不如平时发挥得好的情况下,平时给学生做的卷子难度偏高。
所以机器学习中常用的做法是从同一个数据集中随机选取一定比例的样本作为测试集,剩下的作为训练集。这就是为了避免训练集和测试集分布不同的问题。
如果我们假设平时出的卷子和正式考试的卷子都是从一个题库里随机抽题编制而成的,仍然出现了平时做卷子的平均得分比正式考试时的的得分要低的现象。那么,可能的一个解释是,因为正式考试仅仅是一张试卷,有可能碰巧抽到学生擅长的题目,而平时的卷子因为量很大,所以减少了运气因素的影响。
类比机器学习,就是测试集占的比例太低,或者原始数据集本来样本就不怎么多,按一定比例划分后,训练集的样本还勉强充足,测试集的样本就很少,然后碰巧出现对模型来说测试集比训练集总体来说要“容易”的情况。
再回到卷子的例子上来。如果一个学生主要依靠背题“学习”的话,即使正式考试的题目比平时容易,但因为和做过的题目不一样,这个学生得分还是会比平时练习要低。
在机器学习而言,就是模型本身不能过拟合,概括性要好。一般而言,越是简单的模型越不容易过拟合。
所以,总的来说,训练集和测试集不是取自同一数据分布,测试集样本较少,模型比较简单,就有可能出现测试集误差反而低于训练集的现象。
相应的解决方案就是,尽量从同一数据集划分训练集和测试集,保证测试集样本充足(比如增加数据)。不太建议单纯因为训练集误差高于测试集误差就换用复杂模型,这么做可能沦为强行过拟合、治标不治本。

■网友
做的什么任务,有啥特征有多少维,label是啥有多少,训练集测试集咋分,训练样本有多少测试样本有多少,用的啥算法。出现你说的情况时测试误差训练误差各位多少,训练误差是否符合预期。换算法还是不是出现类似情况。参数咋调的,调整不同参数是不是还会出现类似情况。
先补充清楚这些点吧。

■网友
这个问题 我也碰到过。 虽然test结果更好,但是你要很小心,要排除这不是有问题在里面。1 确定是随机分的 样本2 确定 variable 没问题 test和 train的distribution3在 test里面有没有leakage,或者test leak 更多4比较一下test和 train里variable 的 information有差距么总之有很多,要小心不是你自己认为导致的就好了。查完这些,你应该大体知道一些原因了。如果还不知道,你就需要拿一些新数据再验证一下手机扣字真累
■网友
dropout特别高的时候应该会出现这种现象吧
■网友
【机器学习中,测试集的误差反而比训练集的误差要低,这个该咋解释】 数据泄露的可能性多点。假设有这样的情况,测试样本里有与训练集一模一样或者类似的样本,而且比例还很大。就好像一个学生还没背完题库,但是考试里却老是出那种跟他背过的一样的题目,而且数量还不少,那他岂不是开心坏了。

■网友
在训练imagenet的时候,如果用一些轻量的模型有时也会出现这个现象。我的解释是,训练集的噪声大于验证集导致的……
■网友
我在做kaggle的时候经常遇到这个情况,kaggle测试的分数比训练集的要低。感觉应该是测试集的数据的outlier少很多,或者说outlier的占比低好多。自己分训练测试集的时候没遇到过类似问题

■网友
1说明model的拟合能力太弱了 2数据量太少了
■网友
描述要详细啊,你如果测试集就一个样本,那。。。。。
你到底测试集、验证集、训练集都是多少啊


推荐阅读