先用一个不恰当的比喻来说明3种数据集之间的关系:
什么是训练集?训练集(Training Dataset)是用来训练模型使用的。 在《这应该是全网最好的「机器学习」科普文》里我们介绍了机器学习的7个步骤,训练集(Training Dataset)主要在训练阶段使用。 什么是验证集?当我们的模型训练好之后,我们并不知道他的表现如何。这个时候就可以使用验证集(Validation Dataset)来看看模型在新数据(验证集和测试集是不同的数据)上的表现如何。同时通过调整超参数,让模型处于最好的状态。 验证集有2个主要的作用:
说明:
什么是测试集?当我们调好超参数后,就要开始「最终考试」了。我们通过测试集(Test Dataset)来做最终的评估。 通过测试集的评估,我们会得到一些最终的评估指标,例如:准确率、精确率、召回率、F1等。 扩展阅读:《一文看懂分类模型的评估指标:准确率、精准率、召回率、F1等》 如何合理的划分数据集?下面的数据集划分方式主要针对「留出法」的验证方式,除此之外还有其他的交叉验证法,详情见下文——交叉验证法。 数据划分的方法并没有明确的规定,不过可以参考3个原则:
交叉验证法为什么要用交叉验证法? 假如我们教小朋友学加法:1个苹果 1个苹果=2个苹果 当我们再测试的时候,会问:1个香蕉 1个香蕉=几个香蕉? 如果小朋友知道「2个香蕉」,并且换成其他东西也没有问题,那么我们认为小朋友学习会了「1 1=2」这个知识点。 如果小朋友只知道「1个苹果 1个苹果=2个苹果」,但是换成其他东西就不会了,那么我们就不能说小朋友学会了「1 1=2」这个知识点。 评估模型是否学会了「某项技能」时,也需要用新的数据来评估,而不是用训练集里的数据来评估。这种「训练集」和「测试集」完全不同的验证方法就是交叉验证法。 3 种主流的交叉验证法 留出法(Holdout cross validation) 上文提到的,按照固定比例将数据集静态的划分为训练集、验证集、测试集。的方式就是留出法。 留一法(Leave one out cross validation) 每次的测试集都只有一个样本,要进行 m 次训练和预测。 这个方法用于训练的数据只比整体数据集少了一个样本,因此最接近原始样本的分布。但是训练复杂度增加了,因为模型的数量与原始数据样本数量相同。 一般在数据缺乏时使用。 k 折交叉验证(k-fold cross validation) 静态的「留出法」对数据的划分方式比较敏感,有可能不同的划分方式得到了不同的模型。「k 折交叉验证」是一种动态验证的方式,这种方式可以降低数据划分带来的影响。具体步骤如下:
k 一般取 10 数据量小的时候,k 可以设大一点,这样训练集占整体比例就比较大,不过同时训练的模型个数也增多。 数据量大的时候,k 可以设小一点。 |
|
来自: nacei > 《大数据与人工智能》