朴素贝叶斯(Naiv Bayes)算法简介

贝叶斯算法是由英国数学家托马斯·贝叶斯提出的,这个算法的提出是为了解决“逆向概率”的问题。首先我们先来解释下正向概率与逆向概率的含义:
Tomas Bayes-England.png

正向概率:假设一个箱子里有5个黄色球和5个白色球,随机从箱子里拿出一个球,请问取出的是黄球的概率是多少?很容易计算P(黄球)= N(黄球)/N(黄球)+ N(白球) = 5/5+5 = 1/2。
逆向概率:起初我们并不知道箱子里有多少个球,我们依次从箱子里取出10个球,发现这个10个球中有7个白球,3个黄球,那么我们会根据我们观察到的结果去推测箱子里白球与黄球的分布比例大概是7:3,但是我们无法推测出箱子里的球的个数。

贝叶斯算法是一种基于概率统计的机器学习算法,它会计算出每种情况发生的概率,然后对其进行分类,贝叶斯算法经常用于文本分类问题和垃圾邮件过滤问题。假设有一篇新闻报道news report,我们使用贝叶斯算法来判断它们的类别,结果如下:
p(politics|news) = 0.2
p(entertainment|news) = 0.4
p(sports|news) = 0.7
因为p(sports|news)的概率最大,所以我们判断这篇新闻报道为体育类报道。“|”左边为要判断的类别,右边是我们给定的文章。

贝叶斯公式推导
接下来,我们将通过一个例子来推导贝叶斯公式。在一所学校里,男生和女生的比例分别是60%和40%,男生全部穿长裤,女生一半穿长裤,一半穿裙子。现迎面走来一个同学,你只能看清他(她)穿的是长裤,而无法分辨出他(她)的性别,请问他(她)是女生的概率?
samples.png

下面我们逐步计算这个问题:
假设学校里的学生总数为N。
男生人数:N * P(boys),女生人数:N * P(girls)。
穿长裤的男生人数:N * P(boys) * P(pants|boys),其中P(pants|boys)是条件概率的表达形式,意思是男生中穿长裤的概率。因为男生都穿长裤,所以N * P(boys) * P(pants|boys) = 60% * N。
穿长裤的女生的人数:N * P(girs) * P(pants|girls) = 0.2 * N。
穿长裤的总人数:N * P(boys) * P(pants|boys) + N * P(girs) * P(pants|girls)
穿长裤的同学是女生的概率:P(girl|pants) = N * P(girs) * P(pants|girls) / N * P(boys) * P(pants|boys) + N * P(girs) * P(pants|girls) = P(girs)*P(pants|girls) / P(pants),分母用P(pants)表示穿长裤的概率。
最终结果:P(girl | pants) = P(pants | girl) * P(girl) / P(pants)
其中:P(girl)我们称为先验概率,是已知值,在这个例子中P(girl) = 40%。先验概率:根据以往的经验和分析得到的结果,先验概率和其他条件的影响不受样本影响。
P(girl | pants)我们称为后验概率,根据观察到的结果,去反推是女生的概率。
贝叶斯数学表达式
P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B) = \frac{P(B|A)P(A)}{P(B)} P(AB)=P(B)P(BA)P(A)

贝叶斯算法在垃圾邮件过滤中的应用
给定一封邮件,判定它是否属于垃圾邮件?用D 来表示这封邮件,注意D 由N 个单词组成。我们用h+ 来表示垃圾邮件,h-表示正常邮件。
由贝叶斯公式可得:
P(h+ | D) = P(D | h+) * P(h+) / P(D)
P(h- | D) = P(D | h-) * P(h-) / P(D)
其中P(h+),P(h-)为先验概率,假如我们有1000封邮件,其中有50封是垃圾邮件,其他都是正常邮件,那么P(h+),P(h-)的概率就是已知的。两个式子的分母都是P(D),所以P(D)对于最终结果的比较是没有影响的。接下来就是要求P(D | h+),P(D | h-)垃圾邮件中或正常邮件中是邮件D的概率。
我们都知道一封邮件是由许多词构成的,所以我们将P(D | h+)的表达式转化为P(d1,d2,d3…dn | h+),就是看垃圾邮件中出现d1,d2…dn这些词的概率是多少。
P(d1,d2,d3…dn | h+) = P(d1 | h+) * P(d2 |d1,h+) * P(d3 |d1,d2,h+) …
这个式子计算起来非常困难,所以在这里我们做一个假设,假设每个词都是独立的并且互不影响,那么这个式子就可以表示为:
P(d1,d2,d3…dn | h+) = P(d1 | h+) * P(d2 | h+) * P(d3 | h+) …P(dn | h+)
P(h+ | D) = {P(d1 | h+) * P(d2 | h+) * P(d3 | h+) …P(dn | h+)}* P(h+) / P(D)
上述这个式子我们就称为朴素贝叶斯公式,朴素贝叶斯公式是对贝叶斯公式的简化,它建立在每个单词互相独立的基础上。
在现实生活中,我们写的每一句话中词与词之间肯定是有相互联系,如果没有联系,那么这句话是读不通的。那么为什么朴素贝叶斯能够在计算中使用,首先是计算简单,其次对最终结果的影响非常小。
参考资料
1.唐宇迪,《机器学习与数据分析实战》课程。
2.Peter,《机器学习实战》。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值