对多个类别的文档进行分类

时间:2012-10-12 07:32:05

标签: python machine-learning classification

我写了一个基于Naive Bayes algorithm的分类程序,它非常适合将一个文档分类为一个类别。但是我的上下文发生了变化,我现在需要将文档分为N类。

基本上我需要从'垃圾邮件'/'非垃圾邮件'分类转换为'垃圾邮件和扑克','垃圾邮件和某些东西','非垃圾邮件'。

我想到了两个选项:

  1. 调整算法并根据概率排序可能的类别。这可行,但对我来说似乎不对。你觉得怎么样?

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

  3. 提前感谢您的反馈:)

3 个答案:

答案 0 :(得分: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的书“机器学习”是一本非常容易理解的介绍,如果您碰巧可以访问它。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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

更智能的方法包括classifier chains

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