贝叶斯算法、正向概率、逆向概率、先验概率、后验概率、单词拼写纠错实例

贝叶斯算法

贝叶斯算法起源于解决逆向概率问题,那么什么叫逆向概率问题呢?在说逆向概率问题之前先看一下什么是正向概率问题。

正向概率问题

举个栗子:假设一个袋子里有N个白球和N个黑球,伸进手随机摸一个,摸出黑球的概率是多大呢?显然摸出黑球的概率是 1 2 \begin{aligned}\frac{1}{2}\end{aligned} 21,这就是正向概率问题。与之对应的就是逆向概率问题。

逆向概率问题

举个栗子:如果我们事先并不知道袋子里黑球和白球的比例,而是随机地摸出几个,观察这些取出来的球的颜色之后,我们能否对袋子里的黑球和白球的比例做出预测呢?实际上就是求在当前事件A发生的条件下,事件B发生的概率。这里取出的球是黑球的概率是事件A,袋子里的黑球的比例是事件B,实际上所求的概率就是当已知取出黑球的概率的时候袋子里的黑球的比例,记作事件 B ∣ A B|A BA。也就是条件概率,所谓的条件就是将事件发生的范围缩小。我认为所有的概率问题都是条"件概率问题",但是这个号条件时不同的,有的事件的条件为0,也就是没有条件的条件,而有的事件是有不同的条件的。

根据贝叶斯公式 P ( B ∣ A ) = P ( A B ) / P ( A ) P(B|A)=P(AB)/P(A) P(BA)=P(AB)/P(A)

P ( A ∣ B ) = P ( A B ) ∣ P ( B ) P(A|B)=P(AB)|P(B) P(AB)=P(AB)P(B)

将上述两式整合得到 P ( B ∣ A ) = P ( A B ) P ( A ) = P ( A ∣ B ) P ( B ) P ( A ) \begin{aligned}P(B|A)=\frac{P(AB)}{P(A)}=\frac{P(A|B)P(B)}{P(A)}\end{aligned} P(BA)=P(A)P(AB)=P(A)P(AB)P(B)

在贝叶斯定理中不可避免地要说道如下几个概念

  • 边缘概率,又称为先验概率,也就是某个时间发生的概率。边缘概率是这样得到的:在联合概率中,把最终结果中那些不需要的事件通过合并成它们的全概率,而消去它们(对离散随机变量用求和得全概率,对连续随机变量用积分得全概率),这称为边缘化(marginalization),比如A的边缘概率表示为P(A),B的边缘概率表示为P(B)。
  • 联合概率,表示两个事件共同发生的概率。A与B的联合概率表示为P(A∩B)或者P(A,B)。
  • 条件概率(又称后验概率):事件A在另外一个事件B已经发生条件下的发生概率。条件概率表示为P(A|B),读作“在B条件下A的概率”。

在公式 P ( B ∣ A ) = P ( A B ) P ( A ) = P ( A ∣ B ) P ( B ) P ( A ) \begin{aligned}P(B|A)=\frac{P(AB)}{P(A)}=\frac{P(A|B)P(B)}{P(A)}\end{aligned} P(BA)=P(A)P(AB)=P(A)P(AB)P(B) P ( B ) P(B) P(B)就是先验概率, P ( A ∣ B ) P(A|B) P(AB)就是后验概率。

对贝叶斯公式还有更好的理解

我们把P(A)称为"先验概率"(Prior probability),即在B事件发生之前,我们对A事件概率的一个判断。P(A|B)称为"后验概率"(Posterior probability),即在B事件发生之后,我们对A事件概率的重新评估。P(B|A)/P(B)称为"可能性函数"(Likelyhood),这是一个调整因子,使得预估概率更接近真实概率。

所以,条件概率可以理解成下面的式子:

后验概率 = 先验概率 x 调整因子

这就是贝叶斯推断的含义。我们先预估一个"先验概率",然后加入实验结果,看这个实验到底是增强还是削弱了"先验概率",由此得到更接近事实的"后验概率"。

在这里,如果"可能性函数 P ( B ∣ A ) / P ( B ) &gt; 1 P(B|A)/P(B)&gt;1 P(BA)/P(B)>1意味着"先验概率"被增强,事件A的发生的可能性变大;如果"可能性函数"=1,意味着B事件无助于判断事件A的可能性;如果"可能性函数"<1,意味着"先验概率"被削弱,事件A的可能性变小。

实际问题1

  • 假设在某个学校里有1000人,男生和女生的比例为 3 : 2 3:2 3:2,分别占到总人数的 60 % , 40 % 60\%, 40\% 60%,40%
  • 男生总是穿着长裤,女生则一半穿长裤一半穿裙子
  • 正向概率:随机取一个学生,穿长裤的概率和穿裙子的概率分别是多大

这是比较好计算的,穿长裤的总人数为男生人数加上女生人数中穿长裤的人数

P ( p a n t s ) = t o t a l _ p o p u l a t i o n × P ( m a l e ) × P ( p a n t s ∣ m a l e ) + t o t a l _ p o p u l a t i o n × P ( f e m a l e ) × P ( p a n t s ∣ f e m a l ) P(pants) = total\_population\times P(male)\times P(pants|male)+total\_population\times P(female)\times P(pants|femal) P(pants)=total_population×P(male)×P(pantsmale)+total_population×P(female)×P(pantsfemal)

1000 × 0.6 + 1000 × 0.4 × 0.5 = 800 1000\times0.6+1000\times0.4\times0.5 = 800 1000×0.6+1000×0.4×0.5=800

那么该学生穿长裤的概率为

P ( p a n t s ) t o t a l _ p o p u l a t i o n = t o t a l _ p o p u l a t i o n × P ( m a l e ) × P ( p a n t s ∣ m a l e ) + t o t a l _ p o p u l a t i o n × P ( f e m a l e ) × P ( p a n t s ∣ f e m a l ) t o t a l _ p o p u l a t i o n = P ( m a l e ) × P ( p a n t s ∣ m a l e ) + P ( f e m a l e ) × P ( p a n t s ∣ f e m a l e ) \begin{aligned}\frac{P(pants)}{total\_population} \\= \frac{total\_population\times P(male)\times P(pants|male)+total\_population\times P(female)\times P(pants|femal)}{total\_population} \\= P(male)\times P(pants|male)+P(female) \times P(pants|female)\end{aligned} total_populationP(pants)=total_populationtotal_population×P(male)×P(pantsmale)+total_population×P(female)×P(pantsfemal)=P(male)×P(pantsmale)+P(female)×P(pantsfemale)

那么这个学生穿长裤概率为 800 / 1000 = 0.8 800/1000=0.8 800/1000=0.8,也可以通过公式 0.6 + 0.4 × = 0.8 0.6+0.4\times=0.8 0.6+0.4×=0.8计算

这几计算公式最后与总人数有关么?显然被消掉了是无关的。

  • 逆向概率:看到一个学生的背影,但是无法辨认男女,只看到穿着长裤,那么这个学生是女生的概率多大呢?

首先,时间A是已发生的事件,记该学生穿着长裤为时间A,那么事件B就是这个学生是女生。这里的穿长裤就是一个限制条件将人数限制在了所有穿长裤的人的范围内。

穿长裤的男生人数为 t o t a l _ p o p u l a t i o n × P ( m a l e ) × P ( p a n t s ∣ m a l e ) total\_population \times P(male)\times P(pants|male) total_population×P(male)×P(pantsmale)

P ( m a l e ) = 0.6 P(male)=0.6 P(male)=0.6

P ( p a n t s ∣ m a l e ) P(pants|male) P(pantsmale)是条件概率,即在男生这个条件下穿长裤的概率是多大。

穿长裤的女生人数为 t o t a l _ p o p u l a t i o n × P ( f e m a l e ) × P ( p a n t s ∣ f e m a l e ) total\_population \times P(female)\times P(pants|female) total_population×P(female)×P(pantsfemale)

接下来求穿长裤的人里面的女生的人数

穿长裤的总人数

t o t a l _ p o p u l a t i o n × P ( m a l e ) × P ( p a n t s ∣ m a l e ) + t o t a l _ p o p u l a t i o n × P ( f e m a l e ) × P ( p a n t s ∣ f e m a l ) total\_population\times P(male)\times P(pants|male)+total\_population\times P(female)\times P(pants|femal) total_population×P(male)×P(pantsmale)+total_population×P(female)×P(pantsfemal)

那么这个穿长裤的同学是女生的概率就是

P ( f e m a l ∣ p a n t s ) = 穿 长 裤 的 女 生 总 的 穿 长 裤 的 人 数 = t o t a l _ p o p u l a t i o n × P ( f e m a l e ) × P ( p a n t s ∣ f e m a l e ) t o t a l _ p o p u l a t i o n × P ( m a l e ) × P ( p a n t s ∣ m a l e ) + t o t a l _ p o p u l a t i o n × P ( f e m a l e ) × P ( p a n t s ∣ f e m a l ) \begin{aligned}P(femal|pants) =\frac{穿长裤的女生}{总的穿长裤的人数}\\= \frac{total\_population \times P(female)\times P(pants|female)}{total\_population\times P(male)\times P(pants|male)+total\_population\times P(female)\times P(pants|femal)}\end{aligned} P(femalpants)=穿穿=total_population×P(male)×P(pantsmale)+total_population×P(female)×P(pantsfemal)total_population×P(female)×P(pantsfemale)

= P ( f e m a l ) × P ( p a n t s ∣ f e m a l e ) P ( m a l e ) × P ( p a n t s ∣ m a l e ) + P ( f e m a l ) × P ( p a n t s ∣ f e m a l e ) \begin{aligned}=\frac {P(femal)\times P(pants|female)}{P(male)\times P(pants|male)+P(femal)\times P(pants|female)}\end{aligned} =P(male)×P(pantsmale)+P(femal)×P(pantsfemale)P(femal)×P(pantsfemale)

可以看到,这个结果是与总人数没有关系的。

其实分母就是 P ( p a n t s ) P(pants) P(pants)

分子就是 P ( p a n t s ∣ g i r l ) P(pants|girl) P(pantsgirl)

这就得到了贝叶斯公式 P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) \begin{aligned}P(A|B)=\frac{P(B|A)P(A)}{P(B)}\end{aligned} P(AB)=P(B)P(BA)P(A)

实际问题2——拼写纠错实例

  • 问题描述:当用户输入一个不在字典中的单词,系统需要猜测用户真正想要输入的单词是什么?记用户实际输入的单词为事件A,系统猜测用户输入的单词为事件B,计算概率公式实际上就是 P ( B ∣ A ) P(B|A) P(BA)

  • 原理描述:用户输入一个单词,系统的任务就是选择和用户输入最相似的拼写正确单词,当然这里的最相似只是一个概率问题,比如用户输入lates这个单词,系统应该更正为late呢还是latest呢?这里输出的只是基于某一条件下的最大概率的单词。

  • 解决问题:也就是要求在出入单词 w w w的情况下,系统输出单词 c c c,使得相对于 w w w的条件最大。

    a r g m a x c P ( c ∣ w ) argmax_c P(c|w) argmaxcP(cw)

    按照贝叶斯理论上面的式子就等价于 a r g m a x c P ( w ∣ c ) P ( c ) P ( w ) \begin{aligned}\frac{argmax_c P(w|c)P(c)}{P(w)}\end{aligned} P(w)argmaxcP(wc)P(c)

    因为用户可能输入任何单词,因此对于任何 c c c来讲,出现 w w w的概率 P ( w ) P(w) P(w)是一样的,而且我们最终只需要比较的是这个概率的大小,而与分母无关,所以直接忽略掉这个 P ( w ) P(w) P(w),直接写成 a r g m a x c P ( w ∣ c ) P ( c ) argmax_cP(w|c)P(c) argmaxcP(wc)P(c)

    实际上为什么要进行这样的转化呢?在实际情况中 P ( A ∣ B ) P(A|B) P(AB)的概率,即在事件B发生的条件下,事件A发生的概率并不好求,例如求随机输入单词 w w w的条件下,单词 c c c的概率,大概只有天知道和他自己知道他想要输入什么?但是经过过转化之后,就容易的多了。

    在这里 P ( c ) P(c) P(c)就是先验概率,这个先验概率是比较好求的,在一个巨大的语料库中统计单词 c c c出现的词频就可以得到。那么进而 P ( w ∣ c ) P(w|c) P(wc)也是可求的,语料库中的单词都是正确的,那么与错误输入 w w w相似的单词的概率我们就可以得到,而 P ( w ∣ c ) P(w|c) P(wc)只需要计算 w w w c c c的相似程度就可得到。我们把这个相似程度叫做编辑距离,也就是需要修改几个字母得到正确单词,编辑距离越小,那么概率值就越大。

    例如:输入单词 a p p l appl appl,假设语料库中与之相似的单词有 a p p l e , a p p l y , a p p l i c a t i o n apple,apply,application apple,apply,application,这三个单词中前两者者只需要增加一个字母,那么对应的编辑距离都为1,而最后一个单词需要增加的字母为7,那么编辑距离就是7。显然系统在不考虑其他因素的条件下,比如前后单词之间的关系等,如果语料库中的 a p p l y apply apply的词频高于 a p p l e apple apple,那么系统应该给出正确单词 a p p l y apply apply

  • 类似的还有垃圾邮件的分类等。

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值