瞎聊机器学习——朴素贝叶斯以及拉普拉斯平滑

一、贝叶斯公式

贝叶斯公式是一种用来表示两个条件概率之间关系的公式,其具体表示如下:

P(B|A)=\frac{P(A|B)P(B)}{P(A)}

公式中P(B|A)表示事件A发生的条件下事件B发生的概率,P(A|B)同理,P(A)、P(B)就表示事件A、B的概率,也就是像下面这样:

二、朴素贝叶斯

上面了解了贝叶斯公式,再来说说本文要讲的分类算法——朴素贝叶斯。

朴素贝叶斯是贝叶斯分类中最简单,也是最常见的算法,其中朴素一词的意思是假设各特征之间是相互独立的。

既然是分类算法我们就用分类的思想来表示贝叶斯公式:

其中假设各个特征之间相互独立可以表示为:

 

P(特征|类别1,类别2,类别3) = p(特征|类别1)*p(特征|类别2)*p(特征|类别3)

 

我们最终要求得的结果也就是在某些特征下得到该类别的概率:P(类别|特征)

下面给出一个例子来说一下这个问题:

当我们去买西瓜的时候,我们并不知道哪个西瓜是熟瓜,此时我们就要想到通过什么条件能判断出西瓜是否成熟呢,我们给出一组经验数据作为参考:

 12345678910
瓜蒂脱落未脱落未脱落脱落脱落未脱落脱落未脱落脱落未脱落
形状圆形尖形圆形尖形圆形尖形尖形圆形尖形圆形
颜色深绿浅绿浅绿青色浅绿青色深绿青色浅绿深绿
类别瓜熟瓜生瓜生瓜熟瓜熟瓜生瓜熟瓜熟瓜生瓜熟

根据数据表我们得到特征有:瓜蒂(脱落/未脱落)、形状(尖形/圆形)、颜色(深绿/浅绿/青色)

对于结果:不同的特征组合可以得到不同的结果(瓜熟/瓜生)

有了经验数据,对于不同特征的西瓜我们自然也就可以得到不同的判断结果,假定现在又一西瓜为(脱落、圆形、青色):

对于上述的西瓜我们联系朴素贝叶斯公式得到:

p(瓜熟|脱落、圆形、青色)=p(脱落、圆形、青色|瓜熟) * p(瓜熟) / p(脱落、圆形、青色)

p(瓜生|脱落、圆形、青色)=p(脱落、圆形、青色|瓜生) * p(瓜生) / p(脱落、圆形、青色)

 

对于瓜熟的情况:

P(瓜熟) = 6 / 10 = 0.6

P(脱落 | 瓜熟) = 4 / 6 = 2 / 3

P(圆形 | 瓜熟) = 4 / 6 = 2 / 3

P(青色 | 瓜熟) = 2 / 6 = 1 / 3

 

对于瓜生的情况:

P(瓜生) = 4 / 10 = 0.4

P(脱落 | 瓜生) = 1 / 4 = 0.25

P(圆形 | 瓜生) = 1 / 4 = 0.25

P(青色 | 瓜生) = 1 / 4 = 0.25

 

对于如何判断瓜熟还是瓜生,我们比较p(瓜熟|脱落、圆形、青色)p(瓜生|脱落、圆形、青色)的概率就可以了:

因为二者的贝叶斯公式中都存在相同的p(脱落、圆形、青色)所以我们只需要比较p(脱落、圆形、青色|瓜熟)*p(瓜熟)p(脱落、圆形、青色|瓜生)*p(瓜生):

我们假设各个特征之间相互独立:

P(瓜熟) × P(脱落 | 瓜熟) × P(圆形 | 瓜熟) × P(青色 | 瓜熟) = 0.6 × (2 / 3) × (2 / 3) × (1 / 3) = 4 / 45

P(瓜生) × P(脱落 | 瓜生) × P(圆形 | 瓜生) × P(青色 | 瓜生) = 0.4 × 0.25 × 0.25 × 0.25 = 1 / 160

比较一下:4/45>1/160,所以我们预测该西瓜为瓜熟。

通过该例子,我们就能够大致了解朴素贝叶斯的工作原理以及计算方法,下面通过sklearn和iris数据集来简单的实践一下:

from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import cross_val_score
from sklearn import datasets

iris = datasets.load_iris()
gnb = GaussianNB()
scores = cross_val_score(gnb, iris.data, iris.target, cv=10)
print("Accuracy:%.3f" % scores.mean())

得到的结果如下:

三、拉普拉斯平滑

对于某个数据集,我们考虑到对于某个特征X在训练集中没有出现,那么将会导致整个分类概率变为0,这将会导致分类变得非常不合理,所以为了解决零概率的问题,法国数学家拉普拉斯最早提出用加1的方法估计没有出现过的现象的概率,所以加法平滑也叫做拉普拉斯平滑。假定训练样本很大时,每个分量x的计数加1造成的估计概率变化可以忽略不计,但可以方便有效的避免零概率问题。

应用举例:

假设在文本分类中,有3个类,C1、C2、C3,在指定的1000个训练样本中,某个词语K1,在各个类中观测计数分别为0,990,10,K1的概率为0,0.99,0.01。

对这三个量使用拉普拉斯平滑的计算方法如下:

\frac{0+1}{1000+1+1+1}=\frac{1}{1003}=0.001\frac{990+1}{1000+1+1+1}=\frac{991}{1003}=0.988\frac{10+1}{1000+1+1+1}=\frac{11}{1003}=0.011

在实际的使用中也经常使用加 lambda(1≥lambda≥0)来代替简单加1。如果对N个计数都加上lambda,这时分母也要记得加上N*lambda。

 

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二哥不像程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值