【问题标题】:Scikit-learn: don't use some words as one word feature, but use in collocationsScikit-learn:不要将某些单词作为一个单词的特征,而是在搭配中使用
【发布时间】:2014-09-13 07:07:40
【问题描述】:

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

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

在测试集和 CV 集中分类和测试我的算法后,我想提高准确性。 我看到了最丰富的功能(由于问题How to get most informative features for scikit-learn classifiers?)。而且我看到,在一组信息量最大的特征中,我有单词 (ngram=1),它们对分类没有影响,但在二元组(单词搭配)中它们会产生很大的影响。

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

【问题讨论】:

    标签: python scikit-learn text-classification


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-09-04
      • 2016-06-06
      • 2019-04-03
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2016-03-16
      • 1970-01-01
      相关资源
      最近更新 更多