python – 朴素贝叶斯:不平衡测试数据集

前端之家收集整理的这篇文章主要介绍了python – 朴素贝叶斯:不平衡测试数据集前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用scikit学习多项式朴素贝叶斯分类器进行二进制文本分类(分类器告诉我文档是否属于X类).我使用一个平衡的数据集训练我的模型和一个平衡的测试集来测试它,结果是非常有希望的.

这个分类器需要实时运行,并且不断分析随机抛出的文档.

然而,当我在生产中运行我的分类器时,误报的数量非常高,因此我的精度很低.原因很简单:在实时情况下(约90%的时间),分类器遇到更多的负面样本,这与我用于测试和培训的理想平衡数据集不符.

有没有办法我可以在培训期间模拟这个实时的情况,还是有什么可以使用的技巧(包括对文档进行预处理,看看它们是否适合分类器)?

我正在计划使用与实时情况相同比例的不平衡数据集来训练我的分类器,但我恐怕可能会将朴素贝叶偏向负面阶层,并失去对正面课程的回忆.

任何建议是赞赏.

解决方法

您遇到了分类问题之一,具有高度不平衡的类分配.我不同意那些用朴素贝叶斯方法说明问题的人,我将提供一个解释,希望可以说明问题是什么.

假设您的假阳性率为0.01,您的真阳性率为0.9.这意味着您的假阴性率为0.1,您的真阴性率为0.99.

想像一个理想化的测试场景,您每个类都有100个测试用例.你会得到(预期)1个假阳性和90个真正的阳性.大!精准是你的积极的班上的90 /(90 1)!

现在想象的是比正面更多的负面例子的1000倍.同样的100个正面例子在测试,但现在有1000000个负面例子.你现在得到90个真正的肯定,但是(0.01 * 1000000)= 10000个假阳性.灾害!您的精度现在几乎为零(90 /(90 10000)).

这里的意思是分类器的性能没有改变;假阳性和真实的阳性率保持不变,但平衡发生变化,您的精确度数字因此而下降.

做什么比较难如果您的分数是可分离的,但阈值是错误的,您应该根据后验概率来查看ROC曲线的阈值,并查看是否有某个地方可以获得所需的性能.如果您的分数不可分离,请尝试一堆不同的分类器,并查看是否可以获得一个分类器(逻辑回归几乎是Naive Bayes的替代品;您可能需要尝试一些非线性分类器,然而,像神经网络或非线性SVM一样,您通常可能会遇到描绘非常小类的空间的非线性边界).

为了从平衡测试集中模拟这种效果,您可以简单地将事例计数乘以应急表中的适当乘数(例如,如果您的负面类别为正面大小的10倍,则使测试中的每个负面实例添加10个计数应急表而不是1).

我希望有一些帮助至少能够理解你所面临的问题.

猜你在找的Python相关文章