k-means和canopy相结合的聚类

聚类

聚类基于“物以类聚”的朴素思想,是将物理或抽象对象集合划分为由类似的对象组成的多个类或簇(cluster)的过程。聚类使得每个簇中的数据点之间最大程度地相似,而不同簇中的数据点最大程度地不同,从而发现数据集中有效的、有用的信息。

聚类常见数据结构

· 数据矩阵(对象-属性结构):

假设有p个属性(年龄、性别、身高、体重、种族...)来表示n个对象”人“,可看成是一个n×p维的矩阵(矩阵行表示对象,矩阵列表示各个属性值)

k-means和canopy相结合的聚类

· 相异度矩阵(对象-对象结构):

存储n个对象两两之间的相异度,可看成是一个n×n维的对称矩阵(每个数据值表示对应行和列对象之间的度量值),度量值可以用相似度或距离来表示,当用相似度表示时,值越大表示越相似;当用距离表示时,值越小表示越相似,两者之间可以相互转化。

k-means和canopy相结合的聚类

相异度矩阵可由数据矩阵通过距离计算公式获得,在不同的算法需求中,需根据实际情况决定输入数据结构。

聚类过程

k-means和canopy相结合的聚类

聚类流程

k-means聚类

k-means 算法(k均值算法)是常见的聚类算法之一,将相似的数据归聚成一个聚类,从而得到 k 个聚类,各个聚类之内的数据相似,各个聚类之间数据相异。

算法思想:

· Step1:随机选择数据集中k个点作为初始聚类中心;

· Step2:分别计算数据集中的点到 k 个聚类中心点的距离,将数据点划入距离最近聚类;

· Step3:计算簇中数据对象平均值确定新的聚类中心;

· Step4:若聚类中心点结果收敛则算法结束,否则重复 Step2- Step3

缺点:

1. K 需要指定

2. 初始点的选择对最后的聚类结果影响较大(通常以局部最优解结束)

3. 受噪音点影响较大

4. 只能处理一定形状的簇

canopy

canopy是一种快速粗放的预聚类方法,使用简单粗放的距离计算测量方法把数据高效地划分成为多个不完全重叠但可以相交的区域,这个算法获得的并不是最终结果,它是为其他算法服务的,例如k-means,可以提高大规模数据处理效率。

k-means和canopy相结合的聚类

canopy基本思想


k-means和canopy相结合的聚类

canopy聚类结果


如图所示,定义了T1,T2,称为距离阈值(T1>T2),当确定了一个中心点以后,计算其它点与该中心点的距离,并根据距离阈值T1,T2分别将其它点归入各自的canopy聚类区域,将该区域分为小于T2的区域(以该点为聚类中心的聚类区域,不可能再产生其它类的聚类中心),大于T2小于T1的区域(已该点为聚类中心的聚类区域,可能会产生其它类的聚类中心),大于T1的区域(不属于该聚类中心的聚类区域)

算法步骤如下:

1. 将所有数据放在数据对象集合D中;

2. 随机选择D中的一个数据对象d作为canopy的中心,并将d从D中移除;

3. 计算数据集合D中所有数据对象到该对象d的距离distance;

4. 若distance

5. 若distance

6.重复步骤2到5,直到D为空,形成多个canopy类(如上图3所示)。

canopy+kmeans

canopy根据数据对象之间的距离粗略计算出整个区域的类别划分,产生了n个聚类中心及其聚类区域,可以消除孤立点的影响,这刚好弥补了kmeans初始聚类数目难以选择及随机选取聚类中心易陷入局部最优的不足。且在数据量较大时,可以通过仅比较各数据点与最近的聚类中心点的距离来减少距离比较次数,从而减少聚类时间。

算法分为两步:

step1:在数据集中使用 canopy 算法将数据对象划分成 k 个 canopy,产生k 个 canopy 的中心点作为 k-means 算法的初始聚类中心;

step2:在 canopy 中使用k-means 算法计算数据对象与聚类中心距离重新划分聚类及确定新的聚类中心。

另:引入canopy带来了另一个影响因子:T1和T2的选择,当T1过大时,可能会产生过多重叠的canopy,使各聚类的中心点距离过近;当T2过大时,会减少簇的个数,反则,则增加簇的个数。

关于选择阈值的方法,最简单的是根据经验设置,或者复杂一点使用交叉验证法,更多高级算法留给大牛们讨论和设计吧。


分享到:


相關文章: