我正在使用简单的朴素贝叶斯算法在 mahout 中制作文档分类器。目前,我拥有的 98% 的数据(文档)属于 A 类,只有 2% 属于 B 类。我的问题是,由于 A 类文档与 B 类文档的百分比差距如此之大,分类器还能准确训练吗?
我想做的是忽略一大堆 A 类文档并“操纵”我拥有的数据集,以便文档的组成不会出现如此大的差距。因此,我最终得到的数据集将包含 30% 的 B 类和 70% 的 A 类。但是,这样做是否会产生我不知道的影响?
最佳答案
其中很多涉及“准确性”作为性能衡量标准的好坏,这取决于您的问题。如果将“A”错误分类为“B”与将“B”错误分类为“A”一样糟糕/正常,那么除了将所有内容标记为“A”之外,没有什么理由做任何事情,因为您知道它会可靠地得到你的准确率是 98%(只要不平衡分布代表真实分布)。
在不知道您的问题(并且如果准确性是您应该使用的衡量标准)的情况下,我能给出的最佳答案是“这取决于数据集”。使用标准 naive bay 的准确率有可能超过 99%,尽管可能性不大。特别是对于朴素贝叶斯,您可以做的一件事是禁用先验的使用(先验本质上是每个类的比例)。尽管模型参数是从不均匀的数据量中学习的,但这样做的效果是假装每个类别发生的可能性都是相同的。
您提出的解决方案是一种常见做法,有时效果很好。另一种做法是为较小的类(class)创建假数据(如何取决于您的数据,对于文本文档我不知道有什么特别好的方法)。另一种做法是增加代表性不足的类别中数据点的权重。
您可以搜索“不平衡分类”并找到有关此类问题的更多信息(它们是较难的问题之一)。
如果准确性实际上并不是解决您的问题的好方法,您可以搜索有关“成本敏感分类”的更多信息,这应该会有所帮助。
关于machine-learning - 使用朴素贝叶斯分类器进行文档分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17285522/