K-means

K-Means算法中K值得选择

K-means聚类最优k值的选取

1.手肘法

手肘法的核心指标是SSE(sum of the squared errors,误差平方和)

 其中,Ci是第i个簇,p是Ci中的样本点,mi是Ci的质心(Ci中所有样本的均值),SSE是所有样本的聚类误差,代表了聚类效果的好坏。

       手肘法的核心思想是:随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差平方和SSE自然会逐渐变小。并且,当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大,而当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓,也就是说SSE和k的关系图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数。当然,这也是该方法被称为手肘法的原因。

 显然,肘部对于的k值为4,故对于这个数据集的聚类而言,最佳聚类数应该选4

2.轮廓系数

该方法的核心指标是轮廓系数(Silhouette Coefficient),某个样本点Xi的轮廓系数定义如下:

其中,a是Xi与同簇的其他样本的平均距离,称为凝聚度,b是Xi与最近簇中所有样本的平均距离,称为分离度。

最近簇的定义:

 其中p是某个簇Ck中的样本。

        求出所有样本的轮廓系数后再求平均值就得到了平均轮廓系数。平均轮廓系数的取值范围为[-1,1],且簇内样本的距离越近,簇间样本距离越远,平均轮廓系数越大,聚类效果越好。那么,很自然地,平均轮廓系数最大的k便是最佳聚类数。

3.Canopy

weka算法系列(cluster)——Canopy(1) - CodeAntenna

论文:Efficient Clustering of High Dimensional Data Sets with Application to Reference Matching 

 Canopy算法流程:

1)将数据集向量化得到一个list后放入内存,选择两个距离阈值:T1和T2,其中T1 > T2,对应上图,实线圈为T1,虚线圈为T2,T1和T2的值可以用交叉校验(通过比较不同的T1、T2聚类的F1值)来确定;

2)在List中随机挑选一个数据向量A,使用一个粗糙距离计算方式计算A与List中其他样本数据向量之间的距离d。

3)根据第2步中的距离d,把d小于T1的样本数据向量划到一个canopy中,同时把d小于T2的样本数据向量从候选中心向量名单(这里可以理解为就是List)中移除。

4)重复第2、3步,直到候选中心向量名单为空,即List为空,算法结束。


Canopy+K-MEANS算法思路如下:

 Stage1、聚类最耗费计算的地方是计算对象相似性的时候,Canopy Method在第一阶段选择简单、计算代价较低的方法计算对象相似性,将相似的对象放在一个子集中,这个子集被叫做Canopy,通过一系列计算得到若干Canopy,Canopy之间可以是重叠的,但不会存在某个对象不属于任何Canopy的情况,可以把这一阶段看做数据预处理;

   Stage2、在各个Canopy内使用传统的聚类方法(如K-means),不属于同一Canopy的对象之间不进行相似性计算。

从这个方法起码可以看出两点好处:

首先,Canopy不要太大且Canopy之间重叠的不要太多的话会大大减少后续需要计算相似性的对象的个数;

其次,类似于K-means这样的聚类方法是需要人为指出K的值的,通过Stage1得到的Canopy个数完全可以作为这个K值,一定程度上减少了选择K的盲目性。

通过Canopy确定K值大小,需要通过多组实验对比(交叉验证)不同的T1、T2的聚类效果F1值和聚类速度,评估合适的T1、T2。或用平均轮廓系数作为衡量标准,取聚类后平均轮廓系数最大的T1、T2.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值