【问题标题】:Classification using Naive Bayes使用朴素贝叶斯分类
【发布时间】:2013-12-02 20:37:14
【问题描述】:
我正在尝试使用朴素贝叶斯对样本进行分类。我的样本量是 280 万条记录,90% 的记录具有类标签(因变量)=“0”,其余记录为“1”。测试集中的分布也一样(90% - 10%)
朴素贝叶斯分类器将整个测试集标记为“0”。
我该如何处理这种情况?有没有其他算法可以在这种情况下实现。
【问题讨论】:
-
在实践中,独立特征假设通常不成立,因此 NB 对它的工作原理有点偶然。我最近用random forests完成了一个项目,性能明显优于NB。
-
标签:
machine-learning
classification
probability
naivebayes
【解决方案1】:
有几十个分类器,包括:
- 逻辑回归
- 支持向量机
- 决策树
- 神经网络
- 随机森林
- 很多很多...
其中大多数可以使用一些自定义技术来处理类不成比例,例如在 SVM 中它是“类权重”(在 scikit-learn 中可用)。
那么为什么 NB 会失败呢?朴素贝叶斯非常朴素,它假设每个特征都是独立的,这种情况很少发生,所以它只是一个简单理解的想法,但总的来说分类器很弱。
【解决方案2】:
几乎所有分类方法实际上都不会返回二进制结果,而是返回给定案例属于该类别的可能性的倾向得分(通常在 0 到 1 之间)。然后通过选择一个截止点来创建二进制结果,通常在 0.5 处。
当您想使用弱预测变量识别罕见病例时,任何分类方法都可能无法找到倾向得分高于 0.5 的病例,导致您的病例全为 0。
在这种情况下你可以做 3 件事:
- 我建议尽可能找到更强的预测变量
-
不同的统计方法可能更适合识别数据集中的模式
-
降低分界点会增加真阳性的数量,但会以更多的假阳性为代价
【解决方案3】:
使用更好的分类器可能会也可能不会解决您的问题。这里的问题是你的问题是不平衡的。如果数据是不可分离的,那么 90% 的准确率可能代表良好的性能,分类器通过始终做出相同的预测来实现。如果这不是您想要的行为,您应该使用成本函数或从您的正面重新采样,以便您有更多的正面数量。