深度理解朴素贝叶斯

本文通过武侠世界的比喻深入浅出地解释了朴素贝叶斯分类器的原理,强调了特征独立性假设的重要性。朴素贝叶斯通过贝叶斯定理计算不同特征条件下类别的概率,简化复杂问题。文中通过实例展示了如何用朴素贝叶斯进行分类,并指出在特征不独立时朴素贝叶斯可能不适用。文章最后提到了实际应用中如何用少量特征处理多维问题的挑战,并给出了C语言实现朴素贝叶斯分类的示例。
摘要由CSDN通过智能技术生成

阅读下面这边文章后,使我对贝叶斯分类的认知又有了新的体会,拨云见日、醍醐灌顶。

原著作者:夕小瑶

https://mp.weixin.qq.com/s/_oTPcevGiaXl-bKa9nHD_w

下面是对作者文章的理解:

一、顾名思义,从名字上把贝叶斯掰开来看

Naive,有道翻译是“幼稚的、天真的”。Bayes,就是科学家贝叶斯(如图1,https://en.wikipedia.org/wiki/Thomas_Bayes 来自维基百科)。那么,总不能称之为“幼稚贝叶斯”或者“天真贝叶斯吧”,维基百科上称为:In machine learning, naïve Bayes classifiers are a family of simple “probabilistic classifiers” basedon applying Bayes’ theorem with strong (naïve) independence assumptions between the features.翻译过来就是:在机器学习中,贝叶斯分类器是一个在假设样本特征是独立(朴素)的情况下,基于贝叶斯定理的一系列简单概率分类器。In the statistic and computer science literature,naive Bayes models are known under a variety of names, including simple Bayes and independence Bayes. All these names reference the use of Bayes’s theorem in the classifier’s decision rule(维基百科).翻译过来就是:在统计学、计算机科学文献中,朴素贝叶斯模型有时候被称呼为“简单贝叶斯”或者“独立贝叶斯”所有的这些称呼都参考了贝叶斯定理在那边文献中所涉及的分类决策规则中使用。在这里插入图片描述
通过Wikipedia了解了一些贝叶斯分类器的字面意思后,再次延伸一下,细细品味一下“朴素”、“幼稚”、“天真”这几个词语,其实就是像小孩和一些心思清澈的人一样,想问题没那么复杂,把复杂的问题简单化,比如天龙八部中的人物虚竹,但往往这些人都是大智若愚。朴素贝叶斯也就是这个意思,即简化复杂的问题。专业术语来表述就是上述红色标注的:wikipedia为了突出“独立”二字的特点,特意用了strong一词。一言以蔽之:特征独立性假设,这个假设就是条件独立性假设。

  下面通过一个例子来说明一下条件独立性假设。

如果我们要用朴素贝叶斯来识别华山派人物的武功属性,要用到自身“内力值”和“轻功值”这两个特征。所以这里的类别y是高手/普通,特征X=[ x1 = 内力值,x2 = 轻功值 ]。我们知道客观世界(武侠世界)里,“内力值”和“轻功值”明明是有关系的,比如内力值高的人(10w),轻功也不会低到哪儿去,飞檐走壁之间,脸不红,心不跳,动作快而有力且持久(你看石破天抱着阿秀飞,丁不三追了几步累的趴下)。但是朴素贝叶斯的前提是特征独立性假设,这就认定了“内力值”和“轻功值”没有关系。那么当我们求:华山派弟子内力值为10w,轻功1k的概率p(x1=10w,x2=1k)?因为x1和x2是独立的,所以:
p(x1=10w,x2=1k)=p(x1=10w)*p(x2=1k)的概率。客观世界(华山派里)里:①内力值高的人很多,比如气宗一脉内力为10w的人大有人在,所以p(x1=10w)的概率很大。②轻功不行的人也大有人在,比如剑宗一脉,内力不够,轻功不行,所以p(x2=1k)的概率很大。所以p(x1)*p(x2)的概率值较大,但是客观世界里华山派内力值超高但同时轻功又拙劣的弟子的概率值极低,所以特征独立性假设,是朴素贝叶斯的前提,特征不具备独立性的就不适合使用朴素贝叶斯。好,到此,朴素贝叶斯中的朴素二字算是解释完了。如果觉得我这个江湖式的例子不太好的话,我建议看下原著作者夕小瑶的身高和体重的例子。

  现在说一下Bayes,Bayes就是贝叶斯定理:

在这里插入图片描述
我们现在是让计算机利用naive Bayes 对目标样本进行类别y的划分。
假设我们现在只选取了样本的一个特征,该特征有10个等级值{X|1,2,3,4,5,6,7,8,9,10}。
现在我们不妨把事件A看成是目标样本的特征的某个值X,把B看成是目标样本的类别y,替换一下,如下所示:
在这里插入图片描述这样看起来是不是清澈明了一些,下面我来逐一解释每一项的意义。

p(y|X):已知目标样本特征为X的情况下,目标样本被判定为y类别的概率。专业术语称之为后验概率

p(y):已知类别的所有样本中,类别为y的概率。专业术语称之为类别y的先验概率

p(X|y):在已知类别的所有样本中,在知道类别为y的情况下,样本特征值为X 的概率。专业称呼为:似然函数

p(X):已知类别的所有样本中,样本特征值为X的概率。专业术语称呼为:样本特征值X的先验概率,有时候也被称呼为证据。

二、木头人打够了,就仗剑江湖实践练英雄,结合案例深入理解naviBayes
我们要让计算机判断一个角色是否富贵,就从他的财产值来判断,要判断一个角色是否强力,就从他的力量值去判断,判断一个昆虫是不是鳞翅目,就判断它的翅膀上鳞粉值…等等。这些判断指标都是具有唯一性,就像是在一维坐标下有一个判断指标值,大于该指标的为y1=富贵类,小于该指标的为y2=贫穷类。给计算机写一个if-else的判别式就好。

#include<stdio.h>
#include<stdlib.h>
#define level 4 
int main(){
   
  int money;
  scanf("%d",&money); /*please enter money*/
  if(money >= level)
    printf("%s","wealth");
  else printf("%s","poverty");
}

如图2所示:
在这里插入图片描述 图2
除了唯一特征标准判别类型的外,往往有些判别类别的问题我们还需要2个特征。比如判别一个武林人士类别y是顶尖高手,还是普通高手,除了剑术特征值外,还需要内力特征值。{X1=剑术|1,2,3…m,n}把剑术分为n个等级。{X2=内力|1,2,3…m,n}把内力分为n个等级。这样一来,我们就规定剑术值大于某个值的情况下,内力大于某个值,才能算是顶尖高手。如图3所示。同样给计算机写一个嵌套的if-else语句就可以。

#include<stdio.h>
#include<stdlib.h>
#define nL 100
#define jS 100
int main(){
   
  int neiLi;
  int jianSu;
  sacnf("%d %d",&neiLi,&jianSu);
  i
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值