k均值聚类(k-means clustering)算法思想起源于1957年Hugo Steinhaus[1],1967年由J.MacQueen在[2]第一次使用的,标准算法是由Stuart Lloyd在1957年第一次实现的,并在1982年发布[3]。简单讲,k-means clustering是一个根据数据的特征将数据分类为k组的算法。k是一个正整数。分组是根据原始数据与聚类中心(cluster centroid)的距离的平方最小来分配到对应的组中。
例子:假设我们有4个对象作为训练集,每个对象都有两个属性见下。可根据x,y坐标将数据表示 在二维坐标系中。
object | Atrribute 1 (x): weight index |
Attribute 2 (Y): pH |
Medicine A | 1 | 1 |
Medicine B | 2 | 1 |
Medicine C | 4 | 3 |
Medicine D | 5 | 4 |
表一 原始数据
并且我们知道这些对象可依属性被分为两组(cluster 1和cluster 2)。问题在于如何确定哪些药属于cluster 1,哪些药属于cluster 2。
k-means clustering实现步骤很简单。刚开始我们需要为各个聚类中心设置初始位置。我们可以从原始数据中随机取出几个对象作为聚类中心。然后k means算法执行以下三步直至收敛(即每个对象所属的组都不改变)。
1.确定中心的坐标
2.确定每个对象与每个中心的位置
3.根据与中心位置的距离,每个对象选择距离最近的中心归为此组。
图1 k means流程图
对于表1中的数据,我们可以得到坐标系中的四个点。
1.初始化中心值:我们假设medicine A和medicine B作为聚类中心的初值。用c1和c2表示中心的坐标,c1=(1,1),c2=(2,1)。
2对象-中心距离:利用欧式距离(d = sqrt((x1-x2)^2+(y1-y2)^2))计算每个对象到每个中心的距离。第0次迭代的距离矩阵为
其中行表示聚类中心,列表示对象。
D距离矩阵中第一行表示每一个对象与第一个聚类中心的距离,第二行表示每一个对象与第二个聚类中心的距离
3.对象聚类:根据每个对象与聚类的距离的最小值将对象分为两组。因此,medicine A属于第一组,其余的对象属于第二组。
4.迭代-1,确定中心:从3中我们得到了每组的成员,我们现在根据第组成员利用平均值计算新的聚类中心。c1=(1,1),c2=((2+4+5)/3,(1+3+4)/3)=(11/3,8/3)。此时各数据坐标位置如下。
5.迭代-1,对象-中心距离:此步计算所有对象与新的中心之间的距离。同第2步一样,迭代-1中的距离矩阵如下所示。
6.迭代-1,对象聚类:同第3步一样,将每一对象根据最小距离分组。此时得到的组距离如下所示。
7.迭代-2,确定中心:如第4步,得到c1=(3/2,1),c2=(9/2,7/2)
8.迭代-2,对象中心距离:如第2步。得距离矩阵如下。
9.迭代-2,对象聚类:得组矩阵如下。
此时,我们发现第一次迭代和第二迭代所得的分组情况是一样的,即收敛,k means算法结束。得到如下所示的分组结果。
[1]Steinhaus, H., "Sur la division des corps matériels en parties" (in French).Bull. Acad. Polon. Sci. 4 (12): 801–804. MR0090073. Zbl 0079.16403,1957.
[2]MCQUEEN, J., "Some methods for classification and analysis of multivariate observations." In Proceedings of the Fifth Berkeley Symposium on Mathematical Statistics and Probability, 281-297,1967.
[3]Lloyd, S. P., "Least square quantization in PCM, " Bell Telephone Laboratories Paper, 1957, Published in journal much later: Lloyd., S. P. (1982).