贝叶斯统计观点下的拉普拉斯平滑

贝叶斯统计观点下的拉普拉斯平滑

这终于是本专栏的第一篇机器学习相关的文章,憋了几个月了,充分表现了自己肚子里实在是没什么墨水。这个学期非常的忙碌,读的书和论文也比较少了,更没有什么时间来写东西。可能寒假的时候会有多一点空闲多写一点东西吧,敬请不期待。

引论

朴素贝叶斯方法通常是很多机器学习或者人工智能课程所经常讲授的一个经典例子,通常被用在简单的文本分类问题上。而拉普拉斯平滑则是用来处理朴素贝叶斯方法中可能出现的零概率问题。本文中将试图用贝叶斯统计的方法来推导出朴素贝叶斯方法的整个体系,包括在很多地方没有涉及到如何推导出的拉普拉斯平滑方法。本篇将会伴随大量数学公式,请一定要坚持到底!

朴素贝叶斯方法

首先我们先把问题形式化出来。如果一般的机器学习问题一样,我们记输入变量X \in R^n为一个n维向量,输出变量Y \in \left\{ c_1, c_2, c_3, ..., c_K \right\}表示K个不同的类别,输入和输出服从联合概率分布P(X, Y)。我们的训练数据和测试数据都是服从这个联合概率分布,独立同分布的产生的。这里只考虑使用训练数据的情况。如果我们有N个训练数据,训练集可以被记做T = \left\{ (x_1,y_1), (x_2, y_2), ..., (x_N, y_N) \right\}

而我们的预测过程可以相当于,在知道了输入X的情况下,去求得Y取每一个类别的概率。而我们的预测自然而然就希望是取概率最大的那个类别(这个论断可以用经验误差最小化来建立,这里不阐述)。

我们希望求的自然是给定一个X的时候的Y的条件概率,那么我们有贝叶斯公式可以得到:

P(Y=c_k|X=x)=\frac{P(X=x|Y=c_k)P(Y=c_k)}{P(X=x)}=\frac{P(X=x|Y=c_k)P(Y=c_k)}{\sum_{k}P(X=x|Y=c_k)P(Y=c_k)}

而对于固定了的X=x,分母上的值都是相同的,因而在考虑取最大概率的类别时只需要考虑分子。那么我们的预测函数就可以写作:

y=f(x)=\arg\max \limits_{k} P(X=x|Y=c_k)P(Y=c_k)

也就是说,如果我们得到了上面的两个概率,就可以利用这个来对输入进行预测。然而实际上,从训练数据中估计概率P(X=x|Y=c_k)是非常困难的。由于X是一个高维向量,通常存在维数灾难的问题,刻画这个分布需要的参数数量也是指数级别的。朴素贝叶斯所谓的朴素,实际上就是引入了额外看起来很trivial的假设。朴素贝叶斯假设,X的每一维的分布是独立的,也就是说:

P(X=x|Y=c_k)=\prod_{j=1}^{n} P(X^{(j)}=x^{(j)}|Y=c_k)

那么

\begin{align*} f(x)=&\arg\max\limits_{k} P(X=x|Y=c_k)P(Y=c_k) \\ = &\arg\max\limits_{k} P(Y=c_k)\prod_{j=1}^{n} P(X^{(j)}=x^{(j)}|Y=c_k) \end{align*}

剩下的问题就变成了从训练数据中估计P(Y=c_k)P(X^{(j)}=x^{(j)}|Y=c_k)。在文本分类的场景下,我们通常认为X的取值是离散的(bag of word模型等)。

极大似然估计

极大似然估计(maximum likelihood)是一种用来从观测数据中估计概率模型参数的方法。其基本思想可以描述为,寻找一个参数使得给定的观测数据的概率最大。也就是:

\hat{\theta}_{ML}=\arg\max\limits_{\theta}P(X,Y|\theta)

XY也就是我们的训练数据。对于数据取值是离散的情况,一般来说是一个多项分布。而多项分布只是二项分布的推广(如果抽出其中任何一类单独考虑,把剩下的全部归作一类,就是一个二项分布),以下我们只用二项分布来进行讨论。

那么很显然的,我们会想要知道二项分布的极大似然估计的形式。如果假设观测数据服从分布X\sim B(N,p),而实际的数据x=k,那么其似然函数为

L(p;k)=C_{n}^{k}p^k(1-p)^{n-k}

对似然函数求极值,我们可以通过求解其导数等于零。为了方便,这里计算其自然对数的导数

\frac{\partial}{\partial p}\ln L(p;k)=(\frac{k}{p}-\frac{N-k}{1-p})=0

于是解得

p=\frac{k}{N}

这就是二项分布的极大似然估计结果,也符合我们的直观,也就是概率近似等同于频率的这样一种观点。

于是在这样的背景下,我们就能够使用极大似然估计来估计朴素贝叶斯方法中我们需要的概率:

P(X^{(j)}=x^{(j)}|Y=c_k)=\frac{\sum_{i=1}^{N}I(x_i^{(j)}=x^{(j)},y_i=c_k)}{\sum_{i=1}^{N}I(y_i=c_k)}

P(Y=c_k)=\frac{\sum_{i=1}^{N}I(y_i=c_k)}{N}

其中I是指标函数,表示满足内部的条件取值为1,不满足取值为0。上面的式子对各个概率的估计实际上也就是统计其在训练数据中的频数。

但是这样的估计也是存在问题的。如果第一个式子的分子或者分母上变成了0,也就是说该特征的数据从来没有在训练数据集中出现过,那么对他的概率估计就会变成0。而考虑到之前的

\arg\max\limits_{k} P(Y=c_k)\prod_{j=1}^{n} P(X^{(j)}=x^{(j)}|Y=c_k)

是每一项的乘积,其中的一项为0会导致整个的概率都为0。也就是说,如果一个输入有一个训练数据中没有的特征,对它任何类别的概率估计就会变成0,这就导致了问题。

为了解决这个问题,我们设想一个场景。如果有一枚可能不均匀的硬币,现在要你估计它正面朝上的概率。如果你做了N次实验,k次正面朝上,那么自然对其概率的估计就是p=\frac{k}{N}。而如果你一次硬币都没有抛,这时候还需要你对其概率进行估计的话,你会首先认为硬币是均匀的,即p=\frac{1}{2}。也就是说,在没有做任何实验之前,我们就有一个先验的概率估计。而进行了若干次实验之后,我们会用实验的结果来修正我们对这个概率的估计。这种思想也用来解决上面的零概率问题。

最大后验概率估计

在贝叶斯统计的观点下,概率分布的参数本身也服从另一个分布。在得到任何观测数据之前,我们设定一个先验概率分布。在有观测数据之后,从先验分布由贝叶斯公式计算出一个后验概率分布。而我们对于参数的估计自然就是后验概率最大的那个参数。

形式化的说来,假设我们的模型参数为\theta,先验概率分布为\pi(\theta),在给定参数\theta的前提下,观测数据的概率分布为f(x|\theta),也就是似然函数。那么由贝叶斯公式可得

f(\theta|x)=\frac{f(x|\theta)\pi(\theta)}{\int f(x|\theta)\pi(\theta)d\theta}

于是我们的最大后验概率估计就是

\hat{\theta}_{MAP}=\arg\max\limits_{\theta}f(x|\theta)\pi(\theta)

与上面极大似然估计做比较我们可以发现,当先验分布\pi(\theta)是均匀分布时,最大后验估计也就是极大似然估计。

共轭先验

要使用最大后验概率估计,我们自然需要首先选取一个先验分布。先验分布的选择通常是需要有一些技巧性的。在一些时候,我们会希望后验分布和先验分布属于相同的分布族,这样使得我们在很多时候能够解析的处理。这种先验分布我们成为共轭先验。

我们的关注点依然限制在二项分布的情况。这里不加证明的指出,二项分布的共轭是Beta分布。beta分布由两个参数\alpha\beta刻画,一般记做B(\alpha,\beta)B(\alpha,\beta)的概率密度函数为

f(x;\alpha,\beta)=\frac{x^{\alpha-1}(1-x)^{\beta-1}}{\int_0^1 x^{\alpha-1}(1-x)^{\beta-1} dx}=\frac{1}{B(\alpha,\beta)}x^{\alpha-1}(1-x)^{\beta-1}

上面的B(\alpha,\beta)应该指beta函数。我们继续不加证明的给出Beta分布的一些性质(这应该是比较简单的微积分)。如果X\sim B(\alpha,\beta),那么

EX=\frac{\alpha}{\alpha+\beta}

\arg\max\limits_{x} f(x;\alpha,\beta)=\frac{\alpha-1}{\alpha+\beta-2}

有了这个基础之后我们就可以回过头来对二项分布的参数进行最大后验的估计。我们知道二项分布的共轭先验应该是beta分布,但是仍有两个参数需要被确定。如果我们对于\theta的先验估计是\theta_0,那么我们应该选择使得\theta_0是其众数的那个分布。也就是说

\frac{\alpha-1}{\alpha+\beta-2}=\theta_0

显然无法解出两个未知数,我们引入另一个变量,然后令

\alpha=\lambda\theta_0+1, \beta=\lambda(1-\theta_0)+1

于是显然的

\frac{\alpha-1}{\alpha+\beta-2}=\frac{\lambda\theta_0}{\lambda}=\theta_0

那么还按照文章之前的设定,我们计算后验概率分布

\begin{align*} f(\theta|x)=&\frac{C_N^k\theta^k(1-\theta)^{N-k}\theta^{\lambda\theta_0}(1-\theta)^{\lambda(1-\theta_0)}}{\int C_N^k\theta^k(1-\theta)^{N-k}\theta^{\lambda\theta_0}(1-\theta)^{\lambda(1-\theta_0)}d\theta}\\=&\frac{1}{B(k+\lambda\theta_0+1,N-k+\lambda(1-\theta_0)+1)}\theta^{k+\lambda\theta_0}(1-\theta)^{N-k+\lambda(1-\theta_0)} \end{align*}

于是

\hat{\theta}_{MAP}=\arg\max\limits_{\theta}f(\theta|x)=\frac{k+\lambda\theta_0}{N+\lambda}

于是我们就见到了一个长得跟我们已经知道的拉普拉斯平滑很像的表达式。得到了这个基本的结果了之后我们回到朴素贝叶斯方法。首先考虑P(Y=c_k)。由于我们知道总共有K个类别,于是每个类别的先验概率显然就应该是\frac{1}{K}。那么

P(Y=c_k)=\frac{\sum_{i=1}^{N}I(y_i=c_k)+\frac{\lambda}{K}}{N+\lambda}=\frac{\sum_{i=1}^{N}I(y_i=c_k)+\hat{\lambda}}{N+\hat{\lambda}K}

其中\hat{\lambda}=\frac{\lambda}{K}的变换算是为了凑出我们熟悉的拉普拉斯平滑的形式。

接下来考虑P(X^{(j)}=x^{(j)}|Y=c_k),如果对于X^{(j)}S_j种不同的取值,那么很容易的我们知道

P(X^{(j)}=x^{(j)}|Y=c_k)=\frac{\sum_{i=1}^{N}I(x_i^{(j)}=x^{(j)},y_i=c_k)+\lambda}{\sum_{i=1}^{N}I(y_i=c_k)+\lambda S_j}

读者可以自行验证上面两式子确实是一个合法的概率分布,满足每项都大于等于0且和为1。

于是我们严格的从贝叶斯统计推导出了拉普拉斯平滑的形式,这可以使得我们确信这种平滑方法绝对不仅仅是一个trick,而是有很深刻的背后的原理在里面的。


参考文献

李航. (2012). 统计学习方法. 清华大学出版社, 北京.

Mitchell, T. M. (2003). 机器学习. 机械工业出版社.

Naive Bayes classifier

Maximum a posteriori estimation

Maximum likelihood estimation

Conjugate prior - Wikipedia

Beta distribution


于是居然赶上了2016年的末尾写出了这篇文章,真是一个赶DDL的恶习。
本文是在我做完某门课的课程报告之后重新把PPT写成了一篇文,想要原PPT的同学可以在 heqinyao.com/static/Lap 这里下载。
有任何错误欢迎指出!
看文章的同时顺便祝大家新年快乐哦!
编辑于 2017-10-02

文章被以下专栏收录