7.4数据集的划分

在应用机器学习技术的绝大部分情况下,我们都是在历史数据上进行模型训练,获得一个模型,然后用模型在新的数据上进行预测。比如我们用大量历史邮件训练了一个识别垃圾邮件的模型,然后部署这个模型,每当有新的邮件到来时,就用这个模型进行预测,判断是否为垃圾邮件。如果是垃圾邮件就进行拦截。

对于模型表现的好坏,我们一般会制定评价模型效果的指标。这样方便我们有一个量化的指标来衡量模型的效果。比如对于垃圾邮件拦截的模型,我们可以制定一个准确率指标。

7.4.1为什么需要对数据集进行划分

我们训练模型的目标,不是要在训练数据上表现好,而是需要它在没有见过的数据上表现好。训练的目标是为了实战。所以我们需要对数据集进行划分,只用一部分数据进行训练,保留一部分数据是模型没有见过的。训练好模型后,我们用模型没有见过的那部分数据测试模型,这样我们才能评估模型在没有见过的数据上的表现。

不用模型在训练数据上的表现来评价模型,是因为防止模型没有学到数据底层真正的规律,而只是死记硬背了答案(什么样的feature对应什么样的label)。

7.4.2训练集,验证集,测试集

实际上数据进行划分,会将数据划分为训练集,验证集和测试集。

训练集 训练集的作用就是训练模型,训练集上的数据你会使用很多次,跑很多迭代。用它来调整模型的参数。

验证集 验证集是帮助你在训练过程中评估模型的性能,它并没有被拿来训练模型。根据验证集的评估结果,你可以调整模型的超参数,比如调整学习率,或者增加特征的高次项等。 验证集的数据你使用的比训练集要少。只在模型训练到一定阶段,评估模型的性能表现。

测试集 测试集是你训练好了模型,最后只使用一次,评价模型的最终真实表现的。

7.4.3为什么需要区分验证集和测试集

对于拿出一部分模型没见过的数据,对模型性能进行客观评估,这比较好理解。但是为什么需要区分验证集和测试集呢?

验证集和测试集的作用是不同的,你可以使用模型在验证集上的结果取调整模型,比如改变batch size,学习率,特征的最高次项等。并且最终选择的模型也是根据它在验证集上的表现来决定的。也就是说模型实际上是间接受到了验证集的影响。

而测试集完全不会影响模型的任何方面,你不能根据测试集的结果去调整模型的超参数,也不能根据测试集的结果去选择模型。它唯一的作用就是给你一个客观的评价,这个模型在它没有见过的数据上表现怎样。

7.4.4保证训练集,验证集,测试集分布的一致

保证训练集,验证集,测试集数据分布的一致是非常重要的,这样验证集才能正确指导模型训练的方向,测试集才能客观评价模型的表现。比如你训练垃圾邮件的分类模型,不能拿中文邮件作为训练集,但是用英文邮件作为验证集和测试集。最常用的保证数据集分布一致的办法就是对数据进行shuffle(随机改变顺序)后再进行划分。

7.4.5划分的比例

数据集的划分没有严格的比例,你要根据实际情况来看。

在传统机器学习时代,训练数据都是不多的,几百到几万条,一般人们会用70%-80%的数据作为训练集,验证集和测试集数据各占10%-20%。

在现在大数据时代,训练数据可能从几百万到几万亿之间。那么验证集和测试集的数据量只要能保证可以客观衡量模型性能就可以。比如各10000条就可以。

7.4.6只用训练集和测试集

机器学习领域有很多术语不规范的地方,当你听到你的同行在说他们训练模型划分了训练集和测试集。他实际应该在说的是他训练过程使用了训练集和验证集。他会基于训练集来训练模型,在训练过程中利用测试集来评价模型,利用评价结果来调整模型的超参数,最终选择一个在测试集上表现最好的模型。在这个过程中,他的目标只是得到一个最好的模型,但是并没有得到一个客观的衡量模型在未见过数据上表现的得分。

results matching ""

    No results matching ""