0

机器学习(十)——K-Means算法

 2 years ago
source link: http://antkillerfarm.github.io/ml/2016/09/05/Machine_Learning_10.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

机器学习(十)——K-Means算法

2016-09-05

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

因为预测样本集和训练样本集的分布是独立的,因此上式又可写为:

p(y∣x,S)=∫θp(y∣x,θ)p(θ∣S)dθ

这个公式又被称作后验预测分布(Posterior predictive distribution)。

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

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

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

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

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

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

因此,可得如下算法:

θMAP=arg⁡maxθ(∏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

Statistical Estimation: Least Squares, Maximum Likelihood and Maximum A Posteriori Estimators

https://mp.weixin.qq.com/s/XnsbCb7H9jHmJ4dV9p2Oug

频率学派还是贝叶斯学派?聊一聊机器学习中的MLE和MAP

https://mp.weixin.qq.com/s/dQxN46wEbFrpvV369uOHdA

详解最大后验概率估计(MAP)的理解

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):=arg⁡minj‖x(i)−μj‖2
对于每一个聚类j,重新计算该聚类的质心:μj:=∑i=1m1{c(i)=j}x(i)∑i=1m1{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

深入浅出K-Means算法

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

k均值聚类(K-means)

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

K-means聚类算法

https://mp.weixin.qq.com/s/86MlCMKAG0ax3gvfsgmYtg

K-Means聚类算法详解

https://mp.weixin.qq.com/s/Sl3lTS1zvq0BgAayAUcOXg

K-Means实战与调优详解

https://mp.weixin.qq.com/s/6ErpBtVg0r2dhsBGbIkvDg

Bisecting K-Means算法

https://mp.weixin.qq.com/s/oAvNzxENTfaxUkSRypCo1g

K-Means算法的10个有趣用例

https://zhuanlan.zhihu.com/p/45408671

K-Means小谈

聚类结果的评价

可考虑用以下几个指标来评价聚类效果:

1.聚类中心之间的距离。距离值大,通常可考虑分为不同类。

2.聚类域中的样本数目。样本数目少且聚类中心距离远,可考虑是否为噪声。

3.聚类域内样本的距离方差。方差过大的样本可考虑是否属于这一类。

Elbow Method

K-means算法中,K值的选取除了依赖领域知识之外,还可以采用Elbow Method(肘部原则)来确定。

上图中的蓝线是畸变率,数值越低越好,而绿线是计算时间,也是数值越低越好。可以看出K=8的时候,效果最佳。实际上即使只有一根线,我们也可以判断K取值的优劣:折线的斜率在K=8处,变化较大,形如人的肘部,故名。

https://www.scikit-yb.org/en/latest/api/cluster/elbow.html

Elbow Method

https://bl.ocks.org/rpgove/0060ff3b656618e9136b

Using the elbow method to determine the optimal number of clusters for k-means clustering

高斯混合模型和EM算法

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

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

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

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

其中,z(i)∼Multinomial(ϕ)(这里的ϕj=p(z(i)=j),因此ϕj≥0,∑j=1kϕ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)。

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

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

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

ℓ(ϕ,μ,Σ)=∑i=1mlog⁡p(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:

wj(i):=p(z(i)=j∣x(i);ϕ,μ,Σ)

(M-step) Update the parameters:

ϕj:=1m∑i=1mwj(i)
μj:=∑i=1mwj(i)x(i)∑i=1mwj(i)
Σj:=∑i=1mwj(i)(x(i)−μj)(x(i)−μj)T∑i=1mwj(i)

E-Step中,根据贝叶斯公式可得:

p(z(i)=j∣x(i);ϕ,μ,Σ)=p(x(i)∣z(i)=j;μ,Σ)p(z(i)=j;ϕ)∑l=1kp(x(i)∣z(i)=l;μ,Σ)p(z(i)=l;ϕ)

将假设模型的各概率密度函数代入上式,即可计算得到wj(i)。

相比于K-means算法,GMM算法中的z(i)是个概率值,而非确定值,因此也被称为soft assignments。

K-means算法各个聚类的特征都是一样的,也就是“圆圈”的半径一致。而GMM算法的“圆圈”半径可以不同。如下面两图所示:

K-means算法 GMM算法

注意:这里的圆圈是先验估计值,它和最后的聚类形状无关。

GMM算法结果也是局部最优解。对其他参数取不同的初始值进行多次计算同样适用于GMM算法。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK