加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

k-means 聚类k 选择(轮廓系数)

(2015-10-14 17:52:34)
标签:

轮廓

系数

个数

参量

分类: r语言学习
#####R聚类研究
irirs2<-iris
irirs2[,5]<-NULL
kmeans.result<-kmeans(irirs2,3)
K-means clustering with 3 clusters of sizes 50, 62, 38

Cluster means:
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1     5.006000    3.428000     1.462000    0.246000
2     5.901613    2.748387     4.393548    1.433871
3     6.850000    3.073684     5.742105    2.071053

Clustering vector:
  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[49] 1 1 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[97] 2 2 2 2 3 2 3 3 3 3 2 3 3 3 3 3 3 2 2 3 3 3 3 2 3 2 3 2 3 3 2 2 3 3 3 3 3 2 3 3 3 3 2 3 3 3 2 3
[145] 3 3 2 3 3 2

Within cluster sum of squares by cluster:
  [1] 15.15100 39.82097 23.87947
(between_SS / total_SS =  88.4 %)

Available components:
  
  [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss" "betweenss"   
[7] "size"         "iter"         "ifault"    

kmeans.result<-kmeans(irirs2,2)
c( kmeans.result$totss, kmeans.result$withinss, kmeans.result$tot.withinss,kmeans.result$betweenss)

results <- matrix(nrow=15, ncol=2, dimnames=list(1:15,c("clusters","s
umsquares")))
利用轮廓系数判断K均值聚类的簇个数
2012-6-19 20:56| 发布者: 仙豆| 查看: 4129| 评论: 0|来自: 互联网
摘要: K均值聚类(K-means clustering)计算简单,并且可以用于各种数据类型,但需要事先判断簇个数来作为输入参量,该参数的设置往往涉及到聚类效果。轮廓系数可以用来解决这个问题,轮廓系数(silhouette coefficient)方 ...
K均值聚类(K-means clustering)计算简单,并且可以用于各种数据类型,但需要事先判断簇个数来作为输入参量,该参数的设置往往涉及到聚类效果。

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

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


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



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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有