在整个数据集上计算TF-IDF还是仅在训练数据上计算?

问题描述 投票:4回答:2

在本书的第七章“TensorFlow机器学习手册”中,作者在预处理数据中使用fit_transform scikit-learn功能来获取tfidf文本的训练功能。作者将所有文本数据分配给函数,然后将其分为训练和测试。这是一个真正的行动还是我们必须首先分离数据,然后在火车和fit_transform上进行tfidf transform测试?

machine-learning tensorflow scikit-learn nlp tf-idf
2个回答
3
投票

我没有读过这本书,我不确定这本书是否真的是一个错误,但我会给出2美分。

根据scikit-learn的文档,fit()用于

从训练集中学习词汇和idf。

另一方面,fit_transform()用于

学习词汇和idf,返回术语 - 文档矩阵。

transform()

将文档转换为文档术语矩阵。

在训练集上你需要应用fit()transform()(或者只是fit_transform()基本上加入两个操作)但是,在测试集上你只需要transform()测试实例(即文档)。

请记住,训练集用于学习目的(学习是通过fit()实现的),而测试集用于评估训练的模型是否可以很好地推广到新的看不见的数据点。


1
投票

作者在分离列车和测试功能之前给出所有文本数据。这是一个真正的行动还是我们必须首先分离数据然后在火车上执行tfidf fit_transform并在测试中进行转换?

我认为这已经将有关测试集的一些信息泄漏到训练集中。

我倾向于始终遵循以下规则:在进行任何预处理之前,首先要做的是分离数据,创建一个保持集。

© www.soinside.com 2019 - 2024. All rights reserved.