【问题标题】:Scikit Naive Bayes Classification for text文本的 Scikit 朴素贝叶斯分类
【发布时间】:2013-12-24 13:53:25
【问题描述】:

我正在尝试将 scikit 用于 Naive Basyes 分类。我有几个问题(我也是 scikit 的新手)

1) Scikit 算法希望输入为 numpy 数组,标签为数组。在文本分类的情况下,我应该通过维护词汇中的单词散列和与之关联的唯一 id 将我的每个单词映射到一个数字 (id) 吗?这是 scikit 的标准做法吗?

2) 如果将相同的文本分配给多个班级,我应该如何进行。一种明显的方法是为每个相关标签复制每个训练示例。有没有更好的表现形式?

3) 同样对于测试数据,我将如何获得与测试关联的多个类?

我正在使用http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html 作为我的基地。

【问题讨论】:

    标签: numpy scikit-learn scikits


    【解决方案1】:

    1) 是的。使用 feature_extraction 模块中的 DictVectorizer 或 HashVectorizer。 2)这是一个多标签问题。也许使用 multi_class 模块中的 OneVsRestClassifier。它将为每个类训练一个单独的分类器。 3) 使用多标签分类器/每个分类一个分类器即可。

    看看http://scikit-learn.org/dev/auto_examples/grid_search_text_feature_extraction.html 和http://scikit-learn.org/dev/auto_examples/plot_multilabel.html

    【讨论】:

    • 感谢您的精彩回答。我对策略有几个问题:假设如果我使用 OneVsAll/OneVsRestClassifier,它不会容易受到这样一个事实的影响:标签的排列将构成一个不同的类,而它应该是相同的。例如,对于一个特定的测试,假设我现在有标签 X、Y、Z 用于几乎相似的文本,如果我有 Z、Y、A 作为标签,OneVsAll 分类器将错误的印象是第一个文本适合 X 而第二个文本适合Z?虽然排列无关紧要。标签排序会有帮助吗?
    • Scikit-learn 会为您解决这个问题,但我建议您将 LabelBinarizer 应用于您的标签,这将创建一个独特的表示。
    猜你喜欢
    • 2019-03-01
    • 2016-08-02
    • 2018-07-29
    • 2016-05-01
    • 2017-06-21
    • 2015-03-06
    • 2015-08-27
    • 2014-04-14
    • 2012-07-02
    相关资源
    最近更新 更多