笔记之朴素贝叶斯及python实现

1 概述

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

2 算法特点

  • 优点:在数据较少的情况下仍然有效,可以处理多分类别问题。
  • 缺点:对于输入数据的准备方式较为敏感,用于分类的特征之间要求是独立的。
  • 适用数据类型:标称型。

3 算法原理

  对于给定的训练数据集,首先基于特征条件独立假设学习输入输出的联合概率分布,然后基于此模型,对给定的输入 x x x,利用贝叶斯定理求出后验概率最大的输出 y y y

3.1 贝叶斯定理

  贝叶斯定理是关于随机事件A和B的条件概率的一则定理。
P ( A ∣ B ) = P ( A ) P ( B ∣ A ) P ( B ) P(A|B) = \frac{P(A)P(B|A)}{P(B)} P(AB)=P(B)P(A)P(BA)
  其中A和B为随机事件,且 P ( B ) P(B) P(B)不为零。 P ( A ∣ B ) P(A|B) P(AB)是指在事件B发生的情况下事件A发生的概率。
  在贝叶斯定理中,每个名词都有约定成俗的名称:

  • P ( A ∣ B ) P(A|B) P(AB)是一直B发生后,A的条件概率。也由于得自B的取值而被称为A的后验概率。
  • P ( A ) P(A) P(A)是A的先验概率(或边缘概率)。之所以称为“先验”是因为它不考虑B方面因素。
  • P ( B ∣ A ) P(B|A) P(BA)是已知A发生后,B的条件概率。
  • P ( B ) P(B) P(B)是B的先验概率。

3.1 朴素贝叶斯

  生成方法和判别方法:

  • 生成方法由数据学习联合概率分布 P ( X , Y ) P(X,Y) P(X,Y),然后求出条件概率分布 P ( Y ∣ X ) = P ( X , Y ) / P ( X ) P(Y|X)=P(X,Y)/P(X) P(YX)=P(X,Y)/P(X)作为预测的模型。之所以成为生成方法,是因为模型表示了给定输入 X X X产生输出 Y Y Y的生成关系。用于随机生成的观察值建模,特别是在给定某些隐藏参数情况下。典型的生成模型有:朴素贝叶斯法、马尔科夫模型、高斯混合模型。
  • 判别方法由数据直接学习决策函数 f ( X ) f(X) f(X)或者条件概率分布 P ( Y ∣ X ) P(Y|X) P(YX)作为预测的模型,即判别模型。判别方法关心的是对给定的输入 X X X,应该预测什么样的输出 Y Y Y。典型的判别模型包括: k k k近邻法、感知机、决策树、逻辑斯蒂回归模型、最大熵模型、支持向量机、boosting方法和条件随机场等。
      朴素贝叶斯是典型的生成学习方法。生成方法由训练数据学习联合概率分布 P ( X , Y ) P(X,Y) P(X,Y),具体来说,利用训练数据学习 P ( X ∣ Y ) P(X|Y) P(XY) P ( Y ) P(Y) P(Y)的估计,得到联合概率分布:
    P ( X , Y ) = P ( X ) P ( X ∣ Y ) P(X,Y)=P(X)P(X|Y) P(X,Y)=P(X)P(XY)
    概率估计方法为极大似然估计或者贝叶斯估计。
      朴素贝叶斯法的基本假设是条件独立性。
    P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , ⋯   , X ( n ) = x ( n ) ∣ Y = c k ) = ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) P(X=x|Y=c_{k}) = P(X^{(1)}=x^{(1)},\cdots ,X^{(n)}=x^{(n)}|Y=c_{k}) =\prod_{j=1}^{n}P(X^{(j)}=x^{(j)}|Y=c_{k}) P(X=xY=ck)=P(X(1)=x(1),,X(n)=x(n)Y=ck)=j=1nP(X(j)=x(j)Y=ck)
      朴素贝叶斯法利用贝叶斯定理与学到的联合概率模型进行分类预测。
    P ( Y ∣ X ) = P ( X ∣ Y ) P ( X ) = P ( Y ) P ( X ∣ Y ) ∑ Y P ( Y ) P ( X ∣ Y ) P(Y|X) =\frac{P(X|Y)}{P(X)}=\frac{P(Y)P(X|Y)}{\sum_{Y}^{}P(Y)P(X|Y)} P(YX)=P(X)P(XY)=YP(Y)P(XY)P(Y)P(XY)
    将输入 x x x分到后验概率最大的类 y y y
    y = a r g max ⁡ c k P ( Y = c k ) ∏ j = 1 n P ( X j = x ( j ) ∣ Y = c k ) y = arg\max_{c_{k}}P(Y=c_{k})\prod_{j=1}^{n}P(X_{j}=x^{(j)}|Y=c_{k}) y=argckmaxP(Y=ck)j=1nP(Xj=x(j)Y=ck)

4 朴素贝叶斯学习与分类

(1)生成模型
P ( Y = c k ∣ X = x ) = P ( Y = c k ) P ( X = x ∣ Y = c k ) P ( X = x ) P(Y=c_{k}|X=x)=\frac{P(Y=c_{k})P(X=x|Y=c_{k})}{P(X=x)} P(Y=ckX=x)=P(X=x)P(Y=ck)P(X=xY=ck)
(2)模型假设,条件独立
P ( X = x ∣ Y = c k ) = ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) P(X=x|Y=c_{k}) =\prod_{j=1}^{n}P(X^{(j)}=x^{(j)}|Y=c_{k}) P(X=xY=ck)=j=1nP(X(j)=x(j)Y=ck)
(3)预测准则:后验概率最大
y = a r g max ⁡ c k P ( Y = c k ∣ X = x ) y = arg\max_{c_{k}}P(Y=c_{k}|X=x) y=argckmaxP(Y=ckX=x)
y = a r g max ⁡ c k P ( Y = c k ) ∏ j = 1 n P ( X j = x ( j ) ∣ Y = c k ) y = arg\max_{c_{k}}P(Y=c_{k})\prod_{j=1}^{n}P(X_{j}=x^{(j)}|Y=c_{k}) y=argckmaxP(Y=ck)j=1nP(Xj=x(j)Y=ck)
  要想求得y,需要求取 P ( Y = c k ) P(Y=c_{k}) P(Y=ck) P ( X j = x ( j ) ∣ Y = c k ) P(X_{j}=x^{(j)}|Y=c_{k}) P(Xj=x(j)Y=ck)的概率,可以使用的方法有:极大似然估计和贝叶斯估计,贝叶斯估计是在极大似然估计的基础上的一种优化,如果输入的实例 x x x中某一特征数值在训练样本中未曾出现,那么预测结果会出现概率为0的情况,影响分类的效果。

  • 极大似然估计
    先验概率 P ( Y = c k ) P(Y=c_{k}) P(Y=ck)的极大似然估计为:
    P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) N , k = 1 , 2 , ⋯   , K P(Y=c_{k})=\frac{\sum_{i=1}^{N}I(y_{i}=c_{k})}{N},k=1,2,\cdots ,K P(Y=ck)=Ni=1NI(yi=ck),k=1,2,,K
    条件概率 P ( X j = x ( j ) ∣ Y = c k ) P(X_{j}=x^{(j)}|Y=c_{k}) P(Xj=x(j)Y=ck)的极大似然估计为,设第 j j j个特征 x ( j ) x^{(j)} x(j)可能的取值集合为 a j 1 , a j 2 , ⋯   , a j s j {a_{j1},a_{j2},\cdots,a_{j}s_{j}} aj1,aj2,,ajsj:
    P ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j l , y i = c k ) ∑ i = 1 N I ( y i = c k ) , j = 1 , 2 , ⋯   , n ; l = 1 , 2 , ⋯   , s j ; k = 1 , 2 , ⋯   , K P(X^{(j)}=a_{jl}|Y=c_{k})=\frac{\sum_{i=1}^{N}I(x_{i}^{(j)}=a_{jl},y_{i}=c_{k})}{\sum_{i=1}^{N}I(y_{i}=c_{k})},j=1,2,\cdots ,n;l=1,2,\cdots ,s_{j};k=1,2,\cdots ,K P(X(j)=ajlY=ck)=i=1NI(yi=ck)i=1NI(xi(j)=ajl,yi=ck),j=1,2,,n;l=1,2,,sj;k=1,2,,K
  • 贝叶斯估计
    先验概率 P ( Y = c k ) P(Y=c_{k}) P(Y=ck)的极大似然估计为:
    P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) + λ N + K λ P(Y=c_{k})=\frac{\sum_{i=1}^{N}I(y_{i}=c_{k})+\lambda }{N+K\lambda } P(Y=ck)=N+Kλi=1NI(yi=ck)+λ
    条件概率 P ( X j = x ( j ) ∣ Y = c k ) P(X_{j}=x^{(j)}|Y=c_{k}) P(Xj=x(j)Y=ck)的极大似然估计为:
    P ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j l , y i = c k ) + λ ∑ i = 1 N I ( y i = c k ) + S j λ P(X^{(j)}=a_{jl}|Y=c_{k})=\frac{\sum_{i=1}^{N}I(x_{i}^{(j)}=a_{jl},y_{i}=c_{k})+\lambda }{\sum_{i=1}^{N}I(y_{i}=c_{k})+S_{j}\lambda } P(X(j)=ajlY=ck)=i=1NI(yi=ck)+Sjλi=1NI(xi(j)=ajl,yi=ck)+λ
    其中当 λ = 0 \lambda=0 λ=0的时候为极大似然估计,当 λ = 1 \lambda=1 λ=1的时候称为拉普拉斯平滑。

5 示例

给定一张表如图所示:
在这里插入图片描述
测试
对于给定测试集 X t e s t = ( s u n n y , c o o l , h i g h , s t r o n g ) X_{test}=(sunny,cool,high,strong) Xtest=(sunny,cool,high,strong),问是否打网球?
y = a r g max ⁡ c ϵ { y e s , n o } P ( c ) P ( s u n n y ∣ c ) P ( c o o l ∣ c ) P ( h i g h ∣ c ) P ( s t r o n g ∣ c ) y = arg\max_{c\epsilon \left \{ yes,no \right \}}P(c)P(sunny|c)P(cool|c)P(high|c)P(strong|c) y=argcϵ{yes,no}maxP(c)P(sunnyc)P(coolc)P(highc)P(strongc)
使用极大似然估计求解
P ( y e s ) = 9 / 14 P(yes)=9/14 P(yes)=9/14        P ( n o ) = 5 / 14 P(no)=5/14 P(no)=5/14
P ( s u n n y ∣ y e s ) = 2 / 9 P(sunny|yes)=2/9 P(sunnyyes)=2/9     P ( s u n n y ∣ n o ) = 3 / 5 P(sunny|no)=3/5 P(sunnyno)=3/5
P ( c o o l ∣ y e s ) = 3 / 9 P(cool|yes)=3/9 P(coolyes)=3/9      P ( c o o l ∣ n o ) = 1 / 5 P(cool|no)=1/5 P(coolno)=1/5
P ( h i g h ∣ y e s ) = 3 / 9 P(high|yes)=3/9 P(highyes)=3/9      P ( h i g h ∣ n o ) = 4 / 5 P(high|no)=4/5 P(highno)=4/5
P ( s t r o n g ∣ y e s ) = 3 / 9 P(strong|yes)=3/9 P(strongyes)=3/9     P ( s t r o n g ∣ n o ) = 3 / 5 P(strong|no)=3/5 P(strongno)=3/5
最终:
P ( y e s ) P ( s u n n y ∣ y e s ) P ( c o o l ∣ y e s ) P ( h i g h ∣ y e s ) P ( s t r o n g ∣ y e s ) = 0.0053 P(yes)P(sunny|yes)P(cool|yes)P(high|yes)P(strong|yes)=0.0053 P(yes)P(sunnyyes)P(coolyes)P(highyes)P(strongyes)=0.0053
P ( n o ) P ( s u n n y ∣ n o ) P ( c o o l ∣ n o ) P ( h i g h ∣ n o ) P ( s t r o n g ∣ n o ) = 0.0206 P(no)P(sunny|no)P(cool|no)P(high|no)P(strong|no)=0.0206 P(no)P(sunnyno)P(coolno)P(highno)P(strongno)=0.0206
使用贝叶斯估计求解
λ = 1 \lambda=1 λ=1
P ( y e s ) = ( 9 + 1 ) / ( 14 + 2 ) = 10 / 16 P(yes)=(9+1)/(14+2)=10/16 P(yes)=(9+1)/(14+2)=10/16
P ( n o ) = ( 5 + 1 ) / ( 14 + 2 ) = 6 / 16 P(no)=(5+1)/(14+2)=6/16 P(no)=(5+1)/(14+2)=6/16

P ( s u n n y ∣ y e s ) = ( 2 + 1 ) / ( 9 + 3 ) = 3 / 12 P(sunny|yes)=(2+1)/(9+3)=3/12 P(sunnyyes)=(2+1)/(9+3)=3/12
P ( s u n n y ∣ n o ) = ( 3 + 1 ) / ( 5 + 3 ) = 4 / 8 P(sunny|no)=(3+1)/(5+3)=4/8 P(sunnyno)=(3+1)/(5+3)=4/8

P ( c o o l ∣ y e s ) = ( 3 + 1 ) / ( 9 + 3 ) = 4 / 12 P(cool|yes)=(3+1)/(9+3)=4/12 P(coolyes)=(3+1)/(9+3)=4/12
P ( c o o l ∣ n o ) = ( 1 + 1 ) / ( 5 + 3 ) = 2 / 8 P(cool|no)=(1+1)/(5+3)=2/8 P(coolno)=(1+1)/(5+3)=2/8

P ( h i g h ∣ y e s ) = ( 3 + 1 ) / ( 9 + 2 ) = 4 / 11 P(high|yes)=(3+1)/(9+2)=4/11 P(highyes)=(3+1)/(9+2)=4/11
P ( h i g h ∣ n o ) = ( 4 + 1 ) / ( 5 + 2 ) = 5 / 7 P(high|no)=(4+1)/(5+2)=5/7 P(highno)=(4+1)/(5+2)=5/7

P ( s t r o n g ∣ y e s ) = ( 3 + 1 ) / ( 9 + 2 ) = 4 / 11 P(strong|yes)=(3+1)/(9+2)=4/11 P(strongyes)=(3+1)/(9+2)=4/11
P ( s t r o n g ∣ n o ) = ( 3 + 1 ) / ( 5 + 2 ) = 4 / 7 P(strong|no)=(3+1)/(5+2)=4/7 P(strongno)=(3+1)/(5+2)=4/7
最终:
P ( y e s ) P ( s u n n y ∣ y e s ) P ( c o o l ∣ y e s ) P ( h i g h ∣ y e s ) P ( s t r o n g ∣ y e s ) = 0.0069 P(yes)P(sunny|yes)P(cool|yes)P(high|yes)P(strong|yes)=0.0069 P(yes)P(sunnyyes)P(coolyes)P(highyes)P(strongyes)=0.0069
P ( n o ) P ( s u n n y ∣ n o ) P ( c o o l ∣ n o ) P ( h i g h ∣ n o ) P ( s t r o n g ∣ n o ) = 0.0191 P(no)P(sunny|no)P(cool|no)P(high|no)P(strong|no)=0.0191 P(no)P(sunnyno)P(coolno)P(highno)P(strongno)=0.0191

6 python实现

git地址:https://github.com/lingxiaaisuixin/MarchineLearning/tree/master/Bayes
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值