【问题标题】:Merging CountVectorizer in Scikit-Learn feature extraction在 Scikit-Learn 特征提取中合并 CountVectorizer
【发布时间】:2016-09-02 01:42:33
【问题描述】:

我是 scikit-learn 的新手,在我一直在做的事情上需要一些帮助。

我正在尝试使用多项朴素贝叶斯分类对两种类型的文档(例如 A 类和 B 类)进行分类。为了获取这些文档的术语计数,我使用了 sklearn.feature_extraction.text 中的 CountVectorizer 类。

问题在于两种类型的文档需要不同的正则表达式来提取标记(token_pattern 参数为 CountVectorization)。我似乎无法找到一种方法来先加载 A 类型的培训文档,然后再加载 B 类型的培训文档。是否可以执行以下操作:

vecA = CountVectorizer(token_pattern="[a-zA-Z]+", ...)
vecA.fit(list_of_type_A_document_content)
...
vecB = CountVectorizer(token_pattern="[a-zA-Z0-9]+", ...)
vecB.fit(list_of_type_B_document_content)
...
# Somehow merge the two vectorizers results and get the final sparse matrix

【问题讨论】:

    标签: python scikit-learn feature-extraction


    【解决方案1】:

    你可以试试:

    vecA = CountVectorizer(token_pattern="[a-zA-Z]+", ...)
    vecA.fit_transform(list_of_type_A_document_content)
    vecB = CountVectorizer(token_pattern="[a-zA-Z0-9]+", ...)
    vecB.fit_transform(list_of_type_B_document_content)
    combined_features = FeatureUnion([('CountVectorizer', vectA),('CountVect', vectB)])
    combined_features.transform(test_data)
    

    您可以阅读有关 FeatureUnion 的更多信息,来自 http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.FeatureUnion.html

    从 0.13.1 版本开始提供

    【讨论】:

    • 如果 'vectA' 和 'vectB' 都包含单词 'happy',则特征将是 'vectA_name_happy' 和 'vectB_name_happy'。可能不是预期的。需要一个“快乐”的特征。
    【解决方案2】:

    你可以试试:

    vecA = CountVectorizer(token_pattern="[a-zA-Z]+", ...)
    vecA.fit_transform(list_of_type_A_document_content)
    vecB = CountVectorizer(token_pattern="[a-zA-Z0-9]+", ...)
    vecB.fit_transform(list_of_type_B_document_content)
    

    你可以合并稀疏矩阵:

    from scipy.sparse import csr_matrix, hstack
    
    combined_features= hstack([vecA, vecB], 'csr')
    

    【讨论】:

      猜你喜欢
      • 2012-09-25
      • 2017-06-20
      • 2014-09-16
      • 2020-05-05
      • 2016-09-11
      • 2017-02-25
      • 2019-12-11
      • 1970-01-01
      • 2014-09-10
      相关资源
      最近更新 更多