为什么朴素贝叶斯分类器表现如此出色?

机器算法验证 分类 朴素贝叶斯
2022-01-23 15:27:46

朴素贝叶斯分类器是分类问题的流行选择。造成这种情况的原因有很多,包括:

  • “时代精神”——大约十年前垃圾邮件过滤器成功后的广泛认识
  • 容易写
  • 分类器模型构建速度快
  • 可以使用新的训练数据修改模型,而无需重建模型

然而,它们是“幼稚的”——即它们假设特征是独立的——这与其他分类器如最大熵分类器(计算速度慢)形成对比。

通常不能假设独立性假设,并且在许多(大多数?)情况下,包括垃圾邮件过滤器示例,它完全是错误的。

那么为什么朴素贝叶斯分类器在这样的应用程序中仍然表现得非常好,即使特征不是相互独立的呢?

3个回答

大多数机器学习问题都很简单!

例如,参见John Langford 的博客他真正想说的是,机器学习让问题变得简单,这给研究人员提出了一个问题,即他们应该尝试将方法应用于广泛的简单问题还是解决更困难的问题。然而,副产品是,对于许多问题,数据是线性可分的(或至少几乎是线性可分的),在这种情况下,任何线性分类器都可以正常工作!碰巧的是,原始垃圾邮件过滤器论文的作者选择使用朴素贝叶斯,但如果他们使用感知器、SVM、Fisher 判别分析、逻辑回归、AdaBoost 或几乎任何其他可能也可以工作的东西。

对算法进行编码相对容易这一事实有所帮助。例如,要编写 SVM,您要么需要QP Solver,要么需要编写SMO 算法,这不是一项简单的任务。您当然可以下载libsvm,但在早期该选项不可用。然而,还有许多其他简单的算法(包括上面提到的感知器)同样容易编码(并且允许增量更新,正如问题所提到的)。

对于棘手的非线性问题,当然需要能够处理非线性问题的方法。但是,当使用内核方法时,即使这也是一项相对简单的任务然后问题通常变成“我如何为我的数据设计一个有效的核函数”而不是“我应该使用哪个分类器”。

这篇论文似乎证明(我无法理解数学)贝叶斯不仅在特征独立时很好,而且在特征之间相互依赖的特征相似时也很好:

在本文中,我们对朴素贝叶斯的出色分类性能提出了一种新颖的解释。我们从本质上证明了依赖分布;即,节点的局部依赖如何在每个类中分布,均匀或不均匀,以及所有节点的局部依赖如何协同工作,一致(支持某种分类)或不一致(相互抵消),起着至关重要的作用。因此,无论属性之间的依赖关系有多强,如果依赖关系均匀分布在类中,或者依赖关系相互抵消,朴素贝叶斯仍然是最优的。

在分割分类工具中广泛使用朴素贝叶斯分类器后,我的经验与已发表的论文一致,这些论文表明,当所有预测变量都可用时,NBC 在准确性上与线性判别和 CART/CHAID 相当。

(通过将正确解决方案预测为最可能的解决方案的“命中率”以及校准的准确性,这意味着在 70%-80% 的情况下,75% 的成员估计是正确的。)

我的两分钱是 NBC 运作良好,因为:

  • 预测变量之间的相关性并不像人们想象的那么强(典型的互信息分数为 0.05 到 0.15)
  • NBC 可以很好地处理离散的多分变量,而不需要我们粗略地将它们二分法或将序数变量视为基数。
  • NBC 同时使用所有变量,而 CART/CHAID 只使用几个变量

这就是观察所有变量的时候。使 NBC 真正脱颖而出的原因在于,当一个或多个预测变量丢失或未观察到时,它会优雅地降级。在这种情况下,CART/CHAID 和线性判别分析停止。