划分聚类
聚类是针对一堆没有类别属性的对象的,它把这一大堆对象分成一些小堆,并保证小堆内的对象之间彼此相似,小堆之间的对象彼此不同。划分聚类是聚类的一种,由它生成的小堆,小堆间没有一样的元素,大堆小堆之间关系和大集合与它的的分割一样。
Kmeans算法
设数据点(对象)的集合为:
{x1,x2,...,xn}
其中,
xi={xi1,xi2,...,xir}
是实数空间
Rr
中的向量,r是数据的属性数目。Kmeans算法把数据点集合划分成k个聚类;每个聚类有一个中心,中心是聚类中所有成员向量的均值;这就是算法名字的由来。算法的伪代码如下:
其中, k是指定的要生成的聚类数目,D是数据点集合。
从算法伪代码中可以看到,算法开始时,从数据点集合中任意选取k个点作为初始的聚类中心;然后开始迭代,直至满足迭代终止条件为止。每一次迭代,都计算每一个点到k个聚类中心的距离,把数据点分配给离自己最近的中心,得到k个聚类,然后根据k个聚类现有的成员计算新的聚类中心。终止条件可以是下面三个之一:
- 没有(或最小数目)数据点被重新分配给不同的聚类。
- 没有(或最小数目)聚类中心再发生变化。
- 误差平方和(Sum of Squares for Error, SSE)局部最下
SSE=∑kj=1∑x∈Cjdist(x,mj)2
其中,k表示需要的聚类数目, Cj 表示第j个聚类, mj 表示第j个聚类的聚类中心, dist(x,mj) 表示数据点和聚类中心间的聚类。
参考资料:
《Web数据挖掘》第2版,Bing Liu 著, 俞勇 译
《数据挖掘概念与技术》第3版,Jiawei Han,Micheline Kamber,Jian Pei 著,范明,孟小峰 译