我正在使用简单的朴素贝叶斯算法在mahout中制作文档分类器。目前,我拥有的98%的数据(文件)属于A类,只有2%属于B类。我的问题是,由于A类文档与B类文档的百分比存在如此大的差距,分类器能否准确训练?
我正在考虑做的是忽略一大堆A类文档并“操纵”我拥有的数据集,以便文档的组成没有这么大的差距。因此,我最终拥有的数据集将包括30%的B类和70%的A类。但是,这样做是否有任何后果我不知道?
答案 0 :(得分:2)
其中很多都会考虑到“精确度”作为衡量绩效的程度,这取决于您的问题。如果将“A”错误分类为“B”与将“B”错误分类为“A”一样糟糕/没有,那么除了将所有内容标记为“A”之外,几乎没有理由做任何其他事情,因为您知道它会可靠地获得您的准确率为98%(只要该不平衡分布代表真实分布)。
在不知道你的问题的情况下(如果精确度是你应该使用的措施),我能给出的最佳答案是“它取决于数据集”。使用标准天真海湾可能会达到99%的准确率,尽管可能不太可能。特别是对于朴素贝叶斯,你可以做的一件事是禁用先验(先前基本上是每个类的比例)。这具有假装每个类同样可能发生的效果,尽管模型参数将从不均匀的数据量中学习。
您提出的解决方案是一种常见做法,有时效果很好。另一种做法是为较小的类创建假数据(如何取决于您的数据,对于我不知道任何特别好的方式的文本文档)。另一种做法是增加代表性不足的类中数据点的权重。
您可以搜索“不平衡分类”并找到有关这些类型问题的更多信息(它们是更难的问题之一)。
如果准确性实际上不是衡量问题的好方法,您可以搜索有关“成本敏感分类”的更多信息,这些信息应该会有所帮助。
答案 1 :(得分:1)
您不一定要对数据集A进行采样以减少其实例。有几种方法可用于从不平衡数据集中有效学习,例如多数欠采样(正是你所做的),少数过采样,SMOTE等。以下是这些方法的实证比较:http://machinelearning.org/proceedings/icml2007/papers/62.pdf
或者,您可以为分类器定义自定义成本矩阵。换句话说,假设B =正类,您可以定义成本(假阳性)<成本(假阴性)。在这种情况下,分类器的输出将偏向正类。这是一个非常有用的教程:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.164.4418&rep=rep1&type=pdf