在生成文档术语矩阵之前或之后拆分为测试和训练集?

Posted

技术标签:

【中文标题】在生成文档术语矩阵之前或之后拆分为测试和训练集?【英文标题】:Split into test and train set before or after generating document term matrix? 【发布时间】:2020-06-24 22:34:59 【问题描述】:

我正在研究简单的机器学习问题,并尝试构建一个可以区分垃圾短信和非垃圾短信的分类器。我很困惑是否需要在拆分为测试集和训练集之前生成文档项矩阵,还是应该在拆分为测试集和训练集之后生成文档项矩阵?

我尝试了两种方法,发现在生成文档术语矩阵之前拆分数据时准确度略高。但对我来说,这没有任何意义。精度不应该一样吗?这些操作的顺序有什么不同吗?

【问题讨论】:

【参考方案1】:

从质量上讲,您不需要 这样做。但是,正确的程序要求您将训练和测试数据完全分开。总体概念是测试数据在训练中直接表示;这有助于减少过度拟合。测试数据(以及后来的验证数据)是经过训练的模型在训练期间从未遇到过的样本。

因此,测试数据不应包含在您的预处理——文档术语矩阵中。这打破了分离,因为模型在一方面“看到”了训练期间的测试数据。

从数量上讲,您需要先进行拆分,因为该矩阵将用于针对训练集训练模型。当您将测试数据包含在矩阵中时,您获得的矩阵在表示训练数据时略微不准确:它不再正确地表示您实际训练的数据。这就是为什么您的模型不如遵循正确分离程序的模型好。

这是一个细微的差别,主要是因为训练集和测试集假定是相同可能输入群体的随机样本。随机差异提供了您遇到的小惊喜。

【讨论】:

以上是关于在生成文档术语矩阵之前或之后拆分为测试和训练集?的主要内容,如果未能解决你的问题,请参考以下文章

机器学习项目:在探索性数据分析之前或之后拆分训练/测试集?

如何将稀疏矩阵拆分为训练集和测试集?

特征选择应该在训练测试拆分之前还是之后完成?

在训练测试拆分之前或之后处理

sklearn:绘制跨训练+测试集组合的混淆矩阵

0-4 统计建模划分训练/验证/测试集的几种方法