朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。
1)对于给定的数据集,首先基于特征条件独立假设学习输入\输出的联合概率分布;
2)然后基于此模型,对给定的输入
x,利用贝叶斯定理求出后验概率最大的输出
y
下面我们就围绕上面2个步骤进行介绍。
基本概念:
先验概率:是根据以往的经验和分析得到的概率(先验概率是我们在未知条件下对事件发生可能性猜测的数学表示)
后验概率:事情已经发生,要探求这件事情发生的原因是由某个因素引起的可能性大小(根据结果反推是由那个原因引起的)
(下面的例子参考这个老哥的博客:https://www.cnblogs.com/yemanxiaozu/p/7680761.html)
P(加了醋∣吃起来是酸的)=P(吃起来是酸的)P(加了醋,且吃起来是酸的)
=P(吃起来是酸的)P(吃起来是酸的∣加了醋)∗P(加了醋)
=P(吃起来是酸的∣加了醋)∗P(加了醋)+P(吃起来是酸的∣肉变质)∗P(肉变质)P(吃起来是酸的∣加了醋)∗P(加了醋)
其中
P(加了醋∣吃起来是酸的)就是后验概率,所谓后验概率是一种果因概率,即在一个结果已经发生的条件下,可能是其中一个原因造成的概率有多大。
贝叶斯公式:
P(Y∣X)=P(X)P(X∣Y)P(Y)
贝叶斯公式是由联合概率公式推导出来的:
P(Y,X)=P(Y∣X)P(X)=P(X∣Y)P(Y)
概率论与数理统计中关于贝叶斯公式的解释:
“如果我们把事件Y看做【结果】,把诸事件X1.X2……看做导致这个结果的可能的【原因】,则可以形象的把全概率公式看做成为【由原因推结果】;而贝叶斯公式则恰好相反,其作用于【由结果推原因】:现在有一个【结果】Y已发生,在众多可能的【原因】中,到底是哪一个导致了这个【结果】”
用机器学习视角理解贝叶斯公式
在机器学习的视角下,我们把X理解为“具有某特征”,把Y理解成“类别标签”,则
P("属于某类"∣"具有某特征")=P("具有某特征")P("具有某特征"∣“属于某类”)P("属于某类")
P(“属于某类”|“具有某特征”)=在已知某样本“具有某特征”的条件下,该样本“属于某类”的概率。所以叫做『后验概率』。
P(“具有某特征”|“属于某类”)=在已知某样本“属于某类”的条件下,该样本“具有某特征”的概率。
P(“属于某类”)=(在未知某样本具有该“具有某特征”的条件下,)该样本“属于某类”的概率。所以叫做『先验概率』。
P(“具有某特征”)=(在未知某样本“属于某类”的条件下,)该样本“具有某特征”的概率。
朴素贝叶斯法的学习与分类
朴素贝叶斯法通过训练集学习联合概率分布
P(X,Y),具体的,学习以下先验概率分布及条件概率分布
先验概率分布
P(Y=ck),k=1,2…K ----------------------(1)
条件概率分布
P(X=x∣Y=ck)=P(X(1)=x(1),……X(n)=x(n)∣Y=ck),k=1,2…K------------(2)
由(1)和(2)可得到联合概率分布
P(X,Y)
朴素贝叶斯法对条件概率分布做了条件独立性的假设,所以得名为朴素
具体的,条件独立性假设是:
P(X=x∣Y=ck)=P(X(1)=x(1),……X(n)=x(n)∣Y=ck)=∏j=1nP(X(j)=x(j)∣Y=ck)
条件独立性假设等于是说:用于分类的特征在类确定的条件下,都是条件独立的。
朴素贝叶斯分类时,对给定的输入
x,通过学习到的模型计算后验概率分布
P(Y=ck∣X=x),将后验概率最大的类作为
x的类输出。
后验概率计算根据贝叶斯定理:
P(Y=ck∣X=x)=k∑P(X=x∣Y=ck)P(Y=ck)P(X=x∣Y=ck)P(Y=ck)(3)
(稍微解释一下,上式的分母其实是运用了全概率公式,求的
P(X=x))
把
P(X=x∣Y=ck)=∏j=1nP(X(j)=x(j)∣Y=ck)带入上面的(3)得:
P(Y=ck∣X=x)=k∑P(Y=ck)j=1∏nP(X(j)=x(j)∣Y=ck)P(Y=ck)∏j=1nP(X(j)=x(j)∣Y=ck)
这就是朴素贝叶斯分类的基本公式,
于是朴素贝叶斯分类器可以表示成下面的形式:
y=f(x)=argmaxckk∑P(Y=ck)j=1∏nP(X(j)=x(j)∣Y=ck)P(Y=ck)∏j=1nP(X(j)=x(j)∣Y=ck)(4)
在(4)中分母对于所有的
ck都是相同的,所以,
y=argmaxckP(Y=ck)∏j=1nP(X(j)=x(j)∣Y=ck)
后验概率最大化的含义
朴素贝叶斯将实例分到后验概率最大化的类中,这等价于期望风险最小化。
朴素贝叶斯法的参数估计
在朴素贝叶斯法中,学习意味着估计
P(Y=ck)和P(X(j)=x(j)∣Y=ck)
可以利用极大似然估计法估计相应的概率。
先验概率P(Y=c_k)的极大似然估计是:
P(Y=ck)=Ni=1∑NI(yi=ck)
设第j个特征可能取值的集合为
aj1,aj2,……ajSj
则条件概率为:
P(X(j)=ajl∣Y=ck)=i=1∑NI(yi=ck)i=1∑NI(xi(j)=ajl,yi=ck)
**朴素贝叶斯算法:**对于给定的数据集,
1)计算先验概率及条件概率
P(Y=ck)=Ni=1∑NI(yi=ck)
P(X(j)=ajl∣Y=ck)=i=1∑NI(yi=ck)i=1∑NI(xi(j)=ajl,yi=ck)
2)对于给定的实例
x=(x(1),x(2)……x(n))T,计算
P(Y=ck)∏j=1nP(X(j)=x(j)∣Y=ck)
3)确定实例x的类
y=argmaxckP(Y=ck)∏j=1nP(X(j)=x(j)∣Y=ck)
贝叶斯估计
用极大似然估计可能会出现所有估计的概率值为0的情况,(如果对于一个新的输入实例,有一个特征值在训练样本中没有出现,则该特征值对一个条件概率就为0)这时会影响到后验概率的计算,是分类产生偏差。
解决这一问题的方法是采用贝叶斯估计。具体的,条件概率的贝叶斯估计是
Pλ(X(j)=ajl∣Y=ck)=i=1∑NI(yi=ck)+Sjλi=1∑NI(xi(j)=ajl,yi=ck)+λ
其中
Sj是该维特征对应的特征值的个数。
λ≥0,当
λ=0时就是极大似然估计,当
λ=1时,称为拉普拉斯平滑。
此时对应的,先验概率的贝叶斯估计是:
Pλ(Y=ck)=N+Kλi=1∑NI(yi=ck)+λ
连续性变量贝叶斯如何处理?
1)对于连续性变量,不能采用离散变量的方法计算概率。
2)如果样本又太少,那么就不能分成区间计算、
3)对于这种情况,可以假设这些变量都是正态分布,通过样本计算出均值和方差**,也就得到了正态分布的密度函数,有了密度函数,就可以把值带入,算出某一点的密度函数的值。**