Получить среднее значение кластера в анализе кластеризации k-средних с помощью R

#r #cluster-analysis #k-means

#r #кластерный анализ #k-средние

Вопрос:

Я создал два кластера, используя алгоритм k-средних. Каждый кластер содержит 4 переменные. Если я хочу получить средние значения для каждой переменной в каждом кластере, должен ли я делать:

 clusteredsubset$centers
  

или

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

где y — матрица данных (4 столбца) и clusteredsubset является результатом kmeans .

Ответ №1:

Любой из них подходит, поскольку они дают тот же результат. Но поскольку 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)
  

введите описание изображения здесь

Ответ №2:

Я бы использовал:

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