Naive Bayes
在GDA模型中,特征向量
x
是连续的实数向量,在这一讲里,我们将要讨论另外一种算法用来处理特征向量
我们先考虑一个例子,用机器学习的方法建立一个垃圾邮件过滤器,我们希望用一种算法来甄别邮件的信息以确定该邮件是不是垃圾邮件,通过学习这个算法,我们将能建立自己的垃圾邮件过滤器帮我们对邮件进行分类,邮件分类只是一系列我们称之为文本分类中的一种。
首先假设我们有一个训练集(包括了垃圾邮件和正常的邮件),我们用特征向量
x
表示一封邮件,特征向量的长度等于该邮件所含有的单词的数量,这些单词包含在我们预先建立的一部字典里。如果该邮件的第
现在,我们想建立一个分类模型来决定该邮件是不是垃圾邮件。所以我们要估计p(x|y),假设一封邮件有5000个单词,那么该特征向量就是5000维,即
x∈{0,1}5000
,(
x
是一个只含有0和1的5000维的向量),如果我们用多项分布来对特征向量进行建模,那么该特征向量有
为了更方便的估计p(x|y),我们要做一个强一点的假设,我们假设邮件里的单词,即
xi
是相互\textbf{条件}独立的,这个假设称为Naive Bayes (NB) 假设,相应的算法称为Naive Bayes 分类。比如,如果
y=1
表示该邮件是垃圾邮件,那么单词A 和单词B 之间是相互条件独立的,也就是说如果邮件是垃圾邮件,那么该邮件中的单词A 出现的概率与单词B 出不出现没有关系,更一般地,我们可以得到如下关系:
p(xi|y=p(xi|y,xj))
,
xi
表示单词A 是特征向量的第{i}个分量,
xj
表示单词B 是特征向量的第
j
个分量。(但是请注意:这不是说单词A 和单词B 是相互独立的,所以不能简单的写成:
因此,我们有:
这个模型可以由
ϕi|y=1=p(xi=1|y=1)
,
ϕi|y=0=p(xi=1|y=0)
和
ϕy=p(y=1)
建立,给定一组训练样本
(x(i),y(i));i=1,...m
,
我们可以得到训练数据的联合概率
利用最大似然估计,可以得到:
上式中,符号 ∧ 表示逻辑运算“与”, ϕj|y=1 表示垃圾邮件中第 j 个单词出现的概率,一旦得到所有的参数,那么给定一个新的特征向量,要判断其是不是垃圾邮件,我们可以计算其概率:
最后,我们要注意,虽然我们提出的Naive Bayes 算法处理的是二值化的特征向量,但是对于多个离散值的情况,我们可以用多项式分布代替伯努利分布对 p(xi|y) 进行建模。
Laplace Smoothing
Naive Bayes学习算法可以很好地处理很多分类问题,接下来,我们要讨论如何对该算法做一点小小地改进让它更好地工作,特别是处理文本分类问题。在介绍这个改进之前,我们先来看一个问题。
假设我们用Naive Bayes算法建立了一个分类器对邮件进行分类,对一封邮件的单词进行判断从而确定该邮件是否垃圾邮件。如果有一封新邮件,里面含有一个从未见过的单词,即在训练样本里面从未出现过的单词,我们假设该单词在字典里的顺序为
j
,那么Naive Bayes 算法对该单词的最大似然估计为:
因为训练集里的样本邮件(不管是不是垃圾邮件)都没有这个单词,所以估计得参数
ϕj|y=1
和
ϕj|y=0
都是0,当我们要确定含有该单词的某封邮件是不是垃圾邮件时,我们可以计算其后验概率为:
因为 ∏ni=1p(xi|y) 中含有 p(xj|y)=0 , 所以使得最终计算的后验概率为 0/0, 这个结果无法进行预测。这显然不是我们希望看到的。换句话说,如果因为一个训练集中从未出现的单词,而将概率估计为0,这是个很糟糕的想法。
为了避免这个尴尬的问题,我们可以利用Laplace Smoothing, 则新的概率估计为:
可以看到,我们在分子,分母上分别加了一个常数,这样可以避免概率为0,而在实际的应用中,因为对训练集中对垃圾邮件和非垃圾邮件的划分通常比较合理,所以参数 ϕy 一般是一个比较合理的数,所以对 ϕy 的估计不需要利用 Laplace Smoothing.
Event models for text classification
最后,在结束Generative Learning 学习算法之前,我们再介绍一种针对文本分类问题的模型,虽然 Naive Bayes 算法可以很好地处理很多分类问题,但是对于文本分类,还有一种更加好的模型。
之前介绍的特定语境的文本分类问题,这里介绍的Naive Bayes算法用的是我们称之为\textbf{multi-variate Bernoulli event model},在这个模型中,我们对一封邮件,先根据先验概率p(y)计算其为垃圾邮件的概率,然后把这封邮件用事先建立好的字典进行检索,将出现的单词计算其概率 p(xi=1|y)=ϕi|y , 最终该邮件是否为垃圾邮件的概率为: p(y)∏ni=1p(xi|y) .
接下来,我们将介绍另外一种更加高效的模型,称为multinomial event model, 为了描述这个模型,我们使用不同的注释和特征来表示一封邮件。我们定义
xi
表示邮件里的第
i
个单词,
这个模型我们需要计算的参数有
ϕy=p(y)
,
ϕi|y=1=p(xj=i|y=1)
(对任何的
j
),
如果给定一组训练样本
(x(i),y(i));i=1,...m
, 其中
x(i)=(x(i)1,x(i)2,...x(i)ni)
,
ni
表示第
i
个训练样本的单词个数,则训练数据的似然率为:
利用最大似然估计,可以得到
如果我们利用Laplace Smoothing估计 ϕk|y=1 和 ϕk|y=0 ,我们可以对分子加常数1,对分母加常数|V|,则可以得到:
这个就是 multinomial event model的概率估计。
参考文献
Andrew Ng, “Machine Learning”, Stanford University.