3

我编写了一个基于朴素贝叶斯算法的分类程序,它非常适合将一个文档分类为一个类别。但是我的上下文已经改变,我现在需要将文档分类为 N 个类别。

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

我想到了2个选项:

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

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

提前感谢您的反馈:)

4

3 回答 3

4

没有理由不将朴素贝叶斯扩展到多个类别——事实上,它是一个简单的分类器,自然会扩展到多类别的情况。如果您的类别“垃圾邮件和扑克”、“垃圾邮件和某些东西”、“非垃圾邮件”完全不相交,您可以将其视为单个三向分类任务:如果您有类别 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 的书“机器学习”是对这些东西的一个非常容易理解的介绍,如果你碰巧可以访问它的话。

于 2012-10-12T09:29:29.450 回答
1

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

更智能的方法包括分类器链

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

于 2012-10-18T13:26:33.220 回答
1

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

Lingpipe 也运行良好http://alias-i.com/lingpipe/

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

于 2012-10-12T07:38:21.410 回答