首先提供三篇博客文章:BLOG ZHIHU CSDN,可以详细学习一下什么是交叉验证,以及不同的训练集和验证集的划分策略所带来的影响。emmmm…看了这三篇文章,讲的有点乱,甚至讲的是错的。MotherFucker.
交叉验证是一种用于评估机器学习模型性能的统计方法,通过将数据集分为多个子集,在不同子集上进行多次训练和测试,以减少模型过拟合和数据划分的随机性影响。其核心目的是在有限数据下更可靠地估计模型的泛化能力。注意,交叉验证的核心目的:在数据集有限的的情况下,针对数据量较小的情况下,优先考虑交叉验证。
现在我有一份数据A,我把他平均划分为k 份,每次取出来一份作为测试集,剩下的k-1 份作为训练集。这样循环训练k 次,就将所有的数据过了一遍,同时也训练除了k 个模型,然后就可以选择出来最好的一个。错!!!!!!!
真正正确的:
我把A平均分为了k 份,然后选择一份作为测试集,然后这个测试集就雷打不动了,不会变化了,绝对不允许这个测试集参与到训练中去,测试集就干测试集的事情,别插足其他的事情。
针对剩下的k-1 份,再平均分为k 份,然后每次取出来一份作为验证子集,剩下的k-1 份作为训练子集。用训练子集的数据先训练模型,然后用验证子集去跑一遍,看验证子集的损失函数、分类准确率等参数。等模型训练好之后,用测试集再去测试模型的性能。也就是说:
数据集A,分为B,C分别为训练集和测试集。测试集C就不变化了,对于训练集B,再进行K折交叉验证,不是上来就直接对所有的数据进行K折交叉验证。