首页 文章

朴素贝叶斯:不 balancer 的测试数据集

提问于
浏览
12

我使用scikit-learn Multinomial Naive Bayes分类器进行二进制文本分类(分类器告诉我文档是否属于X类) . 我使用 balancer 数据集训练我的模型和 balancer 测试集来测试它,结果很有希望 .

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

但是,当我在 生产环境 中运行我的分类器时,误报的数量非常高,因此我的精度非常低 . 原因很简单:在实时场景中(大约90%的时间),分类器会遇到更多负面样本,这与我用于测试和训练的理想 balancer 数据集不对应 .

有没有办法可以在训练期间模拟这个实时案例,还是有任何我可以使用的技巧(包括对文档进行预处理以查看它们是否适合分类)?

我打算用一个不 balancer 的数据集来训练我的分类器,其比例与我在实时案例中的比例相同,但我担心这可能会使朴素贝叶斯偏向负面阶级并且失去对正面课程的回忆 .

任何建议表示赞赏 .

3 回答

  • 2

    您遇到了一个高度不 balancer 的类分布的分类问题 . 我不同意那些用Naive Bayes方法说明问题的人,我将提供一个解释,希望能够说明问题所在 .

    想象一下,你的假阳性率是0.01,你的真阳性率是0.9 . 这意味着您的假阴性率为0.1,您的真实阴性率为0.99 .

    想象一个理想化的测试场景,每个类有100个测试用例 . 你会得到(预期)1个假阳性和90个真阳性 . 大!您的积极课程的精确度为90 /(90 1)!

    现在假设负面例子多于正面1000倍 . 测试中有100个正面例子,但现在有100万个负面例子 . 您现在获得相同的90个真阳性,但是(0.01 * 1000000)= 10000个误报 . 灾害!您的精度现在几乎为零(90 /(90 10000)) .

    这里的要点是分类器的性能没有改变;假阳性和真阳性率保持不变,但 balancer 发生变化,因此您的精确数字会下降 .

    该怎么办更难 . 如果您的分数是可分的但阈值是错误的,您应该根据后验概率查看阈值的ROC曲线,并查看是否有某个地方可以获得您想要的性能 . 如果你的分数不可分,那么试试一堆不同的分类器,看看你是否可以得到它们(逻辑回归几乎是Naive Bayes的替代品;你可能想要试验一些非线性分类器,然而,就像神经网络或非线性SVM一样,因为你经常会得到描绘非常小的类空间的非线性边界 .

    要从 balancer 测试集模拟这种效果,您可以简单地将实例计数乘以列联表中的适当乘数(例如,如果您的负数等级为正数的10倍,则使测试中的每个否定实例添加10个计数到列联表而不是1) .

    我希望至少能够理解你所面临的问题 .

  • 10

    正如@Ben Allison所说,你所面临的问题基本上是你的分类器的准确性不够好 - 或者更具体地说:它的误报率对于它所包含的类别分布来说太高了 .

    “教科书”解决方案确实是使用 balancer 训练集训练分类器,获得“好”分类器,然后在分类器的性能曲线(例如ROC曲线)上找到一个点,该点在您的精度要求之间达到最佳 balancer ;我认为在你的情况下,它会偏向于较低的误报率和较高的假阴性率 .

    然而,情况很可能是分类器对你的要求不够好 - 在误报处于合理水平的时候,你可能会遗漏太多好的案例 .

    当然,一种解决方案是使用更多数据,或尝试其他类型的分类器;例如线性/逻辑回归或SVM,通常在文本分类中具有良好的性能 .

    话虽如此,情况可能是您更喜欢使用朴素贝叶斯出于某种原因(例如对列车时间的限制,频繁添加新类别或预先存在的模型) . 在这种情况下,我可以就可以做些什么提供一些实用的建议 .

    • 假设您已经有用于构建朴素贝叶斯分类器的工作流程,您可能需要考虑Boosting . 通常,这些方法将以一种更强的分类器产生的方式训练几个较弱的分类器 . 推动朴素贝叶斯分类器已经显示出很好地工作,例如见here . 使用相当大的干净列车可以获得最佳效果 .

    • 另一个实用且简单的解决方案(尽管少于"pretty")将在现有分类器之后添加另一个层,具有阈值的简单二项式朴素贝叶斯分类器 - 实质上是"keyword"过滤器,其将仅作为正数输出仅包含至少包含的文档n来自给定字典的单词(您还可以允许某些单词不止一次计数) . 根据您的问题域,可以手动构建这样的字典 . 经过一些试验和错误,我已经看到这种方法显着提高了假阳性率,同时只是适度地伤害了假阴性 .

  • 3

    我认为gustavodidomenico是一个很好的观点 . 您可以将Naive Bayes视为学习概率分布,在这种情况下,属于主题的单词 . 因此,培训数据的 balancer 至关重要 . 如果您使用决策树,比如随机森林模型,您将学习进行分配的规则(是的,涉及概率分布,我为挥手解释而道歉,但有时直觉有帮助) . 在许多情况下,树木比Naive Bayes更强大,可以说是因为这个原因 .

相关问题