交叉验证 VS 验证集 (不是一回事!!!)

之前一直不明白交叉验证的具体意思,以为带个验证俩字,跟验证集一定有啥关系,结果并没有!!!

最近做实验,由于数据集太小,只有40条数据,要用留一法交叉验证,翻遍了网上的帖子都说把数据分为K份(我这k=40),k-1份用于训练,剩余一份用于测试,大家都说的很清楚了,就是字面意思,我却一直还是迷迷糊糊,总觉得必须要和验证集(即训练集,验证集,测试集)扯上关系,然后想了半天,决定在39份数据里再分训练集和验证集,然后就总结了下面的经验

总之,交叉验证和验证集没有半毛钱关系,数据分为K份后,用k-1份用于训练,train,训练好了拿剩余一份用于测试,test, 然后再轮流使用k份中的每一份作为测试,其他K-1份作为训练,并且需要注意的是!!!总共训练了K个子模型,然后拿到了k个测试结果,假设其中对了m个,则最终测试精度就是m/k*100%。不是一直训练一个模型,那样绝对过拟合!亲身经历总结出来的教训,因为你一直重复训练一个模型,k次后,这个模型绝对记住了(背下来了)答案,你的验证精度会变为100%。

至于验证集,它的作用就只有一个,就是通过告诉你模型有没有过拟合,以指导你调整超参数,就只有这一个作用,但是对于小数据集,真的,没必要再分验证集,因为本身训练集验证集测试集三者就必须严格互斥,不能重复,以我的case为例,总共40条数据,一条用于测试集,剩余39条,如果你选38条用于训练集,则验证集一条数据,验证精度要么0,要么1.0,不能告诉你任何模型欠拟和还是过拟合的信息,因为验证集数据太少的话,验证精度的波动就会特别大,这个很好理解,比如你验证集4条数据,那么一旦和上次的正确条数差1个,你的验证精度波动就高达25%,但是如果对于大数据集,验证集假设有1000条数据,一旦和上次的正确条数差1个,验证精度波动只有0.1%,很简单的一个道理,全是我用实验经历排的坑,思考总结出来的经验。之后可以放个图出来看看是什么景象

从科学的角度分析,小数据集本身就不能代表真实数据的分布,它数据太少了,很难完美刻画真实分布,那训练集和验证集就更小了,更加不可能描绘数据的原始分布,也就不可能满足i.i.d,独立同分布的基本假设,所以你整个模型肯定学不好,所以对于小数据集,建议不要再分什么验证集了,没资本那么奢侈去进一步减少本来就不够的训练数据,训练数据越多越好,尽量刻画原来数据的真是分布

发布了190 篇原创文章 · 获赞 65 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_36607894/article/details/103442472