GY123456 发表于 2019-1-5 15:28:51

一般训练集,验证集,测试集比例为多少最为恰当?

在使用数据集训练模型之前,我们需要先将整个数据集分为训练集、验证集、测试集。训练集是用来训练模型的,通过尝试不同的方法和思路使用训练集来训练不同的模型,再通过验证集使用交叉验证来挑选最优的模型,通过不断的迭代来改善模型在验证集上的性能,最后再通过测试集来评估模型的性能。如果数据集划分的好,可以提高模型的应用速度。如果划分的不好则会大大影响模型的应用的部署,甚至可能会使得我们之后所做的工作功亏一篑。其实在划分除了考虑数据集大小之外,还应该考虑数据的分布情况

数据集分布

我们现在有8个不同区域的数据,需要通过这些数据来训练一个分类模型,那么我们应该如何来利用这些数据集来划分训练集、验证集和测试集?
http://image.100badou.com/image/20181110235339393357.png
我们可以从8个不同区域中随机选4个区域来组成训练集,然后再选择剩下的4个区域来组成测试集。其实这种划分的方式存在一个问题,那就是训练集和测试集的数据分布可能不相同,那么必定会导致一个问题,模型在训练集上的表现会非常的好,而在测试集上表现可能不会那么理想。通过训练数据来训练模型,就是希望模型能够从训练集中学习到数据的分布,如果训练集和测试集数据不在同一个分布中,那么模型在测试集上的表现肯定是不会理想的。所以最佳的划分方式应该是:先将这8个不同区域的数据都打乱混合在一起,然后再将数据集分为训练集、验证集和测试集,这样就能保证它们都处于同一分布中。

为什么需要保证训练集和测试集在同一分布中?
http://image.100badou.com/image/20181110235437136706.jpg
我们将训练出来的模型理解成为一个寻找靶心的过程,通过训练集不同的训练,然后调整超参和使用不同的算法来提高模型性能的过程理解为想靶心逼近的过程。如果想要在测试集也要像有训练集上的表现,那么测试集的靶心也需要和训练集的靶心位于同一位置。如果测试集的靶心相对训练集的靶心有所移动,那么模型在训练集上的表现是10环的话,在测试集上的表现可能就只有8环、9环甚至更低。这个例子中的靶心分布就是数据集的数据分布。

数据集的大小
除了数据的分布对于数据集的划分有影响之外,数据集的大小也对于数据集划分也有影响。不同规模的数据集可能训练集、验证集、测试集的划分会有所不同。

小规模数据集数据的划分
在传统的机器学习中,我们听过70%/30%的划分原则,就是指将整个数据集中的70%用于模型的训练也就是训练集,整个数据集中的30%用于模型的测试也就是测试集,其实这里的测试集被称为验证集或者开发集会更适合。如果想要加入验证集,可能划分标准就改成了60%/20%/20%,也就是指将整个数据集的60%划分为训练集,20%划分为验证集,20%划分为验证集。以上的两种划分标准只适用于小规模的数据集,如果对于上百万、甚至上千万规模的数据集可能需要修改数据集的划分原则。

大规模数据集数据的划分
我们现在所处的是大数据时代,所以很多数据集的数据规模都是上百万甚至上亿,而且如果想要获取一个好的模型是离不开大数据的。面对这种大规模的数据集时,传统的数据划分原则已经不适用了,验证集和测试集的划分可以低于30%和20%。对于百万级别的数据集,我们可以采用98%/1%/1%的规则来划分数据集。

建议
在有些数据集的划分中,没有真正的测试集,也就是只有训练集和测试集。利用训练集来训练模型,然后通过测试模型在测试集上的表现来调整超参和采用不同的策略来提高模型在测试集上的表现,而没有真正的测试集来评估模型的性能,缺少真正的测试集可能会导致模型过拟合,使用这种方式在测试集上所获取的模型评估是不可靠的。建议不要省略验证集,利用验证集来调整模型,利用测试集来评估模型的指标。如果模型上线的指标要求比较高时,可以适当的加大测试集的数量以此来获取更高精度的评估指标,建议不要超过30%。
了解更多机器人问题,可以关注八斗问答
页: [1]
查看完整版本: 一般训练集,验证集,测试集比例为多少最为恰当?