聚类1-K-means-EM算法
2016-03-03 16:17
405 查看
转自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算法的存在的。
两个步骤又是迭代完成,很多前辈喜欢称此类问题为鸡蛋悖论,先有鸡还是先有蛋呢?
管你先有鸡还是先有蛋,只要蛋生鸡,鸡生蛋这个循环还一直存在着。我们就能一直有肉吃。
记忆力太差了,很多东西之前研究过的,然后又忘了。然后又得重新看。浪费时间。所以,现在就把一些东西做个归纳,总结。一来方便自己日后回看,二来把之前零零散散的知识点串一串。写什么内容,估计也不是按照课本来的。就是乱写,内容是乱写,顺序也是乱序。现在文章比较少,估计以后文章多起来了可能会根据逻辑对他们排个序把。那个还很长远,先认真写好这篇吧。
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算法的存在的。
两个步骤又是迭代完成,很多前辈喜欢称此类问题为鸡蛋悖论,先有鸡还是先有蛋呢?
管你先有鸡还是先有蛋,只要蛋生鸡,鸡生蛋这个循环还一直存在着。我们就能一直有肉吃。
相关文章推荐
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
- 建立简单的链表
- 知乎日报:她把全世界的学术期刊都黑了
- 连接点和线路点的区别
- iOS开发-swift基础学习二
- Java中的JavaCore/HeapDump文件及其分析方法
- docker新建自定义网桥,实现不同主机容器互联
- docker新建自定义网桥,实现不同主机容器互联
- 制作Ubuntu deb包的三种方法
- STM32中的PWM的频率和占空比的设置
- Axis2 start guide
- hibernate HQL查询几种参数绑定
- 求满足条件的行数据相减求差值问题
- Git 常用命令大全
- OpenDaylight安装使用
- C++ 128位 AES加密算法
- php连接mysql类PDO从php5才开始有
- Swift Release模式下屏蔽NSLog()
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
- android中下载加速