使用 R 在 k 均值聚类分析中获取聚类均值

Get cluster mean in k-means clustering analysis with R

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

clusteredsubset$centers

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

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

我会使用:

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

两者都可以,因为它们给出的结果相同。但是既然kmeansreturnscenters,为什么不用呢?

以下是基于?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)