您的位置:首页 > 其它

机器学习(八)——在线学习、K-Means算法、混合高斯模型和EM算法

2016-11-07 10:36 549 查看
http://antkillerfarm.github.io/

贝叶斯统计和规则化(续)

p(θ|S)可由前面的公式得到。

假若我们要求期望值的话,那么套用求期望的公式即可:

E[y|x,S]=∫yyp(y|x,S)dy

由上可见,贝叶斯估计将θ视为随机变量,θ的值满足一定的分布,不是固定值,我们无法通过计算获得其值,只能在预测时计算积分。

上述贝叶斯估计方法,虽然公式合理优美,但后验概率p(θ|S)通常是很难计算的,因为它是θ上的高维积分函数。

观察p(θ|S)的公式,在分母P(S)一定的情况下,分子越大则值越大,也就是p(θ|S)的概率越大。

因此,可得如下算法:

θMAP=argmaxθ(∏i=1mp(y(i)|x(i),θ))p(θ)

这个算法叫做最大后验概率估计(maximum a posteriori)。

和ML相比,MAP算法只是在最后多了一项p(θ)。通常使用中,我们认为p(θ)符合θ∼N(0,τ2I)。

由于p(θ)实际上就是先验分布,它会对最后结果进行一定的修正。因此,实际上最大后验概率估计相对于最大似然估计来说,较容易克服过度拟合的问题。



参见:

http://www.cs.cornell.edu/courses/cs5540/2010sp/lectures/Lec9.Estimation-continued.pdf

在线学习

我们之前讨论的算法,都是给定一个训练集S,经训练之后,得到预测函数h,然后再在新的样本集上进行预测。这种方法被称为批量学习(batch learning)。

与之相对的,还有一种边学习边预测的在线学习(online learning)算法。其步骤如下:

1.i:=0。

2.输入x(i),算法预测y(i)。

3.根据y(i)的真实值,修正算法模型。这一步也被称作更新过程(update procedure)

4.令i:=i+1,以处理下一个数据样本。

在线学习的优点:

1.算法在学习过程中,即可预测。

2.随着数据样本的增多,预测会更加准确,即具有自我完善的的能力。

下面以感知器(perceptron)算法为例,讨论一下在线学习的误差问题。

首先回忆一下感知器算法:

hθ(x)=g(θTx),y∈{1,−1}

g(z)={1,−1,z≥0z<0

对于训练样本(x,y),其更新过程为:

θ:={θ,θ+yx,hθ(x)=yotherwise(1)

这里给出一个和感知器算法有关的定理:

对于给定的m个样本序列(注意“序列”二字,在线算法对于样本的顺序是敏感的)x(i),如果所有的∥x(i)∥≤D,并且存在单位向量u,使得所有样本的y(i)(uTx(i))≥γ,则感知器算法在该序列上的预测错误个数最多为(D/γ)2。

这个定理是Henry David Block和Albert B. J. Novikoff于1962年提出的。

注:Henry David Block,1920~1978,美国数学家。

这个人的经历有点非典型。20岁本科毕业,由于专业是文学和心理学,结果找不到工作。只好回炉,又读了个土木工程的本科。

二战期间在Goodyear的飞机工厂(没错就是那个卖轮胎的Goodyear)担任测试工程师。在那里碰到一个当医生的英国妹子,搞定之。

1946年,他老婆在Iowa State University获得了一个职位,于是他也跟着搬了过去。估计是无所事事,他经常到大学里蹭课,然后就发现自己对数学很感兴趣。

于是继续读书,1949年拿到博士学位。经过几年助教生涯之后,最终成为康奈尔大学应用数学教授。

话说,根据缩写找人真是太痛苦了,很多资料都不是你要找的人,Block又是个大路货。我最后是在他的一位同事的论文中找到他的全名的。那篇论文发表于1985年,距离他去世已经7年,但他仍是作者之一,可见人缘不错。

Albert B. J. Novikoff,全名不详,只知道是纽约大学教授。从岁数来看应该已经退休了。

下面给出这个定理的证明过程:

由公式1可知,θ的值只有在发生预测错误的时候才会改变,因此我们可以使用θ(k)表示第k个错误。同时令θ1=0。

根据更新公式可得:

(θ(k+1))Tu=(θ(k))Tu+y(i)(x(i))Tu≥(θ(k))Tu+γ

所以:

(θ(2))Tu≥(θ(1))Tu+γ=γ

(θ(3))Tu≥(θ(2))Tu+γ≥2γ

由数学归纳法可得:

(θ(k+1))Tu≥kγ(2)

另外,

∥θ(k+1)∥2=∥θ(k)+y(i)x(i)∥2=∥θ(k)∥2+∥y(i)x(i)∥2+2y(i)(x(i))Tθ(k)

由感知器算法的定义可得:

y(i)(x(i))Tθ(k)≤0

所以:

∥θ(k+1)∥2≤∥θ(k)∥2+∥x(i)∥2≤∥θ(k)∥2+D2

同样,由数学归纳法可得:

∥θ(k+1)∥2≤kD2(3)

因为:

(θ(k+1))Tu=∥θ(k+1)∥⋅∥u∥⋅cosϕ≤∥θ(k+1)∥⋅∥u∥=∥θ(k+1)∥(4)

由公式2、3、4可得:

k√D≥∥θ(k+1)∥≥(θ(k+1))Tu≥kγ

所以:

k≤(D/γ)2

K-Means算法

聚类算法属于无监督学习算法的一种。它的训练样本中只有x(i),而没有y(i)。聚类的目的是找到每个样本x潜在的类别y,并将同类别y的样本x放在一起,形成一个聚类(clusters)。样本x(i)所属的聚类用c(i)表示。

K-Means算法的步骤如下:

1.随机选取k个聚类质心点(cluster centroids)μ1,…,μk

2.重复下面过程直到收敛 {

对于每一个样例i,计算其应该属于的聚类:c(i):=argminj∥x(i)−μj∥2

对于每一个聚类j,重新计算该聚类的质心:μj:=∑mi=11{c(i)=j}x(i)∑mi=11{c(i)=j}。

}

其中,k是我们事先定义的聚类个数。下图展示了对n个样本点进行K-means聚类的效果,这里k取2。



K-means算法面对的第一个问题是如何保证收敛。前面的算法中强调结束条件就是收敛,可以证明的是K-means完全可以保证收敛性。下面我们定性的描述一下收敛性,我们定义畸变函数(distortion function)如下:

J(c,μ)=∑i=1m∥x(i)−μc(i)∥2

J函数表示每个样本点到其质心的距离平方和。K-means算法的目的是要将J调整到最小。假设当前J没有达到最小值,那么首先可以固定每个类的质心μj,调整每个样例的所属的类别c(i)来让J函数减小,同样,固定c(i),调整每个类的质心μj,也可以使J减小。 这两个过程就是内循环中使J单调递减的过程。当J递减到最小时,μ和c也同时收敛。(在理论上,可以有多组不同的μ和c值,能够使得J取得最小值,但这种现象实际上很少见。)

由于畸变函数J是非凸函数,意味着我们不能保证算法取得的最小值是全局最小值,也就是说k-means对质心初始位置的选取比较敏感。但一般情况下k-means达到的局部最优已经满足需求。但如果你怕陷入局部最优,那么可以选取不同的初始值跑多遍k-means,然后取其中最小的J对应的μ和c输出。

参考:

http://www.csdn.net/article/2012-07-03/2807073-k-means

http://www.cnblogs.com/leoo2sk/archive/2010/09/20/k-means.html

http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006910.html

高斯混合模型和EM算法

本篇讨论使用期望最大化算法(Expectation-Maximization)进行密度估计(density estimation)。

从上面的讨论可以形象的看出,聚类问题实际就是在数据集上,找出一个个数据密度较高的“圆圈”。我们可以反过来思考这个问题:如果我们已知圆圈的圆心和半径,那么也可以根据圆心、半径以及样本分布模型,来随机生成这些数据。显然,这和前一种做法在效果上是等效的。

首先我们假设样本数据满足联合概率分布

p(x(i),z(i))=p(x(i)|z(i))p(z(i))(5)

其中,z(i)∼Multinomial(ϕ)(这里的ϕj=p(z(i)=j),因此ϕj≥0,∑kj=1ϕj=1),z(i)的值为k个聚类之一。

假定x(i)|z(i)=j∼N(μj,Σj),则该模型被称为高斯混合模型(mixture of Gaussians model)。

整个模型简单描述为对于每个样例x(i),我们先从k个类别中按多项分布抽取一个z(i),然后根据z(i)所对应的k个多值高斯分布中的一个生成样例x(i)。注意的是这里的z(i)是隐含的随机变量(latent random variables)。



因此,由全概率公式可得:

p(x(i);ϕ,μ,Σ)=∑z(i)=1kp(x(i)|z(i);μ,Σ)p(z(i);ϕ)(6)

该模型的对数化似然函数为:

ℓ(ϕ,μ,Σ)=∑i=1mlogp(x(i);ϕ,μ,Σ)=∑i=1mlog∑z(i)=1kp(x(i)|z(i);μ,Σ)p(z(i);ϕ)

这个式子的最大值不能通过求导数为0的方法解决的,因为它不是close form。(多项分布的概率密度函数包含阶乘运算,不满足close form的定义。)

为了简化问题,我们假设已经知道每个样例的z(i)值。这实际上就转化成《机器学习(二)》所提到的GDA模型。和之前模型的区别在于,z(i)是多项分布,而且每个聚类的Σ都不相同,但结论是类似的。

这里的直接推导非常复杂,可参考以下文章:

http://www.cse.psu.edu/~rtc12/CSE586/lectures/EMLectureFeb3.pdf

上面这篇文章比较直观,比Andrew讲义的Problem Set详细的多。然而Andrew这样写是有原因的,在后面的章节,借助Jensen不等式,Andrew给出一个更简单且一般化的推导过程。

接下来的问题就是:z(i)的值我们是不知道的,该怎么办呢?

EM算法的思路是:

1.猜测z(i)的值。(这一步即所谓的Expectation,简称E-Step。)

2.最大化计算,以更新模型的参数。(这一步即所谓的Maximization,简称M-Step。)

具体到这里就是:

Repeat until convergence {

(E-step) For each i, j:

w(i)j:=p(z(i)=j|x(i);ϕ,μ,Σ)

(M-step) Update the parameters:

ϕj:=1m∑mi=1w(i)j

μj:=∑mi=1w(i)jx(i)∑mi=1w(i)j

Σj:=∑mi=1w(i)j(x(i)−μj)(x(i)−μj)T∑mi=1w(i)j

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机器学习
相关文章推荐