我编写了一个基于朴素贝叶斯算法的分类程序,它非常适合将一个文档分类为一个类别。但是我的上下文已经改变,我现在需要将文档分类为 N 个类别。
基本上我需要从“垃圾邮件”/“非垃圾邮件”分类切换到“垃圾邮件和扑克牌”、“垃圾邮件和其他东西”、“非垃圾邮件”。
我想到了2个选项:
调整算法并获得按概率排序的可能类别。这可能有效,但对我来说似乎不合适。你怎么看 ?
使用完全不同的算法,在这种情况下你会推荐哪一个?
提前感谢您的反馈:)
我编写了一个基于朴素贝叶斯算法的分类程序,它非常适合将一个文档分类为一个类别。但是我的上下文已经改变,我现在需要将文档分类为 N 个类别。
基本上我需要从“垃圾邮件”/“非垃圾邮件”分类切换到“垃圾邮件和扑克牌”、“垃圾邮件和其他东西”、“非垃圾邮件”。
我想到了2个选项:
调整算法并获得按概率排序的可能类别。这可能有效,但对我来说似乎不合适。你怎么看 ?
使用完全不同的算法,在这种情况下你会推荐哪一个?
提前感谢您的反馈:)
没有理由不将朴素贝叶斯扩展到多个类别——事实上,它是一个简单的分类器,自然会扩展到多类别的情况。如果您的类别“垃圾邮件和扑克”、“垃圾邮件和某些东西”、“非垃圾邮件”完全不相交,您可以将其视为单个三向分类任务:如果您有类别 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 的书“机器学习”是对这些东西的一个非常容易理解的介绍,如果你碰巧可以访问它的话。
我们使用来自 Weka 图书馆http://www.cs.waikato.ac.nz/~ml/weka/的J48 算法 ( http://de.wikipedia.org/wiki/J48 ),效果很好!
Lingpipe 也运行良好http://alias-i.com/lingpipe/
两者都非常容易实现并且开箱即用。