不等组的朴素贝叶斯分类器

机器算法验证 机器学习 朴素贝叶斯 不平衡类
2022-03-22 02:27:16

我正在使用朴素贝叶斯分类器在两组数据之间进行分类。一组数据比另一组大得多(4 倍以上)。我在分类器中使用每个组的先验概率。

问题是我得到的结果有 0% 的真阳性率和 0% 的假阳性率。当我将之前设置为 0.5 和 0.5 时,我得到了相同的结果。

如何将阈值设置为更好的值,以便获得更平衡的结果?

使用逻辑回归分类器时我遇到了类似的问题。我通过从偏差中减去前一项来解决它。

当我对这些数据使用 Fisher 线性判别式时,我得到了很好的结果,其中阈值设置在中间。

我认为这个问题有一些常见的解决方案,我只是找不到。

更新:我刚刚注意到我的分类器过度拟合。训练集上的表现是完美的(100% 正确)。

如果我使用相等的组,那么分类器也会开始分类到“小”组,但性能很差(比 FLD 或 LR 差)。

UPDATE2:我认为问题在于我使用的是全协方差矩阵。使用对角协方差矩阵运行给了我更多“平衡”的结果。

2个回答

将所有模式分配给负类当然不是“奇怪的结果”。可能是贝叶斯最优分类器总是将所有模式分类为属于多数类,在这种情况下,您的分类器正在做它应该做的事情。如果属于正类的模式密度从未超过属于负类的模式的密度,那么无论属性值如何,负类都更有可能。

在这种情况下要做的事情是考虑假阳性和假阴性错误的相对重要性,在实践中,两种不同类型错误的成本相同是很少见的。所以确定假阳性和假阴性错误的损失,并在设置阈值概率时考虑这些(不同的错误分类成本相当于改变先验概率,所以这对于朴素贝叶斯来说很容易实现)。我建议调整先验以最小化损失的交叉验证估计(包括你不相等的错误分类成本)。

如果您的错误分类成本相等,并且您的训练集先验代表操作条件,那么假设您的实现是正确的,那么您可能已经拥有最好的 NB 分类器。

通过计算放大较小的数据组以适应大组。它将拉伸较小组的数据,但它将允许更平等的计算。

如果您仍然像现在一样得到奇怪的结果,请从头开始检查您的整个实现以查找(可能很简单)错误。