在本书的第七章" TensorFlow机器学习指南"预处理数据的作者使用scikit-learn的fit_transform
函数来获取训练文本的tfidf
特征。作者将所有文本数据分配给函数,然后将其分为训练和测试。这是一个真正的行动还是我们必须首先分离数据然后在火车上执行tfidf fit_transform
并在测试时执行transform
?
答案 0 :(得分:3)
我还没有读过这本书,我不确定这本书中是否真的是一个错误,但我会给出2美分。
根据scikit-learn的文档,fit()
用于
从训练集中学习词汇和idf。
另一方面,fit_transform()
用于
学习词汇和idf,返回术语 - 文档矩阵。
transform()
将文档转换为文档术语矩阵。
在训练集上,你需要同时应用fit()
和transform()
(或只是fit_transform()
基本上加入这两个操作)但是,在测试集上你只需要{{1测试实例(即文档)。
请记住,训练集用于学习目的(学习是通过transform()
实现的),而测试集则用于评估经过训练的模型是否可以很好地概括为新的看不见的数据点。
答案 1 :(得分:1)
作者在分离训练和测试之前将所有文本数据提供给 功能。这是真的吗,还是我们必须先分离数据 在火车上执行tfidf fit_transform并在测试上进行转换?
我认为这已经将有关测试集的一些信息泄漏到训练集中。
我倾向于始终遵循以下规则:在进行任何预处理之前,首先要分离数据,然后创建一个保留集。
答案 2 :(得分:1)
在谈论文本数据时,我们必须确保仅在训练集的词汇表上对模型进行训练,因为当我们在现实生活中部署模型时,它将遇到从未见过的单词因此我们必须牢记这一点,对测试集进行验证。
我们必须确保测试集中的新单词不属于模型词汇表的一部分。
因此,我们必须在训练数据上使用fit_transform并在测试数据上进行转换。
如果您考虑进行交叉验证,则可以在所有折叠中使用此逻辑。