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

标签 python machine-learning nlp data-science

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

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

最佳答案

从质量上来说,您不需要以任何一种方式执行此操作。但是,正确的程序要求您将训练数据和测试数据完全分开。总体概念是测试数据直接在训练中表示;这有助于减少过度拟合。测试数据(以及后来的验证数据)是训练好的模型在训练过程中从未遇到过的样本。

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

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

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

关于python - 在生成文档术语矩阵之前或之后分成测试集和训练集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60661508/

相关文章:

python - 在通过 Apache 运行的 Django 中记录消息

python - 如何根据登录用户保留 Django Rest Framework Serializer 中的特定属性?

适合初学者的 Python 数组

apache-spark - Spark : Running Backwards Elimination By P-Value With Linear Regressions

machine-learning - 意义的层次

python - Memcached 中的 GAY 聊天数据持久化

machine-learning - 反向传播:更新第一个权重层

python - 获取one-hot编码的H2OFrame

pytorch - 如何正确提示Transformer模型的解码器?

nlp - 使用 Spacy en_core_web_lg 模型的 POS 标记不一致