使用朴素贝叶斯分类器进行文本分类

4
我正在使用简单的朴素贝叶斯算法在mahout中制作文档分类器。目前,我有98%的数据(文件)属于A类,只有2%属于B类。我的问题是,由于A类文档与B类文档的百分比存在如此大的差距,分类器是否仍能准确地进行训练?
我考虑的做法是忽略一大堆A类文档并“操纵”我所拥有的数据集,以便文档的组成没有这样大的差距。因此,最终得到的数据集将包含30%的B类和70%的A类。但是,我是否没有意识到这样做会产生任何后果?
2个回答

2
很多时候,关于“准确性”作为性能度量的好坏,这取决于你的问题。如果将“A”错分成“B”和将“B”错分成“A”同样糟糕/可以接受,那么除了将所有内容标记为“A”以外,没有其他理由,因为你知道它将可靠地获得98%的准确性(只要该不平衡分布代表真实分布)。
如果不知道你的问题(以及是否应该使用准确性作为衡量标准),我能给出的最佳答案是“这取决于数据集”。使用标准朴素贝叶斯可能会达到99%以上的准确性,尽管可能不太可能。对于朴素贝叶斯,你可以做的一件事是禁用先验的使用(先验基本上是每个类别的比例)。这会导致假装每个类别出现的可能性相等,尽管模型参数将从不均匀的数据中学习。
你提出的解决方案是一种常见的实践,有时效果很好。另一种做法是为较小的类别创建虚拟数据(如何取决于你的数据,对于文本文档,我不知道任何特别好的方法)。另一个做法是增加代表少数类别的数据点的权重。
你可以搜索“不平衡分类”,找到更多关于这些类型问题的信息(它们是比较困难的问题之一)。
如果准确性实际上不是你的问题的好度量标准,你可以搜索更多有关“成本敏感分类”的信息,这应该会有所帮助。

1
您不需要必须对A数据集进行采样以减少其实例数。有多种方法可用于有效地从不平衡的数据集中学习,例如Majority Undersampling(正好是您所做的事情)、Minority Oversampling、SMOTE等等。以下是这些方法的经验比较: http://machinelearning.org/proceedings/icml2007/papers/62.pdf 另外,您可以为分类器定义自定义成本矩阵。换句话说,假设B=正类,则可以定义成本(False Positive) < 成本(False Negative)。在这种情况下,分类器的输出将偏向于正类。这是一个非常有帮助的教程: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.164.4418&rep=rep1&type=pdf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接