使用R在k-means聚类分析中获得聚类均值

时间:2016-10-06 15:33:10

标签: r cluster-analysis k-means

我使用k-means算法创建了两个集群。每个群集包含4个变量。如果我想获得每个集群中每个变量的方法,我应该这样做:

clusteredsubset$centers

colMeans(y[clusteredsubset$cluster == 1,])
colMeans(y[clusteredsubset$cluster == 2,])

其中y是数据矩阵(4列),clusteredsubsetkmeans的结果。

2 个答案:

答案 0 :(得分:3)

任何一个都没问题,因为它们会给出相同的结果。但是,由于kmeans返回centers,为什么不使用它?

以下内容基于?kmeans的第一个示例:

set.seed(0)
x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2),
           matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))
colnames(x) <- c("x", "y")
cl <- kmeans(x, 2)

## what `kmeans` returns
cl$centers
#              x            y
#1 -0.0008158201 -0.008394296
#2  0.9261878482  1.029984748

## manual computation
colMeans(x[cl$cluster == 1, ])
#            x             y 
#-0.0008158201 -0.0083942957 

colMeans(x[cl$cluster == 2, ])
#        x         y 
#0.9261878 1.0299847 

结果完全相同(数字的差异仅仅是打印效果)。

## make a plot
plot(x, col = cl$cluster)
points(cl$centers, col = 1:2, pch = 8, cex = 2)

enter image description here

答案 1 :(得分:1)

我会用:

means = sapply(split(clusteredsubset, clusteredsubset$cluster),function(x)
     {return(sapply(x,function(x){return(mean(x))}))})