星期四, 八月 25, 2011

利用轮廓系数判断K均值聚类的簇个数

K均值聚类(K-means clustering)计算简单,并且可以用于各种数据类型,但需要事先判断簇个数来作为输入参量,该参数的设置往往涉及到聚类效果。

轮廓系数可以用来解决这个问题,轮廓系数(silhouette coefficient)方法结合了凝聚度和分离度,可以以此来判断聚类的优良性,其值在-1到+1之间取值,值越大表示聚类效果越好。

依据这个原理,我们可以尝试用多个簇参量,反复计算在每个簇个数条件下的轮廓系数,当轮廓系数取最大时,其相应的簇个数是最好的。


在R语言中package fpc可以计算聚类后的一些评价指标,其中就包括了轮廓系数。

#首先加载软件包
library(fpc)
#利用著名的iris数据集
data=iris[,1:4]
#设簇个数在2到5之间取值
for (i in 2:5){
#K聚类结果存于result变量
result <- kmeans(data,i)
#求出聚类评价统计量
stats=cluster.stats(dist(data), result$cluster)
#将结果存入X
x[i]=stats$avg.silwidth
}

2 条评论:

  1. 此评论已被作者删除。

    回复删除
  2. 还有个问题,dist矩阵有特别要求吗?不需要对data进行scale先吗?评估的dist矩阵用cosine距离计算是可以的吧?

    回复删除