K-MEANS算法
来源:互联网 发布:淘宝云客服登录网址 编辑:程序博客网 时间:2024/05/20 16:32
特征提取方法
1.直方图(Histegram)
2.聚类(Clustering)
• 目标:找出混合样本集中内在的组群关系
• 把一个对象集合分组或分割为子集或类,使得
• 类内对象之间的相关性高 • 类间对象之间的相关性差
常用算法:*
* K-means
* EM算法
* Mean shift
* 谱聚类
* 层次聚
1, K-means算法原理与实现:
1.1 算法接受参数K ; 然后将事先输入的N个数据对象划分为K个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高,而不同聚类中的对象相似都较小。
1.2 算法思想:
以空间中K个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到聚类结果
1.3 算法描述:
(1) 适当选择 C 个类的初始中心;
(2) 在第 K 次迭代中,对任意一个样本,求其到 C 各中心的距离,将该样本归到距离最短的中心所在的类;
(3) 利用均值等方法更新该类的中心值;
(4) 对于所有的 C 个聚类中心,如果利用 (2)(3)的迭代法更新后,值保持不变,则迭代结束,否则继续迭代。
1.4 算法流程: 输入: K data[n]; (1) 选择 K 个初始中心点, 例如 c[0] = data[0],....c[k-1]=data[k-1]; (2) 对于data[0].......data[n],分别与从c[0]...c[k-1]比较,假定与c[i]差值最少,就标记为 i ; (3) 对于多有标记为 i 点,重新计算c[ i ]={所有标记为i的data[j]之和}/标记为i的个数 (4) 重复2,3;直到所有c[i]值的变化小于给定阈值。
1.5 例子说明:
* 首先输入k的值,即我们希望将数据集经过聚类得到k个分组。
* 从数据集中随机选择k个数据点作为初始大哥(质心,Centroid)
对集合中每一个小弟,计算与每一个大哥的距离(距离的含义后面会讲),离哪个大哥距离近,就跟定哪个大哥。
* 这时每一个大哥手下都聚集了一票小弟,这时候召开人民代表大会,每一群选出新的大哥(其实是通过算法选出新的质心)。
* 如果新大哥和老大哥之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,算法终止。
如果新大哥和老大哥距离变化很大,需要迭代3~5步骤。
例子说明:
我搞了6个点,从图上看应该分成两推儿,前三个点一堆儿,后三个点是另一堆儿。现在手工执行K-Means,体会一下过程,同时看看结果是不是和预期一致。
1.选择初始大哥:
我们就选P1和P2
2.计算小弟和大哥的距离:
P3到P1的距离从图上也能看出来(勾股定理),是√10 = 3.16;P3到P2的距离√((3-1)^2+(1-2)^2 = √5 = 2.24,所以P3离P2更近,P3就跟P2混。同理,P4、P5、P6也这么算,如下:
P3到P6都跟P2更近,所以第一次站队的结果是:
组A:P1
组B:P2、P3、P4、P5、P6
3.人民代表大会:
组A没啥可选的,大哥还是P1自己
组B有五个人,需要选新大哥,这里要注意选大哥的方法是每个人X坐标的平均值和Y坐标的平均值组成的新的点,为新大哥,也就是说这个大哥是“虚拟的”。
因此,B组选出新大哥的坐标为:P哥((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2,5.6)。
综合两组,新大哥为P1(0,0),P哥(6.2,5.6),而P2-P6重新成为小弟
4.再次计算小弟到大哥的距离:
这时可以看到P2、P3离P1更近,P4、P5、P6离P哥更近,所以第二次站队的结果是:
组A:P1、P2、P3
组B:P4、P5、P6(虚拟大哥这时候消失)
5.第二届人民代表大会:
按照上一届大会的方法选出两个新的虚拟大哥:P哥1(1.33,1) P哥2(9,8.33),P1-P6都成为小弟
6.第三次计算小弟到大哥的距离:
这时可以看到P1、P2、P3离P哥1更近,P4、P5、P6离P哥2更近,所以第二次站队的结果是:
组A:P1、P2、P3
组B:P4、P5、P6
我们发现,这次站队的结果和上次没有任何变化了,说明已经收敛,聚类结束,聚类结果和我们最开始设想的结果完全一致。
优点:速度快,简单
缺点:最终结果跟初始点选择相关,容易陷入局部最优,需直到k值
1.6 K-Means的细节问题
1, K值怎么定?我怎么知道应该几类?
答:这个真的没有确定的做法,分几类主要取决于个人的经验与感觉,通常的做法是多尝试几个K值,看分成几类的结果更好解释,更符合分析目的等。或者可以把各种K值算出的SSE(也就是误差平方和)做比:最常用的方法是随机选,初始质心的选取对最终聚类结果有影响,因此算法一定要多执行几次,哪个结果更reasonable,就用哪个结果。
优化方法:
第一种是选择彼此距离最远的点,具体来说就是先选第一个点,然后选离第一个点最远的当第二个点,然后选第三个点,第三个点到第一、第二两点的距离之和最小,以此类推。
第二种是先根据其他聚类算法(如层次聚类)得到聚类结果,从结果中每个分类选一个点。
3, K-Means会不会陷入一直选质心的过程,永远停不下来?
答:不会,有数学证明K-Means一定会收敛,大致思路是利用SSE的概念(也就是误差平方和),即每个点到自身所归属质心的距离的平方和,这个平方和是一个函数,然后能够证明这个函数是可以最终收敛的函数。
4,判断每个点归属哪个质心的距离怎么算?
答:
第一种,欧几里德距离:这个距离就是平时我们理解的距离,如果是两个平面上的点,也就是(X1,Y1),和(X2,Y2),那这俩点距离是多少初中生都会,就是√( (x1-x2)^2+(y1-y2)^2) ,如果是三维空间中呢?√( (x1-x2)^2+(y1-y2)^2+(z1-z2)^2 ;推广到高维空间公式就以此类推。
5, 每一轮迭代如何选出新的质心?
答:各个维度的算术平均,比如(X1,Y1,Z1)、(X2,Y2,Z2)、(X3,Y3,Z3),那就新质心就是【(X1+X2+X3)/3,(Y1+Y2+Y3)/3,(Z1,Z2,Z3)/3】,这里要注意,新质心不一定是实际的一个数据点。3,(Z1,Z2,Z3)/3】,这里要注意,新质心不一定是实际的一个数据点。
[1] http://www.jianshu.com/p/fc91fed8c77b
- K-means算法补充:K-means++
- k-means算法
- K-MEANS算法
- K-MEANS算法
- K-means算法
- k-means算法
- K-Means 算法
- K-Means 算法
- 深入浅出K-Means算法
- 聚类:K-means算法
- K-Means 算法
- k-means 算法
- 深入浅出K-Means算法
- K-Means 算法
- 深入浅出K-means算法
- 深入浅出K-Means算法
- k means算法入门
- K-means算法
- 神奇的BFC
- 敏捷宣言遵循的原则
- 彻底弄懂HTTP缓存机制及原理
- 波特率与比特率的关系
- SpringMVC源码分析(二)从框架设计说起
- K-MEANS算法
- 如何使用Dockerfile构建Docker镜像
- UDP通信
- java夯实基础-运算符
- 算式表达式
- mpls vpn
- Java并发之AQS详解
- Redis 键(key)
- MySQL之where查询