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

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

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

一、基本概念:

1、定义

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

2、“朴素”的含义

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

二、基于前提

1、贝叶斯公式

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

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

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

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

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

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

  • 先验概率: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=优 148\frac{1}{48} 248\frac{2}{48} 348\frac{3}{48}
X=良 248\frac{2}{48} 448\frac{4}{48} 648\frac{6}{48}
X=中 548\frac{5}{48} 1048\frac{10}{48} 1548\frac{15}{48}

X 与Y是否相互独立?
优:148\frac{1}{48} :248\frac{2}{48}:348\frac{3}{48}=1:2:3

良:248\frac{2}{48} :448\frac{4}{48}:648\frac{6}{48}=1:2:3

中:548\frac{5}{48} :1048\frac{10}{48}:1548\frac{15}{48}=1:2:3

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

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

P(松)=148\frac{1}{48}+248\frac{2}{48}+548\frac{5}{48}=848\frac{8}{48}

P(优)=148\frac{1}{48}+248\frac{2}{48}+348\frac{3}{48}=648\frac{6}{48}

P(松)P(优)=848\frac{8}{48}648\frac{6}{48}=148\frac{1}{48} 满足P(松,优)=P(松)*P(优)

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

P(良)=248\frac{2}{48}+448\frac{4}{48}+648\frac{6}{48}=1248\frac{12}{48}

P(松)P(良)=848\frac{8}{48}1248\frac{12}{48}=248\frac{2}{48} 满足P(松,良)=P(松)*P(良)

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

P(中)=548\frac{5}{48}+1048\frac{10}{48}+1548\frac{15}{48}=3048\frac{30}{48}

P(松)P(中)=848\frac{8}{48}3048\frac{30}{48}=548\frac{5}{48} 满足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)
1 1 1 0
0 0 0 1
1 1 0 1
1 0 1 0
0 0 1 1
0 1 0 1
0 0 1 0
1 0 0 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

P(YX1,X2,X3)=P(X1,X2,X3Y)P(Y)P(X1,X2,X3)P(Y|X1,X2,X3)=\frac{P(X1,X2,X3|Y)P(Y)}{P(X1,X2,X3)}

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(X1Y)=P(YX1)P(Y)P(X1)P(X1|Y)=\frac{P(Y|X1)P(Y)}{P(X1)}

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

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

所以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)=528\frac{5}{28}

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

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

五、优化方式

1、拉普拉斯平滑

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

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

P(Y=1|X1=0,X2=0,X3=1)=P(X1|Y)P(X2|Y)P(X3|Y)P(Y)=34\frac{3}{4}12\frac{1}{2}34\frac{3}{4}*12\frac{1}{2}=964\frac{9}{64}

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

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

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

P(Y=0|X1=0,X2=0,X3=1)=P(X1|Y)P(X2|Y)P(X3|Y)P(Y)=1+12+2\frac{1+1}{2+2}1+12+2\frac{1+1}{2+2}1+12+2\frac{1+1}{2+2}*510\frac{5}{10}=116\frac{1}{16}

P(Y=1|X1=0,X2=0,X3=1)=P(X1|Y)P(X2|Y)P(X3|Y)P(Y)=3+14+2\frac{3+1}{4+2}1+12+2\frac{1+1}{2+2}3+14+2\frac{3+1}{4+2}*510\frac{5}{10}=19\frac{1}{9}

计算结果是不一样的。

2、条件概率对数化

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

六、延伸 贝叶斯网络

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章