【问题标题】:classifying documents in multiple categories将文档分类为多个类别
【发布时间】:2012-10-02 23:42:38
【问题描述】:

我编写了一个基于Naive Bayes algorithm 的分类程序,它非常适合将一个文档分类为一个类别。然而,我的上下文已经改变,我现在需要将文档分类为 N 个类别。

基本上我需要从“垃圾邮件”/“非垃圾邮件”分类切换到“垃圾邮件和扑克牌”、“垃圾邮件和某些东西”、“非垃圾邮件”。

我想到了 2 个选项:

  1. 调整算法并获得按概率排序的可能类别。这可能有效,但对我来说似乎不合适。你怎么看?

  2. 使用完全不同的算法,在这种情况下,您会推荐哪一种?

提前感谢您的反馈:)

【问题讨论】:

标签: python machine-learning classification


【解决方案1】:

没有理由不将朴素贝叶斯扩展到多个类别——事实上,它是一个简单的分类器,自然会扩展到多类别的情况。如果您的类别“垃圾邮件和扑克”、“垃圾邮件和某物”、“非垃圾邮件”完全不相交,您可以将其视为单个三向分类任务:如果您的类别 c_1、c_2 和 c_3 具有先验概率 p_1、p_2和 p_3,以及可能性(给定类的实例的概率) l_1、l_2 和 l_3,则该类的后验概率与其似然的先验时间成正比(归一化器只是和 p_1*l_1 + p_2*l_2 + p_3* l_3)。这对于任意数量的类同样适用。

但是,我怀疑通过首先确定它是否是垃圾邮件,然后确定垃圾邮件的类型(一个两阶段的分类过程),您可能会在实践中找到更好的性能。

Tom Mitchell 的“机器学习”一书是对这些东西的一个非常容易理解的介绍,如果你碰巧可以接触到的话。

【讨论】:

  • 这是我的问题,我的类别并非完全不相交。我可以有“垃圾邮件和扑克”和“非垃圾邮件和扑克”:/
  • 如果您的类别不是不相交的,并且沿着几个独立的轴,那么为每个轴设置分类器并从它们的组合输出中得出一个复合标签:即垃圾邮件与非垃圾邮件,扑克与非扑克等等等等。
【解决方案2】:

我们使用来自 Weka Library http://www.cs.waikato.ac.nz/~ml/weka/ 的 J48 算法 (http://de.wikipedia.org/wiki/J48),效果很好!

Lingpipe 也很好用 http://alias-i.com/lingpipe/

两者都非常容易实现并且开箱即用。

【讨论】:

  • 我使用 Python,但我相信我可以在某处找到与 lingpipe 等价的东西。感谢您的反馈:)
【解决方案3】:

由于您的类不是不相交的,因此这是多标签分类。在 scikit-learn 包中有 support for that 使用简单的一对一规则(也称为二元相关性):对于垃圾邮件/非垃圾邮件、扑克/非扑克等每个决策,训练一个单独的分类器并且在预测时,每个都在测试样本上独立运行。

更智能的方法包括classifier chains

(免责声明:我在sklearn中编写了部分多标签分类代码,因此这不是公正的建议。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 2012-08-09
    • 2017-10-04
    • 2016-08-20
    • 2018-04-26
    • 2011-03-08
    • 2017-11-28
    • 2019-06-21
    相关资源
    最近更新 更多