一.K均值的过程

首先,选择K个初始质心,其中K是用户指定的参数,即所期望的簇的个数。每个点指派到最近的质心,而指派到一个质心的点集为一个簇。然后,根据指派到簇的点,更新每个簇的质心。重复指派和更新步骤,直到簇不发生变化,或等价地,直到质心不发生变化。

所以根据这个过程,我们需要在这个过程中关注两个问题:1.如何选择初始质心 2.怎么决定将点指派到哪个质心 3.怎么计算质心

二.K均值需要注意的问题

1.如何选择初始质心

方法一.随机产生初始质心,但这种方法往往导致簇的质量非常差
方法二.多次运行,每次使用一组不同的随机初始质心,然后选取具有最小平方误差和的簇集。而随机产生初始质心的问题,即使多次运行也可能无法解决
方法三.取一个样本,并使用层次聚类技术对它进行聚类。从层次聚类中提取K个簇,并用这些簇的质心作为初始质心。
方法四.随机的选择第一个点,或取所有点的质心作为第一个点。然后,对于每个后继初始质心,选择离已经选取过的初始质心最远的点。这种方法选择的初始质心的集合,可以保证是散开的。但是,这种方法有可能选中离群点。

2.怎么决定将点指派到哪个质心

我们一般将点指派到离它最近的质心,而我们一般用‘邻近性’来量化所考虑的数据的‘最近’的概念。对于不同的数据我们用不同的邻近性来考量,例如:欧式空间里我们使用欧式距离,文档数据尝试用Jaccard度量。

3.怎么计算质心
当邻近性度量为欧几里得距离时,我们使用误差平方和(SSE)来作为度量聚类质量的目标函数。
聚类分析(一)-K均值
我们选择质心的目标,就是能够最小化这个目标函数,而通过数学证明可以得到,这个目标函数最小时,质心为该簇内点的均值。下面是对于不同邻近函数的情况,其目标函数和质心的变化。聚类分析(一)-K均值

三.K均值的附加问题

1.时间和空间复杂度
m是点数,n是属性数,I是收敛所需要的迭代次数。
空间复杂度O((m+K)n),时间复杂度O(IKmn)

2.处理空簇
如果所有的点在指派步骤都未分配到某个簇,就会得到空簇。如果这种情况发生,则需要某种策略来选择一个替补质心,否则平方误差会变大。
选择替补质心的方法:1.选择一个距离任何质心都最远的点。2.从具有最大的SSE的簇中选择一个替补质心。

3.用后处理降低SSE
一般来说,我们希望在不增加簇的情况下,降低SSE。这是有可能的,因为K均值常常收敛于局部极小。常用方法就是交替的使簇进行分裂和合并。即在分裂阶段,将簇分开,在合并阶段将簇合并,交替进行。

分裂簇

  1. 分裂一个簇:选择具有最大SSE的簇进行分裂
  2. 引入新的质心:选择离所有质心最远的点或者在具有最大SSE的簇中随机选择质心

合并簇

1.拆散一个簇:删除簇的对于质心,将簇中的点重新指派的其它簇。一般删除的都是具有最大SSE的簇
2.合并两个簇:通常选择质心最接近的两个簇。

4.增量地更新质心

可以在点到簇的每次指派之后,增量的更新质心,而不是所有的点都指派到簇中之后才更新簇。
使用增量更新,确保不会产生空簇,因为所有的簇都从单个点开始,并且如果每个簇中有一个点,则该点总是被重新指派到相同的簇。

参考书籍:
《数据挖掘导论》由人民邮电出版社出版,[美]作者Pang-Ning Tan,Michael Steinbach,Vipin Kumar 合著

相关文章: