朴素贝叶斯算法原理
朴素贝叶斯分类器(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个维度的似然可以表示为:
考虑到部分样本取值可能没有在全部样本中出现,按上式计算时,没有出现的项就会取值为0。为了解决此问题,P(ω)和P(xi|ω)的表达式被修正为
P(ω)=Dω+1D+NP(xi|ω)=Dω,i+1Dω+Ni
N为标记
若样本连续,且假设样本满足高斯分布,似然可表示为
p(xi|ω)=12π−−√σω,iexp⎛⎝−(xi−μω,i)22σ2ω,i⎞⎠
高斯分布的系数 σ和 μ可以由最大似然估计(Maximum Likelihood Estimation, MLE)得到:
μ^=1N∑j=0Nxj=x¯
σ^2=1N∑j=0N(xj−x¯)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版权协议,转载请附上原文出处链接和本声明。