前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Naive Bayes——Naive在哪?

Naive Bayes——Naive在哪?

作者头像
luanhz
发布2020-12-03 12:56:51
5410
发布2020-12-03 12:56:51
举报
文章被收录于专栏:小数志小数志

导读

经典机器学习算法中,Naive Bayes可占一席之地,也是唯一一个纯粹的概率分类算法模型。考虑其原理简单却不失强悍性能,Naive Bayes是个人最喜爱的算法之一——当然,另一个是决策树。

贝叶斯其人,据说只是业余数学家

Naive Bayes,中文译作朴素贝叶斯,这里Naive的原义是幼稚的,常常带有一点贬义的味道,用在这个算法命名中翻译为朴素,也称得上是一种包容了。另一个关键词贝叶斯,则是因为朴素贝叶斯算法的主要理论依据是贝叶斯定理,所以本文首先介绍贝叶斯定理,然后引出朴素贝叶斯算法的基本思想和原理。

01 贝叶斯定理

贝叶斯定理一般用于求解后验概率,核心公式为:

P(A|B) = \frac{P(B|A)P(A)}{P(B)}

其中:

  • P(A|B)称作后验概率,为待求目标
  • P(A)为先验概率,一般用大量数据统计得出,当数据量较少时也可根据经验提供
  • P(B|A)为条件概率,可根据大量数据统计得出,一般采用极大似然估计的方式给出,实际上也属于先验概率
  • P(B)实际上当然也属于先验概率,而且仅涉及到单变量,所以与P(A)类似,也可用数据统计得出,但由于P(B)在贝叶斯定理中独立处于分母中,其具体数值的大小不会影响最大后验概率的判定结果,一般无需计算。如果在先验概率未知且确需计算的话,那么一般会引入贝叶斯全概率公式:
P(B) = \Sigma P(B|A_i)P(A_i)

即遍历可能触发B的所有条件Ai,得到其最终的P(B)。

在此基础上,贝叶斯定理常用于解决这样一类场景,这里引用一个经典的贝叶斯条件概率问题:

假设在某居民区, 一种罕见的疾病以1‰的概率传染其他人。该疾病有一种检验方法:若有人传染上了这种病,其检验结果有99%的概率呈阳性;同时此检验也会产生一些虚假的阳性,即未传染的患者有2%的概率也呈阳性。问当前一名居民检验呈阳性,传染该病的真实概率有多大?

在这一问题中,简单对应一下几个概率为:

  • 先验概率:P(传染)=0.001,P(未传染)=0.999
  • 条件概率:P(阳性|传染)=0.99,P(阴性|传染)=0.01;P(阳性|未传染)=0.02,P(阴性|未传染)=0.98
  • 待求目标概率:P(传染|阳性)
P(传染|阳性) = \frac{P(阳性|传染)P(传染)}{P(阳性)} = \frac{P(阳性|传染)P(传染)}{P(阳性|传染)*P(传染)+P(阳性|未传染)*P(未传染)}

其中分子的推导即用到全概率公式。带入相应的基础概率值,可以得出在检测为阳性的情况下真实传染的概率仅为4.7%,未传染的概率即为95.3%。

这可能是一个令人大跌眼镜的计算结果,但确实是经过理论计算得出。一个直观的理解是虽然在传染后检测呈阳性的概率很大,但由于传染的基数过小,导致小基数大概率的作用结果未能抵过大基数小概率的影响。

02 朴素贝叶斯算法

在介绍贝叶斯定理的基础上,那么朴素贝叶斯的思想其实已经非常简单:单特征条件下可以应用贝叶斯定理得出不同条件的概率(比如前例中根据检测呈现阳性还是阴性这个特征计算传染和未传染的概率),那么能否根据多维特征来推广这个概率求解公式呢?这就涉及到朴素贝叶斯的一个核心假设:朴素(Naive)!

问题可描述为:

P(A_i|B_1, B_2, …, B_n) = \frac{P(B_1, B_2, …, B_n|A_i)P(A_i)}{P(B_1, B_2, …, B_n)}
P(A_i|B_1, B_2, …, B_n) = \frac{P(B_1, B_2, …, B_n|A_i)P(A_i)}{P(B_1, B_2, …, B_n)}

用机器学习语言描述:B1……Bn表示每一列特征取值,A代表分类标签结果。

其中:

  • P(Ai|B1, B2, …, Bn)是在已知观测特征B1,B2,…,Bn的情况下计算Ai发生的概率,为待求目标
  • P(B1, B2, …, Bn|Ai)为在Ai条件下出现B1,B2,…,Bn的一组特定特征的条件概率
  • P(Ai)为A事件的先验概率
  • P(B1, B2, …, Bn)作为分母,不影响相对大小,其实可以不用求解

那么,为了求出观测特征发生的相对概率大小,则需分别计算P(Ai)和P(B1, B2, …, Bn|Ai)两类概率,其中前者涉及单变量自然比较好求解,难点在于后者。这个概率的求解难度有多大呢?设想一下,假如每个B1……Bn每个事件取值都只有两类,那么对于每个分类标签Ai,要根据数据统计计算的先验概率P(B1, B2, …, Bn|Ai)则有2^n个,这是一个随特征列数指数增长的概率结果,还只是一个分类标签,K个分类标签理论上最多有K*2^n个先验概率。这是一个不可接受的事实。于是,朴素贝叶斯的关键假设浮出水面:假设各特征间相互独立!进而:

P(B_1, B_2, …, B_n|A_i)=P(B_1|A_i)·P(B_2|A_i)···P(B_n|A_i)

于是,K*2^n个先验概率瞬间变为K*2*n个先验概率,即可分别对每列特征Bj求解不同分类标签下的先验概率P(Bj|Ai),其中每个分类标签对应的单特征Bj仅需2个先验概率。这是一个可以接受的计算量。

至此,朴素贝叶斯算法训练的过程实际上就是求解各个先验概率P(Ai)和条件概率P(Bj|Ai)的过程,然后在预测分类过程中则仅需将训练过程中得到的各个概率值代入贝叶斯公式中,即可得到当前特征下的各分类标签的相对概率结果。其中相对概率较大的自然就作为预测结果标签。

朴素贝叶斯算法就是这么简单易懂!

03 几个值得注意的点

朴素贝叶斯算法原理简单,实现起来也不复杂,在某些特定场景下也有着较好的算法性能(例如垃圾邮件识别),但以下几点值得注意:

  • 朴素贝叶斯算法仅可用于分类,而不能执行回归任务。可能也是唯一一个仅可用于分类而不能用于回归的算法模型
  • 根据特征数值离散或连续,在求解或拟合条件概率时可分别得到离散下多项式分布或连续条件下高斯分布
  • 在计算条件概率过程中,一个不容忽视的细节是拉普拉斯平滑:即考虑条件概率是由有限的训练样本统计计算得出,那么自然可能存在未覆盖的特殊情况,例如在分类标签Ai下Bj的某特征出现概率为0,那么在Bj出现该特征时作用的所有结果都会是0。这是一个过于简单粗暴的处理,毕竟训练中未曾出现不代表不可能出现。所以,在实际建模中会以最小出现1次参与计算条件概率。类似地,在特征取值连续条件下,也被赋予了一个特定的最小概率来避免0概率出现时的一刀切。

最后,Naive Bayes中的Naive,难道仅表示各特征列相对独立的这一朴素的假设吗?其实不然!还有另外一层隐藏的含义在于:Naive Bayes还假设各特征对标签预测的重要程度(feature_importance)是一致的!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小数志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档