机器学习中的分类方法,通常是基于有限的训练样本尽可能准确地估计后验概率$P(c|x)$。大体上,对后验概率的估计有两种策略:给定$x$,直接建模$P(c|x)$来预测$c$,这样得到的模型是“判别式模型”(discriminative models);也可以先对联合概率分布$P(x,c)$建模,然后再由此获得$P(c|x)$,这样得到的是“生成式模型”(generative models)。决策树,神经网络,支持向量机都归入判别式模型;而朴素贝叶斯法则属于生成式模型。
朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入|输出的联合概率分布;然后基于此模型,对于给定的输入$x$,利用贝叶斯定理求出后验概率最大的输出$y$。朴素贝叶斯法广泛应用于文本分类以及垃圾邮件检测。
本章叙述朴素贝叶斯法,包括朴素贝叶斯的学习与分类、朴素贝叶斯法的参数估计算法。
贝叶斯理论
ref1 ref2 How Naive Bayes Classifier Works[1] How Naive Bayes Classifier Works[2]
似然函数:
统计学的观点始终认为样本的出现是基于一个分布的,我们假设这个分布为$f$,该分布由参数$\theta$决定,比如我们认为$f$为高斯分布,那么它由参数$u$(均值)和$\sigma^2$(方差)唯一决定,故而不同的参数决定了不同的分布。
概率$f(x|\theta)$表示的是给定参数$\theta$的情况下,事件$x$出现的可能性;而似然函数$L(\theta|x)$表示我观测到事件$x$已经发生了,选择何种参数$\theta$能最大化$x$出现的可能性。
即概率是已知参数$\theta$对于事件$x$的函数,而似然函数是已知事件$x$关于$\theta$的函数。
先验概率:事件发生前的根据以往的经验推测的与该事件相关的概率。可以是基于历史数据的统计,可以由背景常识得出,也可以是人的主观观点给出。一般都是单独事件概率,如$P(X),P(Y)$。
后验概率:条件概率$P(B|A)$是后验概率当事件$B$先于事件$A$发生。
在事件(试验)真正发生后,通过事件(试验)的结果可以修正先验概率
比如:你来到一个山洞,这个山洞里可能有熊也可能没有熊, 记你觉得山洞有熊的为事件 $Y$. 然后,你也许听到山洞里传来熊的吼声, 记听到熊吼声为事件 $X$. 你一开始认为山洞有熊的概率是 $P(Y)$; 听到熊的吼声之后,你认为有熊的概率是 $P(Y|X)$。在这里,$P(Y)$就是先验概率,$P(Y|X)$是后验概率.
注意这里是正比于而不是等于,这个是理解似然函数的一个关键,右侧直接的乘积其实是不满足概率分布归一化的条件的(就是右侧的积分最后不会等于1)那么这个正比符号怎样才能变成等号呢?其实只要再除以一个系数进行归一化就可以了:
模型
已知训练数据$T=\{(X_1,Y_1),(X_2,Y_2),…,(X_N,Y_N)\}$,其中$X_i=(X_i^{(1)},X_i^{(2)},…,X_i^{(M)})$,$X_i^{(j)}$是第$i$个样本的第$j$个特征。给定一个实例$x$,预测该实例的分类。
朴素贝叶斯法基于贝叶斯定理和特征条件独立假设,我们分开介绍。
贝叶斯定理
在分类问题背景下,我们已知某个实例$x$,预测$x$隶属的类,即:$P(Y=c_k|X=x)$。则贝叶斯定理可以为:
特征条件独立
因为每个样本都有多个特征,特征条件独立假设每个特征发生都是彼此独立。比如上式中的$P(X=x|Y=c_x)$,在特征独立假设下:
即样本$x$发生的概率是其每个特征发生的概率乘积。
朴素贝叶斯方法实际上学习到生成数据的机制,属于生成模型,分类时,通过学习到的模型计算后验概率分布$P(y_x|x)$,将后验概率最大的类作为$x$的类输出:
这是朴素贝叶斯法分类的基本公式,于是贝叶斯分类器可表示为:
由于对每个$c_k$,分母都是相同的,所以
证明
参数估计
极大似然法
在朴素贝叶斯法中,学习模型意味着估计$P(X=x|Y=c_x)$,故可以利用极大似然法估计相应的概率,即在给定的训练样本中统计计数,计算概率。
对于$P(X=x|Y=c_x)$的计算,在条件独立假设下:
分解为计算每个特征的概率$P(x^{(i)})$。对于每个特征,我们可以使用一个概率表:
$x^{(i)}=v1$ | $x^{(i)}=v2$ | … | $x^{(i)}=vl$ | ||
---|---|---|---|---|---|
$c_1$ | $P(x^{(i)}=v1 | c_1)$ | |||
$c_2$ | $P(x^{(i)}=v1 | c_2$ | |||
… | |||||
$c_n$ |
例子
我们有以下15个观测样本记录着天气情况以及类标签:是否可以打高尔夫球。
Outlook | Temperature | Humidity | Windy | Play Golf |
---|---|---|---|---|
rainy | hot | high | false | no |
rainy | hot | high | true | no |
overcast | hot | high | false | yes |
sunny | mild | high | false | yes |
sunny | cool | normal | false | yes |
sunny | cool | normal | true | no |
overcast | cool | normal | true | yes |
rainy | mild | high | false | no |
rainy | cool | normal | false | yes |
sunny | mild | normal | false | yes |
rainy | mild | normal | true | yes |
overcast | mild | high | true | yes |
overcast | hot | normal | false | yes |
sunny | mild | high | true | no |
现在给出某一天的天气如下,请问这一天是否适合打高尔夫球?
outlook | temperature | humidity | windy | play golf |
---|---|---|---|---|
rainy | mild | normal | true | ? |
思路
先验概率
我们基于最大似然法,利用观测样本算出先验概率。因为类标签只有两种:yes和no。
$P(yes)=\frac{9}{14}$, $P(no)=\frac{5}{14}$
条件概率
对于每一种特征,我们求出该特征的条件概率表。
| Outlook | rainy | overcast | sunny |
| :——-: | :—-: | :———: | :—-: |
| yes | 2/9 | 4/9 | 3/9 |
| no | 3/5 | 2/5 | 0 || Temperature | hot | mild | cool |
| :————-: | :—: | :—: | :—: |
| yes | 2/9 | 4/9 | 3/9 |
| no | 2/5 | 2/5 | 1/5 || Humidity | high | normal |
| :———: | :—: | :——: |
| yes | 3/9 | 6/9 |
| no | 4/5 | 1/5 || windy | true | false |
| :—-: | :—: | :—-: |
| yes | 3/9 | 6/9 |
| no | 3/5 | 2/5 |预测
利用预测公式
其中,$m$是特征数。
所以,对于每个类标签$Yes$和$No$,我们可以计算出概率为:
将上式正则化:
所以,我们预测可以出行打高尔夫球。
贝叶斯估计
使用极大似然估计可能会出现某种特征的概率为0的情况,如上例中,$P(Outlook=sunny|Y=no)=0$。这样会导致$P(Outlook=sunny, Temperature=,Humidity=,Windy=|Y=no)=0$,无论其他特征出现的概率多大,只要事件中Outlook特征为sunny,那么该事件的概率是0。这样显然是不合理的,所以为防止0概率出现,我们在统计计数时,对最后的计数结果加上一个正数$\lambda$,当$\lambda=0$时,就是极大似然估计,常取$\lambda=1$,这时称为拉普拉斯平滑。
以上面的例子为例:
先验概率
我们基于最大似然法,利用观测样本算出先验概率。因为类标签只有两种:yes和no。
$P(yes)=\frac{9+1}{14+2}=\frac{10}{16}$, $P(no)=\frac{5+1}{14+2}=\frac{6}{16}$
条件概率
对于每一种特征,我们求出该特征的条件概率表。
| Outlook | rainy | overcast | sunny |
| :——-: | :————-: | :————-: | :————-: |
| yes | (2+1)/(9+3) | (4+1)/(9+3) | (3+1)/(9+3) |
| no | (3+1)/(5+3) | (2+1)/(5+3) | (0+1)/(5+3) || Temperature | hot | mild | cool |
| :————-: | :—: | :—: | :—: |
| yes | 3/12 | 5/12 | 4/12 |
| no | 3/8 | 3/8 | 2/8 || Humidity | high | normal |
| :———: | :—: | :——: |
| yes | 4/11 | 7/11 |
| no | 5/7 | 2/7 || windy | true | false |
| :—-: | :—: | :—-: |
| yes | 4/11 | 7/11 |
| no | 4/7 | 3/7 |预测
利用预测公式
其中,$m$是特征数。
所以,对于每个类标签$Yes$和$No$,我们可以计算出概率为:
将上式正则化:
所以,我们预测可以出行打高尔夫球。
半朴素贝叶斯分类器
朴素贝叶斯采用了属性条件独立性假设,但是在现实中这个假设往往很难成立,于是人们对该假设进行一定程度的放松,即“半朴素贝叶斯分类器”学习方法。“独依赖估计“(One-Dependent Estimator, ODE)是其中一种常用方法,顾名思义,该方法假设每个属性最多依赖一个其他属性,即:
其中$pa_i$为属性$x_i$的依赖属性,称为$x_i$的父属性,如果对每个属性的父属性已知,则可采用上面类似方法来估计概率$P(x_i|c,pa_i)$。