概述
本篇博客主要是网易公开课上吴恩达教授讲解的机器学习视频中关于高斯判别分析的相关内容(网址为:http://open.163.com/movie/2008/1/A/R/M6SGF6VB4_M6SGHMFAR.html)。视频中主要讲解了两种生成学习算法——高斯判别分析(GDA)和朴素贝叶斯(NB)。但是自己即将学习语音识别,组要设计高斯混合标模型、隐马尔科夫模型等。因此英文讲义上的朴素贝叶斯和拉普拉斯平滑的内容计算和视频第六讲讲义合在一起。在这篇博客中主要是第原版英文讲义的翻译,但也补充了原文中省略推导过程的数学公式。同时,为方便阅读,我已经将博客相关内容pdf文件上传CSDN了,如有需要移步:斯坦福机器学习笔记(三)—— 高斯判别分析(GDA)。高斯判别分析(GDA)的Python代码请移步:高斯判别分析(GDA)Python代码
前记
到目前为止,我们主要讨论了对
p(y|x;θ)
建模的学习算法,即给定
x
的
y
的条件分布。 例如,Logistic回归将
p(y|x;θ)
建模为
hθ(x)= g(θTx)
,其中
g
是Sigmoid函数。 在这份笔记中,我们将讨论一种不同类型的学习算法。
考虑一个分类问题,我们希望根据动物的某些特征来学习区分大象
(y=0)
和狗
(y=1)
。 给定训练集,像Logistic回归或基本感知器算法之类算法试图找到一条决定边界的直线,从而将大象和狗分开。然后,为了将新动物分类为大象或狗,该算法检查这个样本落在边界的哪一侧,并相应地进行预测。
现在介绍一种不同的方法。首先,看大象,我们可以建立一个大象样子的模型。 然后,看着狗,我们也可以单独建立一个狗的样子的模型。最后,为了对新动物进行分类,我们可以将新动物与大象模型相匹配,并将其与狗模型相匹配,以查看新动物是更像我们在训练集中看到的大象还是狗。
尝试直接学习
p(y|x)
的算法(例如逻辑回归),或试图学习直接将输入
X
的空间映射到标签
{0,1}
的算法(例如感知器算法)是称为判别学习算法。 在这里,我们将讨论算法,而是试图直接对
p(x|y)
(和
p(y)
)建模。这些算法称为生成学习算法。 例如,如果
y
指示样本是狗(0)还是大象(1),则
p(x|y=0)
对狗的特征的分布进行建模,并且
p(x|y=1)
对大象特征的分布进行建模。
在对
p(y)
称为类先验)和
p(x|y)
进行建模之后,我们的算法可以使用贝叶斯规则在给定
x
的
y
上推导出后验分布:
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(x|y)
和
p(y)
表示。 实际上,如果为了进行预测而计算
p(y|x)
,那么我们实际上并不需要计算分母,因为:
argmaxyp(y|x)=argmaxyp(x|y)p(y)p(x)=argmaxyp(x|y)p(y)(1)(2)
其中
p(y)
服从均匀分布,即
p(y=0)=p(y=1)
。
一 高斯判别分析
我们将看到的第一个生成学习算法是高斯判别分析(GDA)。在这个模型中,我们假设
p(x|y)
是服从多元正态分布分布。在继续讨论GDA之前,让我们简单地谈谈多元正态分布的性质。
1.1 多元正态分布
n
维的多元正态分布,也称为多元高斯分布,均值向量
μ∈Rn
,协方差矩阵
∑∈Rn×n
,其中
∑≥0
,即是半正定对称矩阵。多元高斯分布也写成
N(μ,∑)
,其概率密度如下:
p(x;μ,∑)=1(2π)n2|∑|12exp(-12(x−μ)T∑-1(x−μ))(3)
在上面的等式中,
|∑|
表示矩阵
∑
的行列式。
对于服从
N(μ,∑)
的随机变量
X
,均值由
μ
给出:
E(X)=∫xxp(x;μ,∑)dx=μ(4)
同时,向量值随机变量
Z
的协方差定义为:
Cov(Z)=E[(Z−E[Z])(Z−E[Z])T](5)
这也描述了实随机变量方差的概念。协方差也可以定义为:
Cov(Z)=E[ZZT]−(E[Z])(E[Z])T(6)
如果
X∼N(μ,∑)
,那么:
Cov(Z)=∑(7)
以下是高斯分布密度的一些示例。上图最左边的图显示了一个均值为零(即
2×1
零向量)和协方差矩阵
∑=I
(
2×2
单位矩阵)的高斯分布,这样的高斯分布也称为标准正态分布。中间的图显示的为零均值和
∑=0.6I
的高斯分布。在最右边的图中显示为零均值和
∑=2I
。我们看到随着 变大,高斯变得更加“展开”(“矮胖”)。随着它变小,分布变得更加“压缩”(“瘦高”)。
让我们看一些更多的例子。下图显示高斯分布的均值为0,协方差矩阵依次分别为:
∑=(1001)∑=(10.50.51)∑=(10.80.81)(8)
最左边的图显示了熟悉的标准正态分布,我们看到随着
∑
非对角线条目的增加,其概率密度更加“压缩”了
45∘
。当我们处于相同的三个密度的轮廓时,我们可以更清楚地看到这一点:
下面是通过改变
∑
生成的最后一组示例:
上面的图分别使用了如下协方差矩阵:
∑=(1-0.5-0.51)∑=(1-0.8-0.81)∑=(30.80.81)(9)
从最左边和中间的图可以看出,我们看到通过减少协方差矩阵对角线的元素,密度在此变得更“压缩”,但方向相反。最后,随着我们改变参数,更多一般来说,轮廓将形成椭圆形(最右边的图形显示一个椭圆形例子)。
作为我们的最后一组示例,通过改变
μ
来固定
∑=I
,我们也可以移概率动密度的平均值。上图用
∑=I
生成,同时个图对应的协方差矩阵如下:
μ=(10)μ=(-0.50)μ=(-1-1.5)(10)
1.2 高斯判别分析模型
当我们有一个输入特征 是连续随机变量的分类问题时,我们可以使用高斯判别分析(GDA)模型,该模型使用多元正态分布对
p(x|y)
进行建模。这个模型如下:
y∼Bernoulli(ϕ)x|y=0∼N(μ0,∑)x|y=1∼N(μ1,∑)(11)
其中,
Bernoulli(ϕ)
表示的伯努利分布,即0-1分布或者二项分布。那么有:
p(y)=ϕy(1−ϕ)1−yp(x|y=0)=1(2π)n2|∑|12exp(-12(x−μ0)T∑-1(x−μ0))p(x|y=1)=1(2π)n2|∑|12exp(-12(x−μ1)T∑-1(x−μ1))(12)
这里,我们模型的参数是
ϕ
,
∑
,
μ0
和
μ1
(注意,虽然有两个不同的均值向量
μ0
和
μ1
,但这个模型应用最多仅使用相同的协方差矩阵
∑
,
μ0
和
μ1
(注意,虽然有两个不同的均值向量${{\mu )。对于给定数据的对数似然函数如下:
那么,结合式(1)对 求偏导有:
∂ℓ∂ϕ=∂∂ϕ(∑i=1mlogp(y(i);ϕ))=∂∂ϕ(∑i=1mlogp(y(i);ϕ))=∂∂ϕ(∑i=1mlogϕy(i)(1−ϕ)1−y(i))=∂∂ϕ(∑i=1m[y(i)logϕ+(1−y(i))log(1−ϕ)])=∑i=1my(i)ϕ−∑i=1m(1−y(i))1−ϕ(13)(14)(15)
令
∂ℓ∂ϕ=0
,我们可以得到:
ϕ=1m∑i=1m1{y(i)=1}(16)
同理有:
∂ℓ∂u0=∂∂u0[∑i=1m(1−y(i))logp(x(i)∣∣y(i)=0;μ0,μ1,∑)]=∂∂u0[∑i=1m(1−y(i))log1(2π)n2|∑|12exp(-12(x(i)−μ0)T∑-1(x(i)−μ0))]=∑i=1m(1−y(i))∑-1(x(i)−μ0)=0(17)(18)(19)
由于
∑
是对称矩阵,那么有:
∑i=1m(1−y(i))(x(i)−μ0)=∑i=1m(1−y(i))x(i)-∑i=1m(1−y(i))μ0=0(20)
计算求得:
μ0=∑i=1m1{y(i)=0}x(i)∑i=1m1{y(i)=0}(21)
同理可得:
μ1=∑i=1m1{y(i)=1}x(i)∑i=1m1{y(i)=1}(22)
对于协方差矩阵
∑
而言,我们有如下公式:
∂|∑|∂∑=|∑|∑-1∂∑-1∂∑= -∑-2(23)
那么我们有:
∑i=1my(i)logp(x(i)∣∣y(i)=1;μ0,μ1,∑)+∑i=1m(1−y(i))logp(x(i)∣∣y(i)=0;μ0,μ1,∑)=∑i=1my(i)log1(2π)n2|∑|12exp(-12(x(i)−μ1)T∑-1(x(i)−μ1))+∑i=1m(1−y(i))log1(2π)n2|∑|12exp(-12(x(i)−μ0)T∑-1(x(i)−μ0))=∑i=1m[-n2log2π−12log∣∣∑∣∣]−12∑i=1m(x(i)−μy(i))T∑-1(x(i)−μy(i))(24)(25)(26)(27)
那么结合式(2),对
∑
求偏导有:
∂ℓ∂∑=−m2∑−1+∑−22∑i=1m(x(i)−μy(i))(x(i)−μy(i))T=0(28)
那么,
∑=1m∑i=1m(x(i)−μy(i))(x(i)−μy(i))T(29)
从图中可以看出,高斯判别分析(GDA)算法的作用如下:
图中显示的是训练集,以及两个高斯分布的轮廓,这两个高斯分布已经适合两个类中的每个类中的数据。注意,两个高斯的轮廓虽然具有相同的形状和方向,在是因为它们共享协方差矩阵
∑
,但它们具有不同的均值
μ0
和
μ1
。图中还给出决策边界的直线,在这条直线上
p(y=1|x)=0.5
。在边界的一侧,我们预测
y=1
是最可能的结果,而另一方面,我们预测
y=0
。
1.3 讨论:GDA与Logistic回归
GDA模型与Logistic回归有着有趣的关系。如果我们将
p(y=1|x;ϕ,μ0,μ1,∑)
视为
x
的函数,我们会发现它可以表示为:
p(y=1|x;ϕ,μ0,μ1,∑)=p(x|y=1;ϕ,μ0,μ1,∑)p(y=1)p(x|y=1;ϕ,μ0,μ1,∑)p(y=1)+p(x|y=0;ϕ,μ0,μ1,∑)p(y=0)=ϕ(2π)n2|∑|12exp(-12(x−μ1)T∑-1(x−μ1))ϕ(2π)n2|∑|12exp(-12(x−μ1)T∑-1(x−μ1))+1−ϕ(2π)n2|∑|12exp(-12(x−μ0)T∑-1(x−μ0))=11+1−ϕϕexp[-12(μT0∑−1μ0−μT1∑−1μ1)+(μ0−μ1)∑−1x]=11+exp[-12(μT0∑−1μ0−μT1∑−1μ1)+log1−ϕϕ−(μ1−μ0)∑−1x]=11+exp(−θTx)(30)(31)(32)(33)(34)
其中,
(μ1−μ0)∑−1=(θ1,⋯,θm)-12(μT0∑−1μ0−μT1∑−1μ1)+log1−ϕϕ=θ0
同时在这里,
p(x|y)
是条件概率,
p(y)
是先验概率,
p(y|x)
是后验概率。
什么时候比起其中一种模型,我们更偏向用另一种模型?一般而言,利用相同的数据集进行训练后,GDA和Logistic回归会给出不同的决策边界。哪个更好呢?
我们认为如果
p(x|y)
服从多元高斯分布(相同的 ),那么
p(y|x)
必然遵循Logistic函数。然而,相反的情况并非如此;即
p(y|x)
是Logistic函数并不意味着
p(x|y)
服从多元高斯分布。这表明GDA比Logistic回归对数据做出更强的建模假设。事实证明,当这些建模假设正确时,GDA将找到更好的数据拟合,并且是更好的模型。具体来说,当
p(x|y)
确实服从是多元高斯(具有相同
∑
)时,则GDA是渐近有效的。非正式地说,这意味着在非常大的训练集(大
m
)的极限中,没有比GDA严格更好的算法(就他们估计 的准确程度而言)。 特别是可以证明,在这种情况下,GDA将是一种比Logistic回归更好的算法; 更一般地说,即使是小型训练集,GDA的效果也更好。
相反,通过做出明显较弱的假设,逻辑回归也更加具有鲁棒性,对不正确的建模假设也不那么敏感。有许多不同的假设会导致
p(y|x)
采用逻辑函数的形式。 例如,如果
x|y=0∼Poisson(λ0)
,并且
x|y=1∼Poisson(λ1)
,那么
p(y|x)
将是Logisti函数形式。 Logistic回归也可以很好地处理像这样服从Poisson分布的数据。但是如果我们在这样的数据上使用GDA并且将高斯分布拟合到这样的非高斯分布数据,那么结果将是不太可预测的,并且GDA可能(或可能不)表现良好。
总而言之:当建模假设正确或至少近似正确时,GDA做出更强的建模假设,并且有更多有效的数据时效果比Logistic回归好(即,只需更少的训练数据来“好”学习)。Logistic回归假设较弱,而且对建模假设要求不高,具有更好的鲁棒性。具体来说,当数据不服从高斯分布时,那么在大数据集下,Logistic回归几乎总是比GDA更好,更具有鲁棒性。 因此在实践中,Logistic回归比GDA更常用。
个人理解,根据大数定律,当数据量极大时,数据将会无限逼近高斯分布,这时GDA将比Logistic回归效果更好。从某种程度上说,GDA可以看成是Logistic回归在数据服从在高斯分布时的一个特例,而Logistic回归则使用任何数据集,不管数据是否服从高斯分布,Logistic回归是GDA的一个推广。