生成式和判别式分类器:朴素贝叶斯与逻辑回归

Tom M.Mitchell (译pku_goldenlock at qq.com)

Abstract

GENERATIVE AND DISCRIMINATIVE CLASSIFIERS:NAIVE BAYES AND LOGISTIC REGRESSION文章简单翻译(不完整to be finished or not:)请参考原文(很经典),错误难免仅供自己记录。

1 基于贝叶斯规则的分类学习

这里我们会考虑有监督学习(supervised learning),方程拟合(function approximation),以及贝叶斯推理的关系。

考虑一个有监督学习问题,我们想逼近一个方程f:X− > Y或者说P(Y|X)(外:最小二乘法和概率意义上的使得训练数据出现的概率最大化))。为了简单我们假设Y是一个布尔取值的随机变量,而X是一个有着n个布尔属性的向量,如 < 0,1,1,0 > ,可以表示成X= < X1,X2...,Xn > ,其中Xi表示X的第i个布尔取值的随机变量。

利用贝叶斯法则,我们可以看出P(Y=yi|X)可以表示成为

P(Y=yi|X=xk)=

P(X=xk|Y=yi)P(Y=yi)



j

P(X=xk|Y=yj)P(Y=yj)

 

这里ym表示y的第m个可能取值,xk表示X的第k个可能的向量值。注意k的取值范围[1,2n]。

(外:贝叶斯公式其实涉及两个概率中最重要的法则,乘法法则P(AB)=P(B|A)P(A)和加法法则(公式右侧分母=P(X=xk)。)

一个学习P(Y|X)的方法是用训练数据来估计P(X|Y)以及P(Y)。利用上面的贝叶斯公式可以得到对于任何新实例Xk所对应的P(Y|Xk)。

1.1 无偏差的贝叶斯分类器是不现实的

如果我们通过估计P(X|Y)以及P(Y)来训练贝叶斯分类器,那么有理由问需要多少的训练数据支持才能得到对于相应概率分布的可靠估计呢?我们假设训练数据是这样产生的,通过绘制随机的实例其内在的分布是P(X),允许一个老师来标记其对应的Y值。

当Y取布尔值的时候,100个随机的互不相关的训练数据一般来说足够获得一个最大似然估计(maximum likelihood)P(Y),估算值相对准确值会有可接受范围的一定误差。然而精确估算P(X|Y)需要多的多的训练数据!我们需要估算下面的参数:

θij ≡ P(X=xi|Y=yj)

这里注意i可以取2n的值,而j可以取2个值,我们大约需要估计2n+1个参数,精确的话,因为对于固定的某个j对应的x的各种取值概率之和为1,

因此我们需要估算2(2n−1)个θi,j参数,不幸的是这对应的是X域的每个实例都有2个不同的参数,更糟的是为了能得到可靠的估算我们需要对于所有不同的实例观察多次!例如X是一个30维的变量,那么需要估算30亿的参数!

2 朴素贝叶斯算法

我们如何来简化这个复杂性呢,朴素贝叶斯作了条件无关性(conditional independence)假设从而大大简化了复杂性。

2.1 条件无关性

定义:给定随机变量X,Y,Z,我们说给定Z的前提下,X与Y条件无关(conditional independent),当且仅当如果给定Z,X的概率分布独立与Y的取值无关。

(∀i,j,k)P(X=xi|Y=yj,Z=zk)=P(X=xi|Z=zk)

一个例子,下雨,雷,闪电,我们可以说给定闪电的情况,下雨和打雷是无关的,因为闪电必然带来了打雷,当然一般情况下打雷和下雨是相关的,但是给定闪电的情况下,它们是无关的。

2.2 朴素贝叶斯(naive bayes)算法的推导

朴素贝叶斯算法是一个基于贝叶斯法则的分类算法,它假设X的各个属性X1,X2...,Xn 在给定Y的前提下是条件无关的,这将问题的的复杂性参数估计数目从2(2n−1)降低到了2n,从指数到线性。我们考虑n=2的情形,X= < X1,X2 >

P(X|Y)=P(X1,X2|Y)=P(X1|X2,Y)P(X2|Y)=P(X1|Y)P(X2|Y)

好了当我们P(X1|Y)P(X2|Y),后我们就得到了P(X|Y),这意味者给定Y后,我们只需要估算2个参数(外:如果n=3就是3)就可以估算出P(X|Y),而如果不做条件相关假设,我们需要估算4个参数(外:如果n=3就是23=8)。推广到一般情况有:

P(X1...Xn|Y)=

n

i=1

P(Xi|Y)

(1)

我们现在来推导朴素贝叶斯算法,我们假设Y是可以取任意离散的数值,X可以取任意离散或者连续数值。我们的目的是对于任意一个新的实例X,训练一个分类器输出对于Y的所有可能取值的一个概率分布。可以表示Y取它的第k个可能值的概率如下:

P(Y=yk|X1...Xn)=

P(Y=yk)P(X1...Xn|Y=yk)



j

P(Y=yj)P(X1...Xn|Y=yj)

 

P(Y=yk|X1...Xn)=

P(Y=yk)


i

P(Xi|Y=yk)



j

P(Y=yj)


i

P(Xi|Y=yj)

 

(2)

上面第二个公式就是朴素贝叶斯分类器的重要公式。因此当有一个新的X的实例,Xnew= < X1,X2...,Xn > 我们可以利用从训练数据中通过估算得到P(Y),P(Xi|Y),从而得到Y取其可能的各个离散值的概率,更进一步我们可能对于对应概率最大的那个值感兴趣(外:分类结果),于是我们有下面的朴素贝叶斯分类法则:

Y←argmaxyk

P(Y=yk)


i

P(Xi|Y=yk)



j

P(Y=yj)


i

P(Xi|Y=yj)

 

可以进一步简化如下,因为分母与yk取值无关

Y←argmaxykP(Y=yk)


i

P(Xi|Y=yk)

(3)

2.3 对应离散输入的朴素贝叶斯

作为总结,这里精确的定义朴素贝叶斯学习算法需要估算的参数以及我们如何估算它们。

当n个输入属性Xi可以取J个可能的离散的数值,Y可能取K个可能的离散值,我们的任务是估算两类的参数,第一类:

θijk ≡ P(Xi=xij|Y=yk)

(4)

对于所有的属性Xi,对应每一个可能的取值xij,以及对应的所有可能的Y的取值yk。所以有nJK个参数,注意其中不相关的参数只有n(J−1)K个(外:如果没有条件不相关假设呢,个人认为参数个数是(Jn−1)K),因为1=∑jθijk对于所有的i,k组合值。

除此之外我们需要估计定义了对应Y的先验概率(prior probability):

πk ≡ P(Y=yk)

(5)

这对应K个参数,其中最大独立参数个数为K−1。

对应给定的训练集合D,参数θijk的最大似然估计值为:

 

^

θ

ijk

=

^

P

(Xi=xij|Y=yk)=

#D{Xi=xijΛ Y=yk}


#D{Y=yk}

 

(6)

#D{x}表示返回集合D中符合条件x的所有元素个数。

最大似然估计的一个危险在于有很多时候可能会把θ的值估计为0,因为可能测试数据且好不包含任何符合条件的元素,所以上式子分子为0。为了避免这种情况,一种常用做法是使用“光滑”(smoothed)的估计,加入一些额外的“虚拟”的数据,原则是对于Xi的所有取值这些虚拟的数据均匀分布

 

^

θ

ijk

=

^

P

(Xi=xij|Y=yk)=

#D{Xi=xijΛ Y=yk}+l


#D{Y=yk}+lJ

 

(7)

J是Xi的可能取值数目,l参数决定光滑的程度大小。这个表达式对应θijk的MAP(max a posterior最大后验)估计如果我们假定一个其符合先验的狄利克雷分布(?外:TODO understand Dirichlet 分布),有着equal-valued参数。如果l设置为1,就是拉普拉斯光顺.

对应πk的最大似然估计如下:

 

^

π

k

=

^

P

(Y=yk)=

#D(Y=yk)


|D|

 

(8)

类似的可以对其光滑得到:

 

^

π

k

=

^

P

(Y=yk)=

#D(Y=yk)+l


|D|+lK

 

(9)

2.4 对应连续输入的朴素贝叶斯

对于输入Xi是连续取值的情况,我们也可以应用公式(2),(3)作为基础来设计朴素贝叶斯分类器。但是当Xi是连续取值的时候我们需要考虑其它的方式来描述P(Xi|Y)的分布,一个常用的策略是我们假定对于任意的Y的值yk,所有的连续的Xi是符合高斯分布的,其均值和方差由特定对应的Xi,yk决定。由此为了训练这样的朴素贝叶斯分类器,我们的任务就变成了估计这些高斯分布的均值和方差:

μik=E[Xi|Y=yk]

(10)

σik2=E[(Xi−μik)|Y=yk]

(11)

注意我们需要估计所有2nK个对应这样的参数。

当然我们也需要估算Y上的先验参数:

πk ≡ P(Y=yk)

(12)

上面给出了高斯朴素贝叶斯分类器的一个总结,这里X是由一系列类别相关(class-conditional)的(取决于Y)的高斯分布生成,更进一步朴素贝叶斯指出Xi之间相对给定的Y条件无关。对于特定的场景,我们也许能做进一步的限制,比如如果我们有理由认为被观测的Xi的值的噪声来源相同,我们可以进一步的认为所有的σik2的值是相同的与i以及类别k的值无关。

同样的我们可以利用最大似然概率(MLE P(Y|X)估算使得Y出现可能最大P(Y)最大的对应参数X)或者最大后验概率(MAP P(X|Y) ∝ P(Y|X)P(X) 从给定的测试数据Y估算参数X,依据最大似然和X的先验假设)来估计这些参数。对μik的估算如下:

 

^

μ

ik

=

1



j

δ(Yj=yk)

 


j

Xijδ(Yj=yk)

(13)

这里δ取0,1表示如果内部满足条件是1否则为0,Yj表示对应第j个训练数据。

类似的对应σik2的估算:

 

^

σ

2
ik

=

1



j

δ(Yj=yk)

 


j

(Xij

^

μ

ik

)2δ(Yj=yk)

(14)

由于该估计是有偏差的(biased,因E(∧σik2)!=E(σik2))所以最小无偏差估计通常用于取代它:

 

^

σ

2
ik

=

1



j

δ(Yj=yk)−1

 


j

(Xij

^

μ

ik

)2δ(Yj=yk)

(15)

3 逻辑回归(logistic regression)

逻辑回归是一个学习f:X− > Y 方程或者P(Y|X)的方法,这里Y是离散取值的,X= < X1,X2...,Xn > 是任意一个向量其中每个变量离散或者连续取值。我们首先主要考虑Y取布尔值的情况,最后一小节会推广到Y取有限个离散值的情形。

逻辑回归对于分布P(Y|X)假定一个参数形式,然后从训练数据中直接估计这些参数值。当Y取布尔值的时候这个参数模型如下:

P(Y=1|X)=\frac{1}{1+exp(\omega_{0}+\sum_{i=1}^{n}\omega_{i}X_{i})}               (16)

P(Y=0| X)=\frac{exp(\omega_{0}+\sum_{i=1}^{n}\omega_{i})}{1+exp(\omega_{0}+\sum_{i=1}^{n}\omega_{i}X_{i})}              (17)

其中第2个方程可以由第一个直接按照概率和为1推导出来。

通过P(Y|X)我们可以有一个关于分类的线性表达形式。对于任意的一个X确定其类别的方法一般就是给其一个分类值yk使得P(Y=yk|X)最大化。因此如果我们给其标明类别是Y=0那么意味着:

1 <

P(Y=0|X)


P(Y=1|X)

 

通过上面的方程求解得到:

1 < exp(ω0+

n

i=1

ωi)

0 < ω0+

n

i=1

ωi

(18)

也就是如果X满足上式条件那么标记类别Y=0,否则标记Y=1。

有意思的是这里逻辑回归P(Y|X)所用到的参数形式恰好是可以由前面提到的高斯平凡贝叶斯分类器推导出来。

3.1 高斯朴素贝叶斯分类器的P(Y|X)形式

考虑符合如下条件的高斯平凡贝叶斯:

  • Y取布尔值,符合泊努利分布,参数π = P(Y=1)
  • X= < X1,X2...,Xn > 其中每个属性Xi取连续的值。
  • 对于每一个Xi,P(Xi|Y=yk)符合N(μiki)的高斯分布。
  • 各个不同的Xi对于给定的Y条件无关。

根据以上的假设我们来点推导P(Y|X):

P(Y=1|X)=

P(Y=1)P(X|Y=1)


P(Y=1)P(X|Y=1)+P(Y=0)P(X|Y=0)

 

P(Y=1|X)=

1


1+

P(Y=0)P(X|Y=0)


P(Y=1)P(X|Y=1)

 

P(Y=1|X)=

1


1+exp(ln(

P(Y=0)P(X|Y=0)


P(Y=1)P(X|Y=1)

))

 
 

P(Y

=

1|X)=

1


1+exp(ln(

P(Y=0)


P(Y=1)

)+ln(

P(X|Y=0)


P(X|Y=1)

))

=

1


1+exp(ln

1−π


π

+


i

ln

P(Xi|Y=0)


P(Xi|Y=1)

)

 
 
 


i

ln

P(Xi|Y=0)


P(Xi|Y=1)

=


i

ln

P(Xi|Y=0)


P(Xi|Y=1)

=


i

ln

1


 


σi

exp(−

(Xi−μi0)2


i2

)


1


 


σi

exp(−

(Xi−μi1)2


i2

)

 

=


i

ln(exp(

(Xi−μi1)2−(Xi−μi0)2


i2

))=


i

 

2(μi0−μi1)Xi+(μi12−μi02)


i2

=


i

 


 

μi0−μi1


σi2

Xi+

μi12−μi02


i2


 

 

由此我们得到:

w0=ln

1−π


π

+


i

 

μi12−μi02


i2

 

wi=

μi0−μi1


σi2

 

3.2 逻辑回归的参数估计

上面的推导表示假设朴素贝叶斯的情况下可以推导出逻辑回归的参数形式并且得到相应的参数值,但是这里我们希望能有一个更加一般化的方法得出参数的估计,有些时候也许我们并不能认为完全符合朴素贝叶斯情况,这时候我们希望能从训练数据中直接得出估计的参数而不依赖朴素贝叶斯的条件限制假定。

一个可行的方案是选择使得条件概率最大化的参数,这里的条件概率即是在训练集合中观测到的Y的值,条件依赖于X的值。我们选择参数W满足:

W\leftarrow\arg\max_{W}\prod_{l}P\left(Y^{l}|X^{l},W\right)

Y^{l},X^{l}分别是对应第l个观测到训练数据的相应结果。

演算过程见原文,通过对w_{i}分别求偏导数即可,利用standard gradient ascent 来进行优化。w_{i}=w_{i}+\frac{\partial l\left(w\right)}{\partial w_{i}}*\mu。TODO 利用conjugate gradient ascent能收敛速度更快。

3.3 逻辑回归的正规化

过渡拟合问题(overfitting),即存在其它的情况虽然对于训练集误差大但是对于整个数据域误差小,这种问题在逻辑回归中容易产生,尤其是当数据是高维度的而训练数据是稀疏的情况下。一个解决方法是正规化(regularization),我们对优化的目标方程加入 "penalized log likelyhood function"来避免较大值的W。

3.4 对应有多个离散值的方程的逻辑回归

4 朴素贝叶斯和逻辑回归的联系

作为总结,逻辑回归直接估计P(Y|X)的参数,而朴素贝叶斯则通过估计参数P(Y)P(X|Y)。我们经常把前者称为判别式(discriminative)后者称为生成式(generative)分类器

如果GNB的前提满足,那么理论上(随着训练数据数目增大到无限)逻辑回归和朴素贝叶斯其实是相同的分类器。两种算法的不同之处是:

  • 如果GNB前提不满足。那么理论上他们是不同的分类学习functions,逻辑回归要比假定GNB的朴素贝叶斯更精确。尽管逻辑回归与朴素贝叶斯一样假定输入的特征X_{i}满足相对Y的条件无关性,但是当数据不满足的时候,CLM(conditional likelihood maximization)算法会调整参数来适应数据,即使结果参数与朴素贝叶斯假设不一致。
  • 两种算法收敛速度不一样。假设X的维度是n,那么GNB收敛复杂度是\log(n)个examples,而逻辑回归需要n
个examples。在训练数据较多的时候逻辑回归取得更好的效果,而当训练数据较少时朴素贝叶斯可能效果更好。

5 你所应该知道的

  • 我们可以运用贝叶斯法则来设计学习算法。f:X->Y或者等价的P(Y|X)。我们利用训练数据来学习P(X|Y),P(Y)(考虑下朴素贝叶斯文本分类器的应用,<<信息检索导论>>)。对于新的X,它的分类可以利用概率分布+贝叶斯法则得到。
  • 学习贝叶斯分类器一般需要太多的不可能得到的unrealistic训练数据,因为我们有太多的参数需要估计。于是我们需要做条件无关性假设来减少需要估计的参数,即我们需要朴素贝叶斯。
  • X是离散取值的向量时,朴素贝叶斯学习可以看做是线性分类器。同样的结论对于GNB分类器也成立,如果每个特征的方差是与类别无关的(ie,if \sigma_{ik}=\sigma_{i})(注意我的关于PRML第一章总结,PRML中其实是设定都是相同的方差)。
  • 逻辑回归从训练数据中直接估计P(Y|X)
  • 逻辑回归是X上面的线性分类器。如果GNB条件满足逻辑回归等价于朴素贝叶斯。如果不满足,那么逻辑回归更精确一些,可以认为相比逻辑回归,朴素贝叶斯方法有更大的bias,更小的variance。如果该bias是我们可以接受的可以选择朴素贝叶斯,否则逻辑回归更好。
  • 我们可以从概率的角度(conditional distributions)来看待方程逼近问题。

 

 

 

 

 

 

 

 

6 PRML 1.5.4的相关解释

We have broken the classification problem down into two separate stages, the inference stage in which we use training data to learn a model for p(Ck|x), and the subsequent decision stage in which we use these posterior probabilities to make optimal class assignments. An alternative possibility would be to solve both problems together and simply learn a function that maps inputs x directly into decisions. Such a function is called a discriminant function.

按照复杂程度降序有以下3种决策方法:

  1. First solve the inference problem of determining the class-conditional densities p(x|Ck) for each class Ck individually. Also separately infer the prior class probabilities p(Ck). Then use Bayes’ theorem in the form
    p(Ck|x) = p(x|Ck)p(Ck)/P(X) to find the posterior class probabilities p(Ck|x). As usual, the denominator in Bayes’ theorem can be found in terms of the quantities appearing in the numerator, because P(x)= sum(P(x|Ck)P(Ck)  ).
    Equivalently, we can model the joint distribution p(x, Ck) directly and then normalize to obtain the posterior probabilities(p(x,Ck)/P(x)考虑贝叶斯文本分类正向估算P(x,Ck)不容易). Having found the posterior
    probabilities, we use decision theory to determine class membership for each new input x. Approaches that explicitly or implicitly model the distribution of inputs as well as outputs are known as generative models, because by sampling from them it is possible to generate synthetic data points in the input space.
  2. First solve the inference problem of determining the posterior class probabilities p(Ck|x), and then subsequently use decision theory to assign each new x to one of the classes. Approaches that model the posterior probabilities directly are called discriminative models.
  3. Find a function f(x), called a discriminant function, which maps each input x directly onto a class label. For instance, in the case of two-class problems, f(·) might be binary valued and such that f = 0 represents class C1 and f = 1represents class C2. In this case, probabilities play no role. (逻辑回归?)
posted @ 2010-09-11 17:07  阁子  阅读(9970)  评论(0编辑  收藏  举报