machine-learning - 使用朴素贝叶斯分类器进行文档分类

标签 machine-learning mahout bayesian-networks document-classification

我正在使用简单的朴素贝叶斯算法在 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/

相关文章:

machine-learning - tf.Session() 中的图参数有什么作用?

maven - 为什么 Maven 试图将我的代码编译为 -source 1.3?

r - 贝叶斯网络中一个节点的条件概率修改(R代码)

java - 如何追溯这个编译错误?

hadoop - 如何解决二十个新闻组分类示例上的加载主类MahoutDriver错误

javascript - cytoscape.js 中具有多个父节点的复合节点

machine-learning - 在贝叶斯网络中,节点 "instantiated"是什么意思

python - 从源目录导入 TensorFlow 是什么意思?

machine-learning - 神经网络梯度下降中的反向传播与线性回归

machine-learning - dropout中的in-place是什么意思