K均值算法

K均值属于比较简单的聚类问题,所谓的聚类问题,就是给定一个元素集合D,其中每个元素具有n个可观察属性,使用某种算法将D分成K个子集,要求每个子集内部的元素之间的相异度尽可能的小,而不同子集的元素相异度尽可能的大。其中每一个子集叫做一个簇。

传统K均值的计算过程:

1.从D中随机取K个元素,作为K个簇的各自的中心。

2.计算剩下的元素到各个中心点的相异度(一般按照欧式距离的远近),将这些元素归纳到相异度最低的簇。

3.根据聚类结果,重新计算K个簇各自的中心,计算方法是取簇中所有元素各自维度的算数平均数(一般为簇内所有元素点到簇中心的距离和的平均数)。

4.将D中所有的元素按照新的中心重新聚类。

5.重复第4步,直到聚类结果不再变化。

6.将结果输出。

K-Means++算法

K-Means主要有两个最重大的缺陷------都和初始值有关:

(1)K是事先给定的,这个K值的选定是非常难以估计的。很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。

(2)K-Means算法需要用初始随机种子点来搞,这个随机种子点太重要,不同的随机种子点会有得到完全不同的结果。

K-Means++算法步骤:

1.先从数据集D中随机挑选一个点当“种子点”。

2.对于每个点,我们都计算其和最近的一个“种子点”的距离D(x)并保存在一个数组里,然后把这些距离加起来得到Sum(D(x))。

3,然后,再取一个随机值,用权重的方式来取计算下一个“种子点”。这个算法的实现是,先取一个能落在Sum(D(x))中的随机值Random,然后用Random-=D(x),直到其《=0,此时的点就是下一个“种子点”。

4.重复第2,3步直到所有的K个种子点都被选出来。

5.进行K-Means算法。

关于K值选取的问题:

聚类数的确定没有个确切的方法。

K值可以先用系统聚类法,看谱系图然后得出大致分几类。然后多试几个K值,确定个最好的。

系统聚类法见链接:http://www.cnblogs.com/yangmier/archive/2012/04/09/2438447.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值