假设有N种可能的类别标记,记为:\[y=\left \{ c_{1},c_{2}...c_{N} \right \}\]现有一个样本x给定其各个属性的取值\[x_{i},i=1...d\],d为x所包含的属性的数目,若将x归为第c类的第k个属性,则有
\[p(c|x)=\frac{p(c)p(x|c)}{p(x)}\](1)
然后根据计算每个属性的概率,取最大的概率值作为x属于的c类的值。朴素贝叶斯分类器的最基本最核心的思想是“假设已有样本中各个属性之间独立”,由此有:
\[p(c|x)=\frac{p(c)p(x|c)}{p(x)}=\frac{p(c)}{p(x)}\prod_{i=1}^{d}p(x_{i}|c)\] (2)
又因为p(x)都是相同的,所以贝叶斯判定准则为
\[h_{nb}(x)=arg\cdot max_{c\subseteq y}p(c)\prod_{i=1}^{d}p(x_{i}|c)\]\](3)
即判定准则取最大时x属于的类别 ci;
估计类的先验概率P(c)的计算是基于训练集D的,并为每个属性估计条件概率\[p(x_{i}|c)\]。
令 \[D_{c}\]表示训练集D种c类样本的集合,若有充足的独立同分布样本,则有
\[p(c)= \frac{|Dc|}{|D|}\](4)
对于离散属性而言,令\[D_{c,x_{i}}\]表示\[D_{c}\]中在第i个属性上的取值\[x_{i}\]的样本集合,则有
\[p(x_{i}|c)=\frac{|D_{c}|}{|D|}\](5)
对于连续属性考虑概率密度函数,假定\[p(x_{i}|c)\sim N(\mu _{c,i},\delta _{c,i}^{2})\],其中利用极大似然估计对参数进行计算有:
\[\mu _{c,i}=\frac{1}{|D_{c}|}\sum_{x\subseteq D_{c}}x_{i}\]
\[\delta_{c,i}=\frac{1}{|D_{c}|}\sum_{x\subseteqD_{c}}(x-\bar{\mu_{c,i}})(x-\bar{\mu _{c,i}})^{T}\](6)
所以:
\[p(x_{i}|c)=\frac{1}{\sqrt{2\pi }\delta }exp(-\frac{x_{i}-\mu _{c,i}^{2}}{2\delta ^{2}})\](7)
同时\[\prod_{i=1}^{d}p(x_{i}|c)\]是一个属性的连乘过程,对于第i个属性可能会存在在c类中没有出现过,但是将含有i个属性的样本x放入c的概率计算为0显然是不合理的,所以可进行“平滑处理”,常用的方法为“拉普拉斯修正”,具体来说,令N表示训练集D中可能含有的类别数(c的个数),\[N_{i}\]表示第i个属性的取值数,则(4)(5)修正如下:
\[\bar{p(c)}=\frac{|D_{c}|+1}{|D|+N}\](8)
\[\bar{p(x_{i}|c)}=\frac{|D_{c,x_{i}}|+1}{|D_{_{c}}|+N_{i}}\](9)
实例
数据集如下:
从该数据集计算得到的先验概率以及每个离散属性的类条件概率、连续属性的类条件概率分布的参数(样本均值和方差)如下:
先验概率:P(Yes)=0.3;P(No)=0.7
P(有房=是|No) = 3/7
P(有房=否|No) = 4/7
P(有房=是|Yes) = 0
P(有房=否|Yes) = 1
P(婚姻状况=单身|No) = 2/7
P(婚姻状况=离婚|No) = 1/7
P(婚姻状况=已婚|No) = 4/7
P(婚姻状况=单身|Yes) = 2/3
P(婚姻状况=离婚|Yes) = 1/3
P(婚姻状况=已婚|Yes) = 0
年收入:
如果类=No:样本均值=110;样本方差=2975
如果类=Yes:样本均值=90;样本方差=25
现有新样本:
X={有房=否,婚姻状况=已婚,年收入=120K},通过计算确定是否存在拖欠贷款的行为:
所以p(年收入=120k|NO)=\[\frac{1}{\sqrt{2\pi \cdot 2975}}exp(-\frac{(120-110)^{2}}{2\cdot 2975})\approx 0.648\]
p(年收入=120k |YES)=\[\frac{1}{\sqrt{2\pi \cdot 25}}exp(-\frac{(120-90)^{2}}{2\cdot 25})\approx 1\]
同时P(婚姻状况=已婚|Yes) = 0,计算时会存在乘的现象,主要是因为样本不够大,此时便可采用“拉普拉斯修正”进行平滑处理。
所以对于P(婚姻状况=已婚|Yes) 来说:
\[D_{c,x_{i}}\]:表示在YES中婚姻状况为已婚的人数=0;
\[D_{c}\]:表示婚姻状况可能的取值数=2(yes or no)
\[N_{i}\]:yes类中包含的样本数=3
所以根据拉普拉斯修正有:P(婚姻状况=已婚|Yes)=
所以:
P(No)*P(有房=否|No)*P(婚姻状况=已婚|No)*P(年收=120K|No)=0.7*4/7*4/7*0.684=0.156
P(Yes)*P(有房=否|Yes)*P(婚姻状况=已婚|Yes)*P(年收入=120K|Yes)=0.3*1*0.2*1=0.06
因为0.156>0.06,故认为该样本属于NO,即没有拖欠贷款。
总结:朴素贝叶斯在分类问题中应用非常广泛,特别是在垃圾邮件的处理中,虽然说对于有些特征独立性假设并不是很合理,但是它的分类效果却非常不错,但是由于朴素贝叶斯分类的假设是所有的特征是独立的,所以经常被攻击,所以有学者提出了基于朴素贝叶斯假设开始,利用T检验和卡方分布来判断特征之间的独立性关系,从而从建立朴素贝叶斯网络开始,逐步计算特征之间的非独立关系,从而最后监理处贝叶斯网络,有兴趣的可以去看看这篇参考文献:Section. A Bayesian Classifier Learning Algorithm Based on Optimization Model[J]. Mathematical Problems in Engineering,2013,(2013-2-6), 2013, 2013(2013):681-703.
当然除了朴素贝叶斯网络,还有基于朴素贝叶斯扩展的TAN,BAN网络等,在后期我再一一讲述。