聚类1-K-means-EM算法

来源:互联网 发布:淘宝女运动服套装冬款 编辑:程序博客网 时间:2024/05/21 17:37

转自http://blog.csdn.net/lvhao92/article/details/50788380

记忆力太差了,很多东西之前研究过的,然后又忘了。然后又得重新看。浪费时间。所以,现在就把一些东西做个归纳,总结。一来方便自己日后回看,二来把之前零零散散的知识点串一串。写什么内容,估计也不是按照课本来的。就是乱写,内容是乱写,顺序也是乱序。现在文章比较少,估计以后文章多起来了可能会根据逻辑对他们排个序把。那个还很长远,先认真写好这篇吧。

OK,聚类是属于“无监督学习”(unsupervised learning)中的一种,何为无监督,就是样本标签信息是未知的,训练的时候,你只能看见他们的特性而不知道他们类别。

聚类的方法也有很多,我就不多说了,因为我也不懂。

今天就给大家好好聊聊其中一个比较经典的聚类K-means。

首先,我们用k-means的时候会先告诉算法希望生成的聚类数量,然后算法会根据数据的结构来确定聚类的大小从而达到分类的效果。

我直接口述一下K-means的算法流程吧。

1)随机确定K个中心位置。

2)将各个数据项分配给最邻近的中心点。

3)分配完成后,聚类中心会移到该类所有节点的平均位置处。

4)重复2)和3)直至结果不再变化。

这个过程很简单,但是为什么要用迭代的思想去完成这个任务?让我们先来看看下面这个公式。

(1)这个就是K类数据到中心点的距离之和。而,我们上面这四个步骤希望求的也就是想要使得这个公式最小。

要知道,如果不采用迭代的思想去最小化这个式子是非常困难的,因为这是一个NP难问题,所以K-means采用了贪心策略,通过迭代优化来近似求解。

这是一个k-means的演示,大家可以试一试:http://home.dei.polimi.it/matteucc/Clustering/tutorial_html/AppletKM.html

代码就不写了,比较的简单。

恩,接下来,稍微提一下世界十大算法之一的EM算法。这里只是简单的提一下,只是想看看EM算法和k-means算法的某种关系~后面会有博文详细对它进行描述的。

好了,简单的语言描述一下EM算法:这是一个两个步骤交替计算的算法,第一步是期望(E)步,利用当前已知参数值来估计最优隐变量的值。第二步是最大化(M)步,就是寻找能使E步期望似然最大化的参数。然后,新的参数值重新被用于E步,直到收敛到局部最优解。

回头来看k-means,这里我们的已知变量就是各个类的中心点ui,而隐变量就是物体的标签类别Ci,这是我们不知道的(毕竟无监督)。一开始我们会根据随机确定的中心点位置(已知变量)来确定他们的类别(隐变量)。这是不是有点类似EM的E步,根据已知参数来估计最优隐参数(类别)。

一旦确定了类别之后,k-means就会将聚类中心转移到该类所有节点的平均处,这么做的原因就是使得公式(1)最小,公式(1)可不可以理解成成本函数最小?是不是类似于极大似然估计(寻求满足式子最优化时候的参数)?所以这一步是不是又和EM算法里面的M步类似?寻求能使E步期望似然最大化的参数。而我们这里就是寻求能使所有点距离最小的聚类中心点位置(已知参数)。

然后二者都是开开心心的迭代完成上面的两步。

所以k-means的血液里是有EM算法的存在的。

两个步骤又是迭代完成,很多前辈喜欢称此类问题为鸡蛋悖论,先有鸡还是先有蛋呢?

管你先有鸡还是先有蛋,只要蛋生鸡,鸡生蛋这个循环还一直存在着。我们就能一直有肉吃。




0 0
原创粉丝点击