【发布时间】:2017-11-26 11:12:06
【问题描述】:
我正在做一个简单的二进制分类,我给你一个我遇到的问题的例子:假设我们有 n 个文档(Doc 1、Doc 2、...、Doc n。)我们将使用 TF-IDF 作为特征值来训练使用词袋的二元分类器。我们的训练文件有 m 个特征(从技术上讲,m 是我们在清理和预处理之后在所有这 n 个文档中拥有的唯一标记的数量)。
现在,假设我们有一个训练有素的模型,我们要预测一个新文档的标签。我们应该首先像处理训练文档一样预处理测试文档。然后,我们应该使用 TF-IDF 为我们的测试文档构建一个特征向量。这里有两个问题:
- 训练集和测试集的特征数量不会相同。我已经阅读了一些解决方案,但是从科学的角度来看,我不能满足!
- 仅针对一个测试文档甚至其中几个文档计算 TF-IDF 并没有真正意义。因为我们在训练集和测试集中拥有的token字典不一定相同,即使我们对这两者有相同数量的特征,也不一定意味着这些特征是相同的。
所以现在我只是想弄清楚如何使用我们用词袋模型和 TF-IDF 值训练的模型准确地标记新文档。特别是,我正在寻找我上面提到的两个具体问题的合理答案。
我们可以计算模型的准确性(例如使用交叉验证),但我不知道我们应该如何标记新文档。
附:我正在使用 scikit-learn 和 python。
更新:我可以找到我的问题的答案。在这种情况下,我们可以简单地使用我们用来训练分类器的相同 TfidfVectorizer。所以现在每次我训练一个新的分类器并使用 tfidfVectorizer 构建我的特征向量时,我都会使用 pickle 将我的向量化器保存在一个文件中,并在创建测试集特征向量时使用这个向量化器。
【问题讨论】:
-
想想你将如何在现实世界的场景中进行,你已经使用所有可用数据进行了训练,但在预测时仍然存在新的文本数据。
标签: scikit-learn classification tf-idf training-data