一:交叉验证

    在 K 折验证之前最常用的验证方法就是交叉验证,即把数据划分为训练集、验证集和测试集。一般的划分比例为 6:2:2。但如何合理的抽取样本就成为了使用交叉验证的难点,不同的抽取方法会导致截然不同的训练性能。同时由于验证机和训练集是不参与训练的,导致大量的数据无法应用于学习,所以显而易见的会导致训练的效果下降。

    二:K 折交叉验证

    将训练集数据划分为 K 部分,利用其中的 K-1 份做为训练,剩余的一份作为测试,最后取平均测试误差做为泛化误差。这样做的好处是,训练集的所有样本都必然会成为训练数据同时页必然有机会成为一次测试集。可以更好的利用训练集数据。

    K 越大,平均误差被视为泛化误差这个结果就越可靠,但相应的所花费的时间也是线性增长的。

    三:坑

    上面说的全都是书上的内容,但是我发现这里面存在一个问题?我在进行 K 折之前是否要划分训练集和测试集。

    如果划分训练集和测试集,(跑论文的实验) 在利用公开数据集进行训练时,那么同种网络同一个数据集的情况下,你出来的效果有可能比别人差(你只有 80% 的数据进行训练,人家没划的话可是用了所有的数据进行训练呢!)。

    如果划分测试集,在一些小规模的数据集该怎么办?可能本身就只有那么一点数据,你还划了 20% 去做测试,训练的数据更加不够了。

    如不划分测试集,在所有数据集上进行 K 折,网络层数、学习率这些参数好定,但是学习轮次怎么决定,到何种地步停止学习。你不能选择测试集上效果最好的轮次,因为这会泄露一部分信息给模型。同时如果最后想要选出一个最佳的模型怎么办?

    四:不同情况下给出的可行的——K 折验证的方案

    情况 1:大数据规模

    直接使用 cross-validation,无需使用 K 折。因为数据规模较大时,即使以 6:2:2 的形式划分训练集 - 验证集 - 测试集。其中的百分之六十的数据都足以代表所有数据的分布。举个例子:现在我们需要通过统计的方法去计算投掷骰子时,每个点出现的概率。你现在做了 100 万次独立的实验,即使你只使用了其中的六十万次的结果也足以得到一个让人信服的概率,即每个点数出现的概率为六分之一。

    情况 2:中小规模的数据

    1:公司使用的情况:首先划分训练集和测试集在训练集上进行 k 折,k 折中每一折在验证集中误差最小的模型 (因为事先划分了测试集和训练集,书中所述的 K 折中的测试集我在这里称它为验证集) 被放在测试集上进行测试,计算测试误差。最后模型性能为每折中选中的模型在测试集上误差的平均。

    (为什么说 k 折中每一折在验证集上误差最小的模型。因为在训练之前我们并不知道算法需要训练多少轮次才会达到最佳效果,所以我的想法是尽可能的让他多跑,然后在里面选在验证集上表现最佳的模型。再把选出来的模型丢到测试集上去测。)

    K-折交叉验证(记一个坑) - 知乎 - 图1

    对中小规模数据集、公司商用情况下流程的意识流示意图

    ps:划分之后,会存在训练集数据不足的问题,但是在公司的项目中你必然要选出一个合适的模型进行部署,不先进行训练集和测试集的划分是选不出来合适的模型的!

    2:论文实验的情况:如在论文实验中划分训练集和测试集,则会存在说服力的问题。即:你怎么能保证你选用的测试集不是经过你精心挑选的,十分容易判断的简单样例!所以,在不需要挑选出最佳模型而仅需评估方法效果的情况下,可以直接在所有的数据上进行 K 折。这样做的好处在于:你所使用的数据多了,模型的效果也更好,在测试集上的测试误差也会更加接近于泛化误差。

    但是这样做会存在一个训练的迭代次数的问题,即:你将在何时停止你学习的过程。在仅划分训练集和测试集的情况下,你只有两种可行的方法:1)选测试集上效果最好的,这就存在将测试集数据分布泄露给训练集的问题。2)定死迭代次数,这存在怎么选迭代次数的问题。

    因此给出我的方法:在整个数据集上进行 K 折。在划分的训练集中,抽取一小部分比如百分之五做为验证集,然后将验证集上效果最佳的模型置于测试集中测试,然后进行 K 次,泛化误差约等于 K 次测试误差的平均。

    这种方法存在以下两个好处

    1)所有的样本都在测试集中出现了一次,即不存在说服力不足的问题。(我全都测了,总不可能说我故意选最容易评估的了吧!)

    2)训练数据集中的样本数据没有显著的减小。(我只是在划分出来的训练集中再划分出一小部分做验证集),得出的模型效果会更加接近模型的真实泛化误差。

    PS: 原先想放个同学的美照上去,觉得不太好!后来打了个马赛克,觉得还不如不放!然后放了个重庆大学的校徽,也算是为重庆大学建校九十周年做祝贺了!
    https://zhuanlan.zhihu.com/p/83841282
    https://zhuanlan.zhihu.com/p/83841282