通常在深度学习中将数据集划分为训练集、验证集和测试集训练集:相当于教材或例题,训练集在我们的模型过程中起的作用就是更新模型的参数,用以获得更好的性能,其行为表现就是让我们以为模型掌握了相关的知识(规律)。
验证集:相当于模拟考试,只是你调整自己状态的指示器,这种调整的结果(从模拟考到高考),有可能更好,也有可能更糟糕。验证集的存在是为了从一堆可能的模型中,帮我们选出表现最好的那个,可用来选超参数。
测试集:相当于高考,其特点是一考定终身,不给改的机会。训练集用来评估模型最终的性能;当多个模型进行对比试验验证模型性能时,多个模型应该在相同的测试集上面进行对比,这样才有效。就好比甲做A地区的卷子考了600分,乙做B地区的卷子考了590分,能不能说甲比乙成绩高,答案是不能。此外,请勿对测试数据进行训练。 如果评估指标取得了意外的好结果,则可能表明不小心对测试集进行了训练。例如,高准确率可能表明测试数据泄露到了训练集。

常见的划分原则有:交叉验证法、留出法。

一、K折 交叉验证

交叉验证是将数据集D划分成k个大小相似的互斥子集,每次都用其中k-1个子集的并集作为训练集,余下那个子集作为测试集。这样就会有k次划分,k次训练。最终结果是返回k个测试结果的均值。通常把交叉验证法称为“k折交叉验证”,k最常用的取值是10,此时称为10折交叉验证。

步骤:

(1)不重复抽样,将原始数据随机划分为k份

(2)每次挑选其中1份作为测试集,剩余k-1份作为训练集

(3)重复第二步 k 次,这样每个子集都有一次机会作为测试集,其余机会作为训练集

(4)计算 k 组测试结果的平均值作为模型精度的估计,并作为当前 k 折交叉验证下模型的性能指标

下图展示了5折交叉验证的训练示意图

python训练集 测试集 验证集划分 测试集,训练集,验证集_深度学习


K的取值:

(1)数据量小的时候,k可以设大一点,这样训练集占整体比例就比较大,不过同时训练的模型个数也增多。

(2)数据量大的时候,k可以设小一点。

k折验证的目的包括特征选取、模型选取、还是调参

二、留出法

留出法是将数据集D划分成两个互斥集合,为了尽可能保持数据分布的一致性,通常使用分层采样的方式,以7:3的比例划分训练集和测试集。单次使用留出法得到的结果往往不够稳定可靠,不同的训练集测试集划分会导致模型评估标准不同,一般都会进行多次随机划分,例如100次试验评估就会得到100个结果,留出法取这100个结果的平均。