cs229 笔记 4:生成学习算法

前面讲到的学习算法都是对 p(y|x;θ) 建模。例如逻辑回归算法对 p(y|x;θ) 建模得到 hθ(x)=g(θTx) (其中 g 是 sigmoid 函数),直观上可以理解为:找到一条直线,将数据集划分为 y=1y=0 两种,对新的输入,根据结果落在直线的哪一侧预测为对应的分类。这种叫做判别学习算法

和判别学习算法不同的是,生成学习算法对 p(x|y)p(y) 建模。

举个栗子,假如我们想判断一个动物是大象 (y=1) 还是狗 (y=0),y 表示一个样本是大象还是狗,p(x|y=1) 表示大象的特征分布、p(x|y=0) 表示狗的特征分布。在对 p(y)(class priors 先验概率类型) 和 p(x|y) 建模后,使用贝叶斯规则推导后验概率分布

(1)p(y|x)=p(x|y)p(y)p(x)

其中 p(x)=p(x|y=1)p(y=1)+p(x|y=0)p(y=0) (可由全概率公式得到,p(B)=i=1np(Ai)p(B|Ai))。实际上,如果只是计算 p(y|x) 用于预测,并不需要计算出分母的值 (因为分母不是 y 的函数),原因如下

(2)argmaxyp(y|x)=argmaxyp(x|y)p(y)p(x)(3)=argmaxyp(x|y)p(y)

高斯判别分析

首先介绍高斯判别分析 GDA (Gaussian discriminant analysis),它假定 p(x|y) 服从多维正态分布 (x 是向量,它的值是连续的)

多维正态分布

n 维正态分布 (又叫高斯分布),它的参数包括一个均值向量 μRn 和一个协方差矩阵 ΣRn×n (0 是对称半正定矩阵),记作 N(μ,Σ)。它的概率密度为

(4)p(x;μ,Σ)=1(2π)n/2|Σ|1/2exp(12(xμ)TΣ1(xμ))

其中 |Σ| 表示协方差矩阵 Σ 的行列式

假设随机变量 X 服从多维高斯分布,则它的期望为

(5)E[X]=xxp(x;μ,Σ)dx=μ

假设随机变量 Z 是一个向量,它的协方差为

(6)cov(Z)=E[(ZE(Z))(ZE(Z))T]=E[ZZT](E[Z])(E[Z])T

如下是几个二维高斯分布的概率密度图形示例

左边图形:均值为零向量 (2X1 的零向量),协方差矩阵 Σ=I(2X2 的单位矩阵)。这是一个标准正态分布。中间图形:均值为零向量,协方差矩阵为 Σ=0.6I。右边图形:均值为零向量,协方差矩阵为 Σ=2I

均值都为 0,协方差矩阵如下

(7)Σ=[1001];Σ=[10.50.51];Σ=[10.80.81]

固定 Σ=I,均值如下
(8)μ=[10];μ=[0.50];μ=[11.5];

高斯判别分析模型

使用多维正态分布对 p(x|y) 建模,模型如下
(9)yBernoulli(ϕ)(10)x|y=0N(μ0,Σ)(11)x|y=1N(μ1,Σ)
对应的概率密度
(12)p(y)=ϕy(1ϕ)1y(13)p(x|y=0)=1(2π)n/2|Σ|1/2exp(12(xμ0)TΣ1(xμ0))(14)p(x|y=1)=1(2π)n/2|Σ|1/2exp(12(xμ1)TΣ1(xμ1))
这里的参数为:ϕ,Σ,μ0,μ1,注意协方差矩阵 Σ 只有一个。log 似然函数如下
(15)l(ϕ,μ0,μ1,Σ)=logi=1mp(x(i),y(i);ϕ,μ0,μ1,Σ)(16)=logi=1mp(x(i)|y(i);ϕ,μ0,μ1,Σ)p(y(i);ϕ)
通过最大化 l,得到参数值如下
(17)ϕ=1mi=1mIy(i)=1(18)μ0=i=1mIy(i)=0x(i)i=1mIy(i)=0(19)μ1=i=1mIy(i)=1x(i)i=1mIy(i)=1(20)Σ=1mi=1m(x(i)μy(i))(x(i)μy(i))T
该算法的执行情况如下图所示:这里有两个正态分布,它们有相同的协方差矩阵和不同的期望值,分别对应训练集中的两种分类。图中的直线表示预测的分界线 (p(y=1|x)=0.5),根据结果落在直线的哪一侧 (通过计算 p(y=1|x)p(y=0|x) 的值得到) 来预测为对应的分类

GDA 和逻辑回归

如果将 p(y=1|x;ϕ,Σ,μ0,μ1) 看做是 x 的函数,它可以表示为如下形式
(21)p(y=1|x;ϕ,Σ,μ0,μ1)=11+exp(θTx)
其中 θϕ,Σ,μ0,μ1 的函数。这和逻辑回归算法得到的函数形式一样。

事实上,如果 p(x|y) 服从多维正态分布,则 p(y|x) 是逻辑回归函数。相反,如果 p(y|x) 是逻辑回归函数,p(x|y) 不一定服从多维正态分布。也就是说 GDA 对数据集做了 (比逻辑回归) 更强的假设。如果实际情况和 GDA 的假设更相符,那么它的预测效果比逻辑回归要好,否则逻辑回归可能表现更好。这说明逻辑回归比 GDA 更稳定

朴素贝叶斯

和 GDA 不同的是,朴素贝叶斯算法中 x 是离散的。考虑邮件分类问题 (典型的文本分类问题),使用向量表示邮件,向量的长度等于词典的长度 (词典中的词来自所有的样本)。如果一封邮件包含词典中的第 i 个词,就把 xi 设置为 1,否则设置为 0,如下是一个示例

考虑使用多项分布模型表示 p(x|y),若词典容量是 50000,则 x(0,1)50000,输出有 250000 种可能,需要计算的参数会非常多

贝叶斯假设:给定 yx 是条件独立的。例如 y=1 表示垃圾邮件,“buy” 是第 2087 个单词,“price” 是第 39831 个单词,该假设认为:已知 y=1 的情况下,x2087x39831 相互之间没有影响,即 p(x2087|y)=p(x2087|y,x39831)
(22)p(x1,x50000|y)=p(x1|y)p(x2|y,x1)p(x3|y,x1,x2)p(x50000|y,x1,,x49999)(23)=p(x1|y)p(x2|y)p(x3|y)p(x50000|y)(24)=i=1np(xi|y)
第一个等式可根据条件概率性质推导,证明两边相等只需要在等式两边分别乘以 p(y)。第二个等式使用了贝叶斯假设。尽管贝叶斯假设是一个很强的假设,实际上在很多问题的处理上表现很好。

我们的模型参数是:ϕi|y=1=p(xi=1|y=1)ϕi|y=0=p(xi=1|y=0)ϕy=p(y=1),可以得到联合似然函数如下
(25)L(ϕy,ϕi|y=0,ϕi|y=1)=i=1mp(x(i),y(i))
最大似然估计如下

对于新的样本,可以通过下式计算它的后验概率

拉普拉斯平滑

在使用朴素贝叶斯算法对新的邮件进行分类时,假设 “nips” 表示词典中第 35000 个单词,它在之前的样本中从未出现过,那么最大似然估计的参数

因为没有见过 “nips” 这个单词,导致两种类型概率均为 0。后验概率的计算结果为 00,使得无法对该邮件进行分类

考虑预估多项分布随机变量 z 的期望问题,其中 z 的取值范围为 {1,…,k},将其参数化为 ϕi=p(z=i),给定 m 个独立的观测结果 (样本)z(1),,z(m),则最大似然估计表示如下
(26)ϕj=i=1mI(z(i)=j)m
对该式应用拉普拉斯平滑可得
(27)ϕj=i=1mI(z(i)=j)+1m+k
回到邮件分类问题,应用拉普拉斯平滑后,条件概率的分子不再为 0

文本分类事件模型

前面讨论的贝叶斯分类模式是多元伯努利事件模型 (multi-variate Bernoulli event model),在该模型中,我们假定邮件的生成方式如下

  1. 随机决定发送垃圾邮件或非垃圾邮件 (p(y))
  2. 根据 p(xi=1|y)=ϕi|y 选择要加入的单词

这样最终发送邮件的概率可表示为 p(y)i=1np(xi|y)

多项式事件模型

使用 xi 表示邮件的第 i 个单词,它的取值范围是 {1,…,|V|},其中 | V | 是词典中单词的个数。包含 n 个单词的邮件可以用长度为 n 的向量 (x1,x2,,xn)注意不同邮件的对应的 n 的大小也不相同。在该模型下假定邮件的生成方式如下

  1. 随机决定发送垃圾邮件或非垃圾邮件 (p(y)),这与多元伯努利事件模型相同
  2. 然后根据多项式分布模型选择 x1(p(x1|y))
  3. 再通用根据多项式分布模型独立于 x1 选择 x2
  4. 依次选择其他单词,直到选完 n 个单词

最终邮件的概率可表示为 p(y)i=1np(xi|y)。这与前面讨论的模型看起来比较像,实际有很大不同,其中 xi|y 是多项式分布,而之前的是伯努利分布

在该模型中 ϕy=p(y)ϕi|y=1=p(xj=i|y=1)(对任意的 j)、ϕi|y=0=p(xj=i|y=0),注意对 j 的所有取值概率 p(xj|y=0) 均相等

给定训练集 {(x(i),y(i));i=1,,m},其中 x(i)=(x1(i),x2(i),,xni(i))(ni 表示第 i 个训练集的单词个数),则似然函数表示如下
(28)L(ϕ,ϕi|y=0,ϕi|y=1)=i=1mp(x(i),y(i))(29)=i=1m(j=1nip(xj(i)|y;ϕi|y=0,ϕi|y=1))p(y(i);ϕy)

最大似然估计如下

应用拉普拉斯平滑后结果如下