贝叶斯公式
P(a|b) = P(a) * P(b|a) / P(b)
P(a)是先验概率;你提前知道一个袋里有5个球,3红2白;那么,白球概率是0.4,红球概率是0.6.这是已知分布情况下的概率;
P(b|a)是a情况下,b发生的概率;
P(b)是发生b的总概率,注意这个不等于一,等于发生b的总数,不是发生a的。
朴素贝叶斯
wiki的例子:
如果一种水果其具有红,圆,直径大概3英寸等特征,该水果可以被判定为是苹果。尽管这些特征相互依赖或者有些特征由其他特征决定,然而朴素贝叶斯分类器认为这些属性在判定该水果是否为苹果的概率分布上独立的。
还是来看wiki:
理论上,概率模型分类器是一个条件概率模型。(为什么?)P(C|F1,F2...Fn),C是独立的类别变量有若干类别(苹果成熟和不成熟还有半成熟三个类别),判断条件依赖于F1,F2。。。Fn,(F1红色,F2大,F3圆。。,那么这三个其实有联系)。
那么,方程的理解变成:在具有这些属性的情况下,苹果是成熟的概率是多大?比如:拿起来一个苹果,红色,不大,圆,那么这个苹果是成熟苹果吗?这个我事先不知道是不是成熟苹果。
再来对比一下先验概率:成熟苹果具有这些特征的概率是?对于F1,十个苹果,红色7个,就是0.7,没有条件,也就是没有成熟苹果或者不成熟苹果之分。
再来看一下:P(F1|C)。C TRUE的条件下,F1的概率。成熟苹果内,F1的概率。
分母可以看成常数,因为每个子项的分母都一样。
但是,F1,F2。。。Fn都其实或多或少联系的,当n很大时,计算太难了。那怎么办?
假设每个特征Fi对于其他特征Fj是条件独立的。这就意味着P(Fi|C,Fj) = P(Fi|C)。(这个很好理解,假设有两个特征F1,F2;那么,他们互相联系,P(C|F1,F2)=P(F1)P(F1|C,F2) 后面的是C和F2条件下,F1的概率。(具体可以看概率书,有推导)这样就难做了。)
P(Fi|C,Fj) = P(Fi|C)时,P(C|F1,F2...Fn) = 1/Z * P(C)P(F1|C)P(F2|C)...P(Fn|C)。Z是一个依赖Fn的缩放因子。
那么,C到底是成熟还是不成熟呢?根据最大似然估计,概率最大的就是正确的。公式写不了,其他人那里有,可以借鉴下。
工程应用
经常用来做拼写检查器。
argmaxc P(C|W) ---> argmaxc P(W|C)P(C)/P(W)
argmaxc P(C|W):如果我想写C(正确拼写),但是写了W(想写cao,写成了cai,那写了w就是结果)的概率;那,写成了cai时,其实想写的有很多,系统不知道,比如可以写成cau,cap,caw等等。这个公式的意思就leile,如果写了cai,求出写成cao,cau等等的概率,什么词的概率最大?哪个概率大就用哪个。
P(C):cao,cau等等在文章中的概率多大,是统计得出的。
P(W|C):用边际距离求,输入C的情况下,W的概率。
代码: