朴素贝叶斯算法原理

朴素贝叶斯算法原理

朴素贝叶斯分类器(Naive Bayes Classifier)的优点是运算时间短、数学原理清晰,我在MNIST和CIFAR-10数据集上测试,错误率分别为15.74%和58.45%。

实在看不懂,不如先复(yu)习一下概率统计;如果觉得是我写的太烂,周志华教授的《机器学习》书中,朴素贝叶斯分类器写的很清楚。

朴素贝叶斯算法

定义x为样本,ω为标记,则将样本和标记用概率公式表示:

  • P(ω)为先验概率,代表ω在所有标记中出现的概率。
  • P(x|ω)为似然,代表在ω标记下,出现样本x的概率。
  • P(ω|x)为后验概率,代表x出现的情况下,样本标记为ω的概率。
  • P(x)代表样本x出现的概率。

训练样本

根据Bayes公式,后验概率可以由先验概率和似然表示:

P(ω|x)=P(ω)P(x|ω)P(x)

在分类问题中,我们认为 P(x)为常数, P(ω) P(x|ω)可由训练样本计算得到, P(ω|x)即为所求的结果(在证据 x出现的前提下,取得标记为 ω的概率)。上式可以表示为:
P(ω|x)P(ω)P(x|ω)

在分类时,我们通过上式计算不同 ω值所对应的 P(ω)P(x|ω),找到最大值对应的 ω,即可完成分类。因此,我们将分类问题转化成了根据样本,计算先验概率 P(ω)和似然 P(x|ω)的问题。

先验概率P(ω)可以用样本中标记为ω的数量占总样本数之比表示:

P(ω)=DωD

但是,根据样本,我们无法直接计算似然 P(x|ω)。在朴素贝叶斯分类算法中,我们假设样本的每个维度之间相互独立,此时似然就可以计算了。

对于离散的样本空间,第i个维度的似然可以表示为:

P(xi|ω)=Dω,iDω

考虑到部分样本取值可能没有在全部样本中出现,按上式计算时,没有出现的项就会取值为0。为了解决此问题,P(ω)P(xi|ω)的表达式被修正为
P(ω)=Dω+1D+NP(xi|ω)=Dω,i+1Dω+Ni

N为标记ω可能取值的总数, Ni为样本 x可能取值的总数。

若样本连续,且假设样本满足高斯分布,似然可表示为

p(xi|ω)=12πσω,iexp(xiμω,i)22σ2ω,i

高斯分布的系数 σ μ可以由最大似然估计(Maximum Likelihood Estimation, MLE)得到:
μ^=1Nj=0Nxj=x¯

σ^2=1Nj=0N(xjx¯)2

对于全部维度的似然P(x|ω)

P(x|ω)=i=1NP(xi|ω)

至此,我们即可根据给定的样本空间,计算先验概率 P(ω)和似然 P(x|ω)

分类

在分类时,因为先验概率P(ω)和似然P(x|ω)已知,待分类数据x已知,P(ω)P(x|ω)可以方便地求得。

又因为

P(ω|x)P(ω)P(x|ω)=P(ω)i=1NP(xi|ω)

找出使 P(ω|x)最大的 ωi ωi即为分类结果。

需要注意的是,在实际应用中,样本x的维数通常很高,而概率值均小于1。因此,为避免浮点数连乘出现0,将上式两边取对数

logP(ω|x)logP(ω)+i=1NlogP(xi|ω)

对每个 ωi计算 logP(ωi)+Ni=1logP(xi|ωi),使该式最大的 ωi即为分类结果。

版本信息

1.0 20171118 initial commit

知识共享许可协议
本作品采用知识共享署名-相同方式共享 3.0 未本地化版本许可协议进行许可。


版权声明:本文为liberatetheus原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。