作为初学者,本文很多都是是看过网上文章之后自己的理解,图片和内容借鉴很多网上知识,不能算是完全的原创,若对您造成了侵权,请联系我,我再修改。
我写的算法理解比较粗浅的,争取真正人人都可以看的懂的。
转自:http://www.ruanyifeng.com/blog/2013/12/naive_bayes_classifier.html
转自:http://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html
基本概念
概率(Probability):0-1之间的数字,表示事件发生的可能性。
几率(Odds):特定结果发生和不发生的比例,0到无穷大,比如今天下雨的概率为0.1 不下雨的概率为0.9 ,那么下雨的几率为:0.1/0.9 = 1/9。
条件概率:在特定条件下事件发生的概率。
如P(A|B)表示为在B事件发生的条件下A事件发生的概率。
似然(Likelihood):两个相关条件概率比值,给定B情况下A发生的几率和A的整体几率之比。
图中整个长方形标示随机事件发生的一切结果,A圆圈标示A事件发生的概率,概率用P标示。
A事件与B事件同时发生的概率表示为P(A∩B),或简写为P(AB)即两个圆圈重叠的部分。
A不发生的概率为1-P(A),写为P(~A),即矩形中除了圆圈A以外的其他部分。A或者B至少有一个发生的概率表示为P(A∪B),即圆圈A与圆圈B共同覆盖的区域。
在B事件发生的基础上发生A的概率表示为P(A|B),这便是我们前文所提到的条件概率,图形上它有AB重合的面积比上B的面积。
那么条件概率P(A|B) = P(AB)/P(B)
P(AB) = P(A|B)P(B) 条件概率 总的可能的 A和B相交的概率。
P(BA) = P(B|A)P(A) 把AB替换下,也好理解。
得到:
P(A|B)P(B) = P(B|A)P(A)
然后 P(B|A) = P(A|B)P(B)/P(A)
这就是贝叶斯公式,很简单吧。:)
贝叶斯公式可以做什么?
贝叶斯公式可以用在求事件发生的概率,也许你会问求概率有什么用那? 有用,那就是可以作为分类器使用。
举个例子某个有n项特征(Feature),分别为F1、F2、...、Fn。
现在有m个类别(Category),分别为C1、C2、...Cm。
贝叶斯分类器就是计算出概率最大的那个分类,也就是求:
P(C|F1F2...Fn) = P(F1F2...Fn|C)P(C)/P(F1F2..Fn)
由于P(F1F2..Fn)对于所有的类别都是相同的,可以省略,问题就变成了求:
P(F1F2...Fn|C)P(C)
的最大值,这概率的最大值即为得出的类别。朴素贝叶斯分类器则是更进一步,假设所有特征都彼此独立,因此
P(F1F2...Fn|C)P(C) = P(F1|C)P(F2|C)...P(Fn|C)P(C)
其实各个特征在现实中不一定是彼此独立的,所以其使用具有限制,但是它可以大大简化计算,而且有研究表明对分类的准确性影响不大。
从阮一峰前辈的文章中的例子做说明,提供一组数据。
症状 职业 疾病
打喷嚏 护士 感冒
打喷嚏 农夫 过敏
头痛 建筑工人 脑震荡
头痛 建筑工人 感冒
打喷嚏 教师 感冒
头痛 教师 脑震荡
现在又来了第七个病人,是打喷嚏的建筑工人,请问他患上感冒的概率有多大?
根据贝叶斯公式:
P(A|B) = P(B|A)P(A)/P(B)
可得
P(感冒|打喷嚏建筑工人) = P(打喷嚏建筑工人|感冒)* P(感冒)/P(打喷嚏*建筑工人)
继续推导:
P(感冒|打喷嚏*建筑工人) = P(打喷嚏|感冒)×P(建筑工人|感冒)×P(感冒)/P(打喷嚏)P(建筑工人)
= 0.66 ×0.33×0.5/0.5×0.33
= 0.66
这些数字是从上面表推出的,P(打喷嚏|感冒) = 2/3 3个感冒的人中有2个打喷嚏。
贝叶斯分类对连续值怎么做?
性别分类的例子,仍然从网上抄个例子。
一个人身高6英尺、体重130磅,脚掌8英寸,问该人是男是女?
根据朴素贝叶斯分类器,计算下面:
P(身高|性别)×P(体重|性别)×P(脚掌|性别)×P(性别)
由于身高、体重、脚掌大小均是连续变量,不能采用离散变量的方法来计算概率。假设这些是正态分布,通过样本计算出均值和方差,也就得到正态分布的密度函数,从而计算出密度函数的值。
比如,男性的身高是均值5.855、方差0.035的正态分布。所以,男性的身高为6英尺的概率的相对值等于1.5789(大于1并没有关系,因为这里是密度函数的值,只用来反映各个值的相对可能性)。