朴素贝叶斯及python实现"/>
笔记之朴素贝叶斯及python实现
朴素贝叶斯算法
- 1 概述
- 2 算法特点
- 3 算法原理
- 3.1 贝叶斯定理
- 3.1 朴素贝叶斯
- 4 朴素贝叶斯学习与分类
- 5 示例
- 6 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(A∣B)=P(B)P(A)P(B∣A)
其中A和B为随机事件,且 P ( B ) P(B) P(B)不为零。 P ( A ∣ B ) P(A|B) P(A∣B)是指在事件B发生的情况下事件A发生的概率。
在贝叶斯定理中,每个名词都有约定成俗的名称:
- P ( A ∣ B ) P(A|B) P(A∣B)是一直B发生后,A的条件概率。也由于得自B的取值而被称为A的后验概率。
- P ( A ) P(A) P(A)是A的先验概率(或边缘概率)。之所以称为“先验”是因为它不考虑B方面因素。
- P ( B ∣ A ) P(B|A) P(B∣A)是已知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(Y∣X)=P(X,Y)/P(X)作为预测的模型。之所以成为生成方法,是因为模型表示了给定输入 X X X产生输出 Y Y Y的生成关系。用于随机生成的观察值建模,特别是在给定某些隐藏参数情况下。典型的生成模型有:朴素贝叶斯法、马尔科夫模型、高斯混合模型。
- 判别方法由数据直接学习决策函数 f ( X ) f(X) f(X)或者条件概率分布 P ( Y ∣ X ) P(Y|X) P(Y∣X)作为预测的模型,即判别模型。判别方法关心的是对给定的输入 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(X∣Y)和 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(X∣Y)
概率估计方法为极大似然估计或者贝叶斯估计。
朴素贝叶斯法的基本假设是条件独立性。
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=x∣Y=ck)=P(X(1)=x(1),⋯,X(n)=x(n)∣Y=ck)=j=1∏nP(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(Y∣X)=P(X)P(X∣Y)=∑YP(Y)P(X∣Y)P(Y)P(X∣Y)
将输入 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=1∏nP(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=ck∣X=x)=P(X=x)P(Y=ck)P(X=x∣Y=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=x∣Y=ck)=j=1∏nP(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=ck∣X=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=1∏nP(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)=N∑i=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)=ajl∣Y=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)=ajl∣Y=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(sunny∣c)P(cool∣c)P(high∣c)P(strong∣c)
使用极大似然估计求解
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(sunny∣yes)=2/9 P ( s u n n y ∣ n o ) = 3 / 5 P(sunny|no)=3/5 P(sunny∣no)=3/5
P ( c o o l ∣ y e s ) = 3 / 9 P(cool|yes)=3/9 P(cool∣yes)=3/9 P ( c o o l ∣ n o ) = 1 / 5 P(cool|no)=1/5 P(cool∣no)=1/5
P ( h i g h ∣ y e s ) = 3 / 9 P(high|yes)=3/9 P(high∣yes)=3/9 P ( h i g h ∣ n o ) = 4 / 5 P(high|no)=4/5 P(high∣no)=4/5
P ( s t r o n g ∣ y e s ) = 3 / 9 P(strong|yes)=3/9 P(strong∣yes)=3/9 P ( s t r o n g ∣ n o ) = 3 / 5 P(strong|no)=3/5 P(strong∣no)=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(sunny∣yes)P(cool∣yes)P(high∣yes)P(strong∣yes)=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(sunny∣no)P(cool∣no)P(high∣no)P(strong∣no)=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(sunny∣yes)=(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(sunny∣no)=(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(cool∣yes)=(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(cool∣no)=(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(high∣yes)=(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(high∣no)=(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(strong∣yes)=(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(strong∣no)=(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(sunny∣yes)P(cool∣yes)P(high∣yes)P(strong∣yes)=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(sunny∣no)P(cool∣no)P(high∣no)P(strong∣no)=0.0191
6 python实现
git地址:
更多推荐
笔记之朴素贝叶斯及python实现
发布评论