1

我正在使用 Python 和 scikit-learn 进行文本分类。

现在,我使用 TfidfVectorizer 作为向量器(用于将原始文本转换为特征向量)和 MultinomialNB 作为分类器。我使用参数 ngram_range = (1,2) (参见http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html),例如我使用一个词和二元组。

在测试集和 CV 集中分类和测试我的算法后,我想提高准确性。我看到了最多信息的特征(由于问题如何为 scikit-learn 分类器获取最多信息的特征?)。而且我看到,在集合中信息量最大的特征中,我有单词(ngram=1),它们对分类没有影响,但是在二元组(单词搭配)中它们会产生很大的影响。

所以,我不能使用 stop_words,因为 Tfidfvectorizer 不会在搭配中考虑这个词,我也不能使用预处理器。问题:如何在 tfidfvectorizer 中排除某些单词,但将这些单词保存在不同的搭配中?

4

1 回答 1

2

我认为有几种可能的方法:

  1. 用构造两个TfidfVectorizer两次ngram_range=(1,2)。在拟合第一个向量器后提取特征名称,过滤掉不需要的一元特征,并将此特征列表作为vocabulary第二个向量器的参数提供。使用第二个矢量化器进行转换。

  2. 提供analyzer参数 ofTfidfVectorizer作为从每个原始文档中执行自定义提取特征的函数,例如避免吐出一些无用的 unigram 作为特征(但这意味着您需要自己完成生成单词组合的工作)。

  3. 像往常一样适合 a TfidfVectorizer,其中可能包含一些不需要的一元组。用于get_feature_names()获取与您想要的功能相对应的列索引。当您transform()使用矢量化器时,请执行额外的步骤,根据感兴趣的索引对生成的稀疏矩阵的列进行切片。

于 2014-07-23T03:07:21.450 回答