Naive Bayes

机器学习中的分类方法,通常是基于有限的训练样本尽可能准确地估计后验概率$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]

似然函数

似然函数 VS 概率

统计学的观点始终认为样本的出现是基于一个分布的,我们假设这个分布为$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$,分母都是相同的,所以

证明

Screen Shot 2018-10-03 at 9.55.16 PM

Screen Shot 2018-10-03 at 9.55.26 PM

参数估计

极大似然法

在朴素贝叶斯法中,学习模型意味着估计$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$

Screen Shot 2018-10-01 at 11.23.00 PM

例子

我们有以下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 ?

思路

  1. 先验概率

    我们基于最大似然法,利用观测样本算出先验概率。因为类标签只有两种:yes和no。

    $P(yes)=\frac{9}{14}$, $P(no)=\frac{5}{14}$

  2. 条件概率

    对于每一种特征,我们求出该特征的条件概率表。

    | 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 |

  3. 预测

    利用预测公式

    其中,$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$,这时称为拉普拉斯平滑。

以上面的例子为例:

  1. 先验概率

    我们基于最大似然法,利用观测样本算出先验概率。因为类标签只有两种:yes和no。

    $P(yes)=\frac{9+1}{14+2}=\frac{10}{16}$, $P(no)=\frac{5+1}{14+2}=\frac{6}{16}$

  2. 条件概率

    对于每一种特征,我们求出该特征的条件概率表。

    | 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 |

  3. 预测

    利用预测公式

    其中,$m$是特征数。

    所以,对于每个类标签$Yes$和$No$,我们可以计算出概率为:

    将上式正则化:

    所以,我们预测可以出行打高尔夫球。

半朴素贝叶斯分类器

朴素贝叶斯采用了属性条件独立性假设,但是在现实中这个假设往往很难成立,于是人们对该假设进行一定程度的放松,即“半朴素贝叶斯分类器”学习方法。“独依赖估计“(One-Dependent Estimator, ODE)是其中一种常用方法,顾名思义,该方法假设每个属性最多依赖一个其他属性,即:

其中$pa_i$为属性$x_i$的依赖属性,称为$x_i$的父属性,如果对每个属性的父属性已知,则可采用上面类似方法来估计概率$P(x_i|c,pa_i)$。

应用:邮件分类

data