朴素贝叶斯是生成式模型,它试图对联合概率P(X,Y)进行建模,预测时使用条件概率公式:

P(Y|X) = \frac{P(X,Y)}{P(X)}

求出给定样本X时指定类别Y的概率.

独立参数

假设所有变量都属于二项分布,对于联合概率P(X,Y),其中X有很多特征,所以联合概率相当于:p(y,f_{1},\dots ,f_{n}),我们使用列表的方式把所有的概率都列出来:

概率
p(y = 0,f_{1} = 0,\dots ,f_{n} = 0)
p(y = 1,f_{1} = 0,\dots ,f_{n} = 0)
p(y = 1,f_{1} = 1,\dots ,f_{n} = 0)
p(y = 1,f_{1} = 1,\dots ,f_{n} = 1)

总共需要多少个概率呢?2^{n}+2个概率,这些概率叫做被称作参数.

有没有可能使用更少的参数,来描述这个概率分布?因为总概率是1,所以只要确定2^{n}+1个概率,那么最后一个概率也被确定下来了,描述一个分布最少的参数被称为独立参数.

显然,通过遍历概率分布中所有可能的情况是不可取的,因为遍历的个数与特征数乘指数形式.

特征条件独立假设

朴素贝叶斯算法对条件概率分布作出了独立性的假设,也就是说特征之间是独立的,这也是"朴素"的含义,即:

p(f_{1},\dots ,f_{n})=\prod_{i=1}^{n}P(f_{i})

结合条件概率公式:

P(A,B) = P(B)P(A|B)

可得转化联合分布模型为:

p(y,f_{1},\dots ,f_{n})=P(y)\prod_{i=1}^{n}P(f_{i}|y)

由上式可知,朴素贝叶斯若使由贝叶斯网画出来是:

这就是朴素贝叶斯的模型,那么它需要多少个独立参数呢?

P(y),P(f|y = 0),P(f|y = 1)都是为二项分布,共2n+1个二项分布,而每个二项分布需要一个独立参数.所以朴素贝叶斯的模型需要2n+1个独立参数.

相比遍历整个概率空间,朴素贝叶斯的模型与特征数呈线性关系,显然计算量小得多.

最优化分类器

在预测的时候,根据贝叶斯公式将其转换成为后验概率:

P(Y|X) = \frac{P(X,Y)}{P(X)}= \frac{P(y)\prod_{i=1}^{n}P(f_{i}|y)}{P(X)}

举个例子,假设有三个类别A,B,C.给定一个新的样本x,我们要预测样本x属于哪个类别的.可以根据上述公式分别计算三个类别的后验概率:

P(A|x) = 0.6

P(B|x) = 0.3

P(C|x) = 0.1

那么x应该属于哪个类别呢?答案是x肯定属于A类,因为A类的后验概率最大.

通过这个例子可以发现P(X)都是相同的,所以省略分母中的P(X),并不影响找最大值,所以朴素贝叶斯最优化分类器可以写为:

h_{nb}(x) = arg \; max_{y \in Y} \; P(y)\prod_{i=1}^{n}P(f_{i}|y)

上式用到了连乘操作,这有可能造成数值下溢,即计算结果小于浮点数可以表示的最小数字.为了防止数值下溢,对P(f_{i}|y)取对数,将连成转化为连加:

h_{nb}(x) = arg \; max_{y \in Y} \; P(y)\sum_{i=1}^{n}logP(f_{i}|y)

朴素贝叶斯的参数估计

在最优化分类器中,未知参数有P(y)P(f_{i}|y),这两个参数可以通过数据统计出来.

其中P(y)只需计算样本中的比例即可:
P(y) = \frac{|D_y|}{|D|}

不过这样计算有一个小小的问题,如果有一个类别样本中没有,那么根据这个公式算出来概率为0,但是样本中没有并不代表一定不会出现.所以这里增加拉普拉斯平滑:

P(y)=\dfrac{N_{y}+\alpha}{N+k\alpha}

其中\alpha为拉普拉斯平滑值.

如果属性是离散的,P(f_{i}|y)的值也可以通过统计样本中的比例来计算,同样增加拉普拉斯平滑:

P(f_{i}|y)=\dfrac{N_{y,f_{i}}+\alpha}{N_{y}+n\alpha}

如果属性是连续的,我们可以根据高斯分布来估计P(f_{i}|y):

P(f_{i}|y)=\dfrac{1}{\sqrt{2\pi\sigma_{y,i}^{2}}}e^{-\frac{(f_{i}-\mu_{y,i})^{2}}{2  \sigma_{y,i}^{2}}}


编程实现:
https://www.kaggle.com/swimmingwhale/naive-bayes


参考:

  • <概率图模型>
  • <统计学习方法>
posted @ 2018-06-07 22:39:54
评论加载中...

发表评论