测试和培训使用TF-IDF设置不同数量的功能

时间:2017-06-23 01:46:36

标签: scikit-learn classification tf-idf training-data

我正在做一个简单的二进制分类,我给你一个问题的例子:让我们说 n 文件(Doc 1,Doc 2,...,Doc n。)我们将使用TF-IDF作为特征值来训练使用词袋的二元分类器。我们的培训文件具有 m 功能(从技术上讲,这是我们在清理和预处理后的所有这些n文档中拥有的唯一令牌的数量)。

现在,假设我们有一个训练有素的模型,我们将预测新文档的标签。我们应该首先以与培训文档相同的方式预处理测试文档。然后,我们应该使用TF-IDF为我们的测试文档构建一个特征向量。这里有两个问题:

  • 培训和测试集的功能数量不一样。我已经为这个解决了一些解决方案,然而,从科学的角度来看,我感到无法满足!
  • 仅为一个测试文档甚至几个测试文档计算TF-IDF并没有多大意义。因为我们在训练和测试集中的令牌字典不一定相同,即使我们对这两个字符具有相同数量的特征,也不一定意味着这些特征是相同的。

所以现在我只想弄清楚我们如何使用我们用词袋模型和TF-IDF值训练的模型来标记新文档。特别是,我正在寻找上面提到的两个具体问题的合理答案。

我们可以计算模型的准确性(例如使用交叉验证)但我不知道我们应该如何标记新文档。

P.S。我正在使用scikit-learn和python。

  

更新:我可以找到问题的答案。在这种情况下,我们可以简单地使用我们用来训练分类器的 TfidfVectorizer 。所以现在每次我训练一个新的分类器并使用tfidfVectorizer构建我的特征向量时,我使用 pickle 将我的矢量化器保存在一个文件中,并在创建测试集特征向量时使用此向量化器。 / p>

1 个答案:

答案 0 :(得分:-3)

我无法科学地支持这一点,但您可以尝试使用 m 功能的字典,并计算测试集上这些功能的TF-IDF分数。这样做的是为每个测试文档创建一个矢量,该矢量与列车矢量大小相同,并与训练模型时使用的相同特征相关联。您必须使用训练集中未显示在测试集中的单词来解决问题。

我可以问你为什么使用TF-IDF而不是Naive Bayes或Random Forests?