ASR/CV/ML      使用python演示朴素贝叶斯分类相关概念   
文章目录  [隐藏]

本文参考:
https://www.ruanyifeng.com/blog/2013/12/naive_bayes_classifier.html
https://cuijiahua.com/blog/2017/11/ml_4_bayes_1.html
https://www.zhihu.com/question/27462939

1.条件概率

条件概率(Conditional probability),就是指在事件B发生的情况下,事件A发生的概率,用P(A|B)来表示。因为B发生了A,它们直接有关系,是相关事件。
另一种说法,P(A|B)即A在B中的比例。见下图。

事件B导致事件A的概率,就看A、B的交集大小,A∩B(或AB)。A∩B即属于A也属于B。
B也成为A的样本空间。
A条件概率为     A|B = A∩B / B。即A在B中的比例。
变换式子得      A∩B = A|B * B
看图推导得      A∩B = B|A * A
变换式子得  A|B * B = B|A * A
变换式子得        A|B = B|A * A / B
最后一条为条件概率的计算公式 P(A|B) = P(B|A) * P(A) / P(B)
P即probability。P(A)和P(B)是简略的写法,省略了样本空间。

【例1】6个常规病例:
症状   疾病
---------------------
打喷嚏  感冒
打喷嚏  过敏
头痛   脑震荡
头痛   感冒
打喷嚏  感冒
头痛   脑震荡
=====================
预测:出现1个打喷嚏的病人,请问他患上感冒的概率有多大。即预测 P(感冒|打喷嚏)。
▶ 全部样本疾病中, 感冒出现了3/6。感冒的样本空间即整个样本集,  即 P(感 冒)=P(感 冒|全集)=3/6
▶ 全部样本疾病中,打喷嚏出现了3/6。打喷嚏的样本空间也是整个样本集,即 P(打喷嚏)=P(打喷嚏|全集)=3/6
▶ 既然是问打喷嚏时感冒的可能性,就看到 3个感冒里有2次打喷嚏,比例2/3。即 P(打喷嚏|感冒)=2/3
P(感冒|打喷嚏) = P(打喷嚏|感冒) x P(感冒) / P(打喷嚏)
        = 2/3 x 3/6 / 3/6
        ≈ 0.67

【例2】6个有职业划分的病例:
症状  职业   疾病
---------------------------
打喷嚏 护士   感冒
打喷嚏 农夫   过敏
头痛  建筑工  脑震荡
头痛  建筑工  感冒
打喷嚏 教师   感冒
头痛  教师   脑震荡
=====================
预测:出现1个打喷嚏的建筑工,请问他患上感冒的概率有多大。即预测 P(感冒|打喷嚏x建筑工)。
▶ 全集中, 感冒 出现了 3/6,即 P(感 冒)=P(感 冒|全集)=3/6
▶ 全集中,打喷嚏 出现了 3/6,即 P(打喷嚏)=P(打喷嚏|全集)=3/6
▶ 全集中,建筑工 出现了 2/6,即 P(建筑工)=P(建筑工|全集)=2/6
▶ 在感冒的人里,打喷嚏 出现了 2/3,即 P(打喷嚏|感冒)=2/3
▶ 在感冒的人里,建筑工 出现了 1/3,即 P(建筑工|感冒)=1/3
P(感冒|打喷嚏x建筑工) = P(打喷嚏x建筑工|感冒) x P(感冒) / P(打喷嚏x建筑工人)
因为症状和职业之间没有因果关系,它们都是预测疾病的平等身份的无关的特征,所以通常把特征看作是独立的。 此时条件概率的计算公式变成了:
 P(感冒|打喷嚏x建筑工) = P(打喷嚏|感冒) x P(建筑工|感冒) x P(感冒) / P(打喷嚏) x P(建筑工)
             = 2/3 x 1/3 x 3/6 / 3/6 x 2/6
             ≈ 0.67

2.全概率

全概率(formula of total probability),是导致该事件发生的[每种原因引起该事件发生的概率]的总和。

读图,B1、B2、B3是已知事件,组成整个样本空间;A是未知事件,需要进行预测。在整个样本空间内,
A的全概率 P(A)=P(A|全集)=P(A∩B1) + P(A∩B2) + P(A∩B3)
假设样本空间有n个已知事件(B1,B2,...Bn),那么空间内的未知事件B的全概率用积分求和表示

回到读图,
A的全概率公式为 P(A) = P(A|B1) * P(B1) + P(A|B2) * P(B2) + P(A|B3) * P(B3)
全概率常作为一个“已知事件”,用于反向推测导致此事件发生的“诱因事件”的概率。

【例3】还是例1的病例:
症状   疾病
---------------------------
打喷嚏  感冒
打喷嚏  过敏
头痛   脑震荡
头痛   感冒
打喷嚏  感冒
头痛   脑震荡
=====================
设症状打喷嚏为B1,头痛为B2;疾病感冒为A
▶ 全集中,打喷嚏 出现了 3/6,即 P(B1)=P(B1|全集)=3/6
▶ 全集中, 头痛 出现了 3/6,即 P(B2)=P(B2|全集)=3/6
▶ 打喷嚏的3人中,感冒的2个。即 P(A|B1) = 2/3
▶  头痛的3人中,感冒的1个。即 P(A|B2) = 1/3
现在有个病人感冒了,猜一下他打喷嚏的条件概率。
根据全概率公式得 感冒全概率P(A) = P(A|B1) * P(B1) + P(A|B2) * P(B2)
得 P(A) = 2/3 * 3/6 + 1/3 * 3/6
     = 0.5
然后,知道疾病是感冒,求打喷嚏的概率,即P(B1|A)
由条件概率的公式 P(B1|A) = P(B1) * P(A|B1) / P(A),代入感冒全概率P(A),
P(B1|A) = 3/6 * 2/3 / 0.5
       ≈ 0.67

3.贝叶斯推断

条件概率公式 P(A|B) = P(B|A) * P(A) / P(B),
可以转换得  P(A|B) = P(A) * ( P(B|A) / P(B) )
▷ P(A|B)    称为"后验概率"(Posterior probability),即在B事件发生之后,我们对A事件概率的重新评估。
▷ P(A)     称为"先验概率"(Prior probability),即在B事件发生之前,我们对A事件概率的一个判断。
▷ P(B|A)/P(B) 称为"可能性函数"(Likelyhood),这是一个“调整因子”,使得预估概率更接近真实概率。
由此,条件概率可以理解成下面的式子:
后验概率 = 先验概率 x 调整因子
如果"调整因子" > 1,意味着"先验概率"被增强,事件A的发生的可能性变大;
如果"调整因子" < 1,意味着"先验概率"被削弱,事件A的可能性变小;
如果"调整因子" = 1,意味着B事件无助于判断事件A的可能性,它们没有关系,是无关的独立事件。

【例4】两个盒子,红盒子里有30个红钥匙+10个绿钥匙,蓝盒子里有20个红钥匙+20个绿钥匙。
老王拿到了一个红钥匙,问你:老王拿的红钥匙是红盒子里的概率多大。

▶ 设红盒子为H1,蓝盒子为H2,那么P(H1)=P(H2)=1/2,即关于H1的"先验概率"。
▶ 设老王拿到的红钥匙是E,则问题就是求P(H1|E),即关于H1的"后验概率",因为要根据E对H1进行修正。
  P(E|H1)为红盒子里取出红钥匙的概率 = 30/(30+10),
  P(E|H2)为蓝盒子里取出红钥匙的概率 = 20/(20+20),
1)由全概率公式得:
P(E) = P(E|H1)*P(H1) + P(E|H2)*P(H2)
   = 30/(30+10) * 1/2 + 20/(20+20) * 1/2
   = 0.625
2)条件概率公式得:
P(H1|E) = P(H1) * ( P(E|H1) / P(E) ), 代入P(E),
     = 1/2 * (30/(30+10) / 0.625)
     = 0.6
结果表明老王拿的红钥匙是红盒子里的概率为0.6,因为调整因子(30/(30+10) / 0.625)大于1,所以这个概率是增强了的。
如果只是比较红盒子和蓝盒子哪个可能性比较大,会发现P(H1|E)和P(H2|E)计算是相同的,其中对全概率的计算就没有了必要,
P(H1|E) = P(H1) * P(E|H1) / P(E) ,
P(H2|E) = P(H2) * P(E|H2) / P(E) ,
最终只比较 P(H1) * P(E|H1)P(H2) * P(E|H2)

4.朴素贝叶斯推断

朴素的意思就是【例2】里,
因为症状和职业之间没有因果关系,它们都是预测疾病的平等身份的无关的特征,所以通常把特征看作是独立的。

5.敏感词检测示例

首先有足够的样本词汇,已经区分好了哪些是侮辱性的,哪些不是。并且要把自然语言词汇转成算法可用的数字向量。


样本数据有了,然后就是分类器的训练。
计算全部样本词中侮辱词汇概率 P(侮辱词汇)=P(侮辱词汇|全部样本词汇)
计算侮辱词汇中每个词语概率 P(侮辱词|侮辱性词汇)
同理,计算非侮辱词汇。


最后测试,仅比较词语在两个类别中概率大小即可。
还是先将自然语言词汇转为向量,然后代入先验概率和条件概率,得到每个测试词汇的条件概率。


例中把2个类别的数据独立开来计算,又有相关性,不甚明了,参考:
https://cuijiahua.com/blog/2017/11/ml_5_bayes_2.html


- end

承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设