机器学习系列【分类】scikit-learn(一)

  朴素贝叶斯是经典的机器学习算法之一,同时也是为数不多的基于概率论的分类算法。不过朴素贝叶斯算法相对而言,还是很简单,很容易理解的。用一句话概括理解就是:通过已知数据判定未知数据的一个概率问题,多用于文本分类,比如垃圾邮件过滤等。
本篇主要从以下几方面来总结:

  • 基本概念
  • 基于前提
  • 三种实现方式
  • 优化改进
  • 延伸
    宏观见如下思维导图:
    朴素贝叶斯

一、基本概念:

1、定义

朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。

2、“朴素”的含义

各样本特征间相互独立;
在这里插入图片描述
就比如体重和身高是有直接关系的,但是我们在这里就可以很天真的假设两者是没有任何关系的。朴素其实就是各样本特征间保持相互独立。

二、基于前提

1、贝叶斯公式

在这里插入图片描述
根据如上可爱的图,我们可以得到很多有用信息

P ( B ∣ A ) = P ( A ∩ B ) P ( A ) P(B|A)=\frac{P(A∩B)}{P(A)} P(BA)=P(A)P(AB) 在A发生的条件下,B发生的概率(A∩B的部分)

P ( A ∣ B ) = P ( A ∩ B ) P ( B ) P(A|B)=\frac{P(A∩B)}{P(B)} P(AB)=P(B)P(AB) 在B发生的条件下,A发生的概率(A∩B的部分)

推断可得到:(贝叶斯公式)

P ( B ∣ A ) = P ( A ∣ B ) ∗ P ( B ) P ( A ) P(B|A)=\frac{P(A|B)*P(B)}{P(A)} P(BA)=P(A)P(AB)P(B)

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)

  • 先验概率:P(A), P(B)
  • 条件概率:P(A|B) ,P(B|A)

2、相互独立

  独立的定义有多种表达方式。在讨论概率问题时,独立性是一种重要的基础概念。常用的几种表达如下:

  1. A与B独立
  2. (条件概率与条件无关)P(A|B)=P(A|非B)
  3. (添加或去除条件不受影响)P(A|B)=P(A)
  4. (联和概率之比相同)P(B|A):P(B|非A)=P(非B,A):P(非B,非A)
  5. ※(联和概率是边缘概率的乘积)P(B,A)=P(B)P(A)

我们可以举一个很简单明了的例子,见如下表格:

Y=松Y=竹Y=梅
X=优 1 48 \frac{1}{48} 481 2 48 \frac{2}{48} 482 3 48 \frac{3}{48} 483
X=良 2 48 \frac{2}{48} 482 4 48 \frac{4}{48} 484 6 48 \frac{6}{48} 486
X=中 5 48 \frac{5}{48} 485 10 48 \frac{10}{48} 4810 15 48 \frac{15}{48} 4815

X 与Y是否相互独立?
优: 1 48 \frac{1}{48} 481 : 2 48 \frac{2}{48} 482: 3 48 \frac{3}{48} 483=1:2:3

良: 2 48 \frac{2}{48} 482 : 4 48 \frac{4}{48} 484: 6 48 \frac{6}{48} 486=1:2:3

中: 5 48 \frac{5}{48} 485 : 10 48 \frac{10}{48} 4810: 15 48 \frac{15}{48} 4815=1:2:3

  根据第4种表达方式,联合概率之比相同,松竹梅之间的比例和优良中是毫无关系的。这种比值的方式是最能直接了当看明白的。但是方式5是最能体现相互独立的,计算流程如下:

P(松,优)= 1 48 \frac{1}{48} 481

P(松)= 1 48 \frac{1}{48} 481+ 2 48 \frac{2}{48} 482+ 5 48 \frac{5}{48} 485= 8 48 \frac{8}{48} 488

P(优)= 1 48 \frac{1}{48} 481+ 2 48 \frac{2}{48} 482+ 3 48 \frac{3}{48} 483= 6 48 \frac{6}{48} 486

P(松)P(优)= 8 48 \frac{8}{48} 488 6 48 \frac{6}{48} 486= 1 48 \frac{1}{48} 481 满足P(松,优)=P(松)*P(优)

P(松,良)= 2 48 \frac{2}{48} 482

P(良)= 2 48 \frac{2}{48} 482+ 4 48 \frac{4}{48} 484+ 6 48 \frac{6}{48} 486= 12 48 \frac{12}{48} 4812

P(松)P(良)= 8 48 \frac{8}{48} 488 12 48 \frac{12}{48} 4812= 2 48 \frac{2}{48} 482 满足P(松,良)=P(松)*P(良)

P(松,中)= 5 48 \frac{5}{48} 485

P(中)= 5 48 \frac{5}{48} 485+ 10 48 \frac{10}{48} 4810+ 15 48 \frac{15}{48} 4815= 30 48 \frac{30}{48} 4830

P(松)P(中)= 8 48 \frac{8}{48} 488 30 48 \frac{30}{48} 4830= 5 48 \frac{5}{48} 485 满足P(松,中)=P(松)*P(中)

同理:
P(竹,优)=P(竹)*P(优)
P(竹,良)=P(竹)*P(良)
P(竹,中)=P(竹)*P(中)
P(梅,优)=P(梅)*P(优)
P(梅,良)=P(梅)*P(良)
P(梅,中)=P(梅)*P(中)

  看到以上计算流程,发现若是人工计算的话,居然还挺麻烦。但是最后一条便于计算,也是很合理的。(详细可参考 《程序员的数学-概率论》)

三、三种常用模型

(2019年06月17日14:59:49-后期博客详细说明)

  • 基于伯努利模型,即先验为伯努利分布的朴素贝叶斯
  • 基于多项式模型,即先验为多项式分布的朴素贝叶斯
  • 基于高斯模型,即先验为高斯分布的朴素贝叶斯

四、公式

从一个很简单的下例子入手,然后理解公式。

挂科了(Y)玩游戏(X1)喝酒(X2)学习(X3)
1110
0001
1101
1010
0011
0101
0010
1001

问题:我们来判定一个人,没有玩游戏,没有喝酒,还学习了,挂科的概率?
通过如上的表格,我们可以得到如下的基本概率:

挂科了的概率: P ( Y = 1 ) = 4 8 P(Y=1)=\frac{4}{8} P(Y=1)=84

不挂科的概率: P ( Y = 0 ) = 4 8 P(Y=0)=\frac{4}{8} P(Y=0)=84

玩游戏的概率: P ( X 1 = 1 ) = 3 8 P(X1=1)=\frac{3}{8} P(X1=1)=83

不玩游戏的概率: P ( X 1 = 0 ) = 5 8 P(X1=0)=\frac{5}{8} P(X1=0)=85

喝酒了的概率: P ( X 2 = 1 ) = 4 8 P(X2=1)=\frac{4}{8} P(X2=1)=84

没喝酒的概率: P ( X 2 = 0 ) = 4 8 P(X2=0)=\frac{4}{8} P(X2=0)=84

学习了的概率: P ( X 3 = 1 ) = 5 8 P(X3=1)=\frac{5}{8} P(X3=1)=85

没学习的概率: P ( X 3 = 0 ) = 3 8 P(X3=0)=\frac{3}{8} P(X3=0)=83

玩游戏了且挂科的概率: P ( Y ∩ X 1 ) = 2 8 P(Y \cap X1)=\frac{2}{8} P(YX1)=82

喝酒了且挂科的概率: P ( Y ∩ X 2 ) = 2 8 P(Y \cap X2)=\frac{2}{8} P(YX2)=82

学习了且挂科的概率: P ( Y ∩ X 3 ) = 2 8 P(Y \cap X3)=\frac{2}{8} P(YX3)=82

条件概率:玩游戏了且挂科的概率: P ( Y ∣ X 1 ) = P ( Y ∩ X 1 ) P ( X 1 ) = 2 3 P(Y|X1)=\frac{P(Y \cap X1)}{P(X1)}=\frac{2}{3} P(YX1)=P(X1)P(YX1)=32

喝酒了且挂科的概率: P ( Y ∣ X 2 ) = P ( Y ∩ X 2 ) P ( X 2 ) = 1 2 P(Y|X2)=\frac{P(Y \cap X2)}{P(X2)}=\frac{1}{2} P(YX2)=P(X2)P(YX2)=21

学习了且挂科的概率: P ( Y ∣ X 3 ) = P ( Y ∩ X 3 ) P ( X 3 ) = 2 5 P(Y|X3)=\frac{P(Y \cap X3)}{P(X3)}=\frac{2}{5} P(YX3)=P(X3)P(YX3)=52

对于贝叶斯推论,由于上边已经证明,所以这边不多做描述。
我们可以通过X1举例得到一个贝叶斯公式:

P ( Y ∣ X 1 ) = P ( X 1 ∣ Y ) P ( Y ) P ( X 1 ) P(Y|X1)=\frac{P(X1|Y)P(Y)}{P(X1)} P(YX1)=P(X1)P(X1Y)P(Y)

我们此刻重写贝叶斯准则,其不仅仅与X1有关,而且与X2,X3都有关。
把X1替换成X1,X2,X3,即

P ( Y ∣ X 1 , X 2 , X 3 ) = P ( X 1 , X 2 , X 3 ∣ Y ) P ( Y ) P ( X 1 , X 2 , X 3 ) P(Y|X1,X2,X3)=\frac{P(X1,X2,X3|Y)P(Y)}{P(X1,X2,X3)} P(YX1,X2,X3)=P(X1,X2,X3)P(X1,X2,X3Y)P(Y)

X1,X2,X3之间是相互独立的,在朴素贝叶斯中,假设所有条件都是相互独立的,该假设也称作条件独立性假设,
意味着可以使用P(X1|Y)P(X2|Y)P(X3|Y)来计算 P(X1,X2,X3|Y)P(Y),也就是说

P(X1,X2,X3|Y)P(Y)≈P(X1|Y)P(X2|Y)P(X3|Y)

其中 P ( X 1 ∣ Y ) = P ( Y ∣ X 1 ) P ( Y ) P ( X 1 ) P(X1|Y)=\frac{P(Y|X1)P(Y)}{P(X1)} P(X1Y)=P(X1)P(YX1)P(Y)

P ( X 2 ∣ Y ) = P ( Y ∣ X 2 ) P ( Y ) P ( X 2 ) P(X2|Y)=\frac{P(Y|X2)P(Y)}{P(X2)} P(X2Y)=P(X2)P(YX2)P(Y)

P ( X 3 ∣ Y ) = P ( Y ∣ X 3 ) P ( Y ) P ( X 3 ) P(X3|Y)=\frac{P(Y|X3)P(Y)}{P(X3)} P(X3Y)=P(X3)P(YX3)P(Y)

所以P(Y|X1,X2,X3)≈P(X1|Y)P(X2|Y)P(X3|Y)P(Y),在此忽略了P(X1,X2,X3)
最终需要的问题是求:没有玩游戏,么有喝酒,还学习了,挂科的概率是多少。

P(Y=0|X1=0,X2=0,X3=1)= 5 28 \frac{5}{28} 285

将如上的X1,X2,X3换成W,W为一个向量,即它由多个数值组成,这就是我们的朴素贝叶斯公式

P ( Y ∣ W ) = P ( W ∣ Y ) P ( Y ) P ( W ) P(Y|W)=\frac{P(W|Y)P(Y)}{P(W)} P(YW)=P(W)P(WY)P(Y)

五、优化方式

1、拉普拉斯平滑

比如上边的挂科的例子,我们来计算没玩游戏,没喝酒,还学习了挂科与不挂科的概率

P(Y=0|X1=0,X2=0,X3=1)=P(X1|Y)P(X2|Y)P(X3|Y)P(Y)= 1 2 \frac{1}{2} 21 1 2 \frac{1}{2} 21 1 2 \frac{1}{2} 21* 1 2 \frac{1}{2} 21= 1 16 \frac{1}{16} 161

P(Y=1|X1=0,X2=0,X3=1)=P(X1|Y)P(X2|Y)P(X3|Y)P(Y)= 3 4 \frac{3}{4} 43 1 2 \frac{1}{2} 21 3 4 \frac{3}{4} 43* 1 2 \frac{1}{2} 21= 9 64 \frac{9}{64} 649

  所以通过以上概率,我们可以分析得到,若不玩游戏,不喝酒,还学习了,不挂科的概率比较大。
但是用极大似然估计法,有可能会出现所要估计的概率值为0的情况,这会影响后验概率的计算结果。这种情况我们则引入贝叶斯估计的情况,也就是专业术语,拉普拉斯平滑,加入一个参数λ,进行调和,来避免0的情况的发生。当λ=1的时候,就是拉普拉苏平滑;当λ=0的时候,也就是极大似然估计。
在这里插入图片描述
  其中K就是表示有几种类别,我们都知道朴素贝叶斯算法是适用于标称型数据的,也就是只存在是和否两种情况,挂科与否的例子,我们用了1和0两种,所以K=2.加入λ的取值,我们计算的结果如下:

P ( Y = 1 ) = 4 + 1 8 + 2 = 5 10 P(Y=1)=\frac{4+1}{8+2}=\frac{5}{10} P(Y=1)=8+24+1=105

P ( Y = 0 ) = 4 + 1 8 + 2 = 5 10 P(Y=0)=\frac{4+1}{8+2}=\frac{5}{10} P(Y=0)=8+24+1=105

P(Y=0|X1=0,X2=0,X3=1)=P(X1|Y)P(X2|Y)P(X3|Y)P(Y)= 1 + 1 2 + 2 \frac{1+1}{2+2} 2+21+1 1 + 1 2 + 2 \frac{1+1}{2+2} 2+21+1 1 + 1 2 + 2 \frac{1+1}{2+2} 2+21+1* 5 10 \frac{5}{10} 105= 1 16 \frac{1}{16} 161

P(Y=1|X1=0,X2=0,X3=1)=P(X1|Y)P(X2|Y)P(X3|Y)P(Y)= 3 + 1 4 + 2 \frac{3+1}{4+2} 4+23+1 1 + 1 2 + 2 \frac{1+1}{2+2} 2+21+1 3 + 1 4 + 2 \frac{3+1}{4+2} 4+23+1* 5 10 \frac{5}{10} 105= 1 9 \frac{1}{9} 91

计算结果是不一样的。

2、条件概率对数化

  另一个遇到的问题则是下溢出,就依旧取值上述的例子,当P(X1|Y)P(X2|Y)P(X3|Y)太小时,当用python语言计算的时候会出现下溢出或者得不到正确的答案,这时候我们则可以通过取对数的方式来解决出错的问题。(在手动计算是没有问题的)
在这里插入图片描述
  由上边的图我们可以了解到,f(x)与In(f(x))在相同的区域内会同时增加或者减少,并且在相同点上取到极值,取值虽然不同,但是由于朴素贝叶斯是一种分类的算法,所以并不影响最后的结果。

六、延伸 贝叶斯网络

  朴素贝叶斯是基于各特征之间相互独立的,直接计算条件概率进行分类,是最简单的一种贝叶斯算法。而实际情况下,各特征独立这个条件是难以满足的,此时需要使用贝叶斯网络进行分类。本篇不多做介绍,后期学习。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值