朴素贝叶斯算法的理论基础:
- 贝叶斯定理(贝叶斯后验概率公式)
- 条件独立性假设
- 生成模型
生成模型与判别模型
特性 |
判别模型(Discriminative model) |
生成模型(Generative model) |
特点 |
寻找不同类别之间的最优分类超曲面,反应的是异类数据之间的差异 |
对后验概率建模,从统计的角度表示数据的分布情况,能够反应同类数据本身的相似度 |
区别 |
估计的是条件概率分布(Conditional Distribution):P(Y|X) |
估计的是联合概率分布(Joint Probability Distribution):P(X,Y) |
联系 |
由生成模型可以得到判别模型 |
由判别模型无法得到生成模型 |
常见模型 |
逻辑回归、SVM、MLP、KNN |
Navie Bayes、GMM、HMM |
朴素贝叶斯的数学原理:
根据贝叶斯定理,对于一个分类问题,给定样本特征
x
,样本属于类别
y
的概率为:
P(y|x)=P(x|y)×P(y)P(x)
其中
x
是特征向量,假设它的维度为
d
,则:
P(y|x)=P(x1,x2,x3,...,xd|y)×P(y)P(x)
由于朴素贝叶斯法对条件概率分布做了条件独立性的假设
因此
P(x1,x2,x3,...,xd|y)
可直接使用连乘计算:
P(x1,x2,x3,...,xd|y=ck)=∏i=0dP(xi|y=ck)
其中
ck
为某一类别
将连乘式其带入贝叶斯公式可得:
P(y=ck|x)=∏di=0P(xi|y=ck)×P(y=ck)P(x)
由此朴素贝叶斯分类器可数学化的表示为:
y=argmaxck∏di=0P(xi|y=ck)×P(y=ck)P(x)
* argmax(f(x))指的是使得 f(x)取得最大值所对应的变量x,放在此公式内即是贝叶斯公式取得最大值时对应的
ck
的值
由于argmaxz最终取得的是参数
ck
且对任意一个
ck
,
P(x)
的分布是相同的,去掉
P(x)
不影响找出贝叶斯公式取得最大值时
ck
的值,所以可简化为:
y=argmaxck∏i=0dP(xi|y=ck)×P(y=ck)
条件概率的参数估计:
朴素贝叶斯算法的学习过程主要是估计
P(y=ck)
以及
P(xj|y=ck)
对于类别概率估计
P(y=ck)
可以使用如下的公式进行估计 :
P(y=ck)=∑Ni=1I(yi=ck)N,k=1,2,...,K
但是对于
P(xj|y=ck)
的概率估计,我们需要根据每一维
xj
分两种情况讨论:
-
xj
是离散型变量
-
xj
是连续型变量
特征值为离散型变量时的参数估计
当特征值为离散型变量时,这时候参数估计非常简单,我们只需要计算出每个特征值在相应的类中出现的概率就可以了。
直接使用如下的公式进行估计:
P(X(j)=x(j)|y=ck)=∑Ni=1I(X(j)=x(j),y=ck)∑Ni=1I(yi=ck),k=1,2,...,K
特征值为连续型变量时的参数估计
当特征值为连续型变量时,我们对条件概率分布
P(xj|y=ck)
进行估计时,我们无法使用像离散型变量那样直接求概率。
因此,我们需要使用新的方式:常用的方式就是假设
P(xj|y=ck)
服从某一分布,如高斯分布、多项式分布以及伯努利分布等。
以高斯分布(正态分布)为例:
P(X(j)=x(j)|y=ck)=12πδ2y‾‾‾‾‾√exp(−(xi−uy)22δ2y)
贝叶斯估计:
为了避免有些样本现实中存在而测试集中却没有,导致从样本中算出概率为0的情况,我们需要给学习步骤中的两个概率公式的分子分母都加上一个数值较小的常数:
P(y=ck)=∑Ni=1I(yi=ck)+λN+Kλ,k=1,2,...,K
Kλ
中的K是类的个数
P(X(j)=x(j)|y=ck)=∑Ni=1I(X(j)=x(j),y=ck)+λ∑Ni=1I(yi=ck)+Ljλ,k=1,2,...,K
Ljλ
中的
Lj
是第j维特征的最大取值个数。
这样当
ck
类不存在与测试集上(即未加常数前概率为0时),最终算出的概率为
1K
或
1Lj
,而不是0。
特别的,当上述估计中的
λ
取值为1时,称为拉普拉斯平滑(Laplace Smoothing)