寻找中心'在R中使用kmeans的索引

时间:2015-01-08 06:55:04

标签: r statistics k-means

我在R中使用kmeans,并使用此代码行查找我的数据中心。

res=kmeans(data,centers=5)

我可以使用以下代码到达我的中心:

res$centers

我的第一个问题是:他们是我的数据成员还是他们的5个数据中心?

如果中心是我的数据点,我如何才能达到我的中心索引?

如果中心不是我的数据点,我怎样才能找到离这些中心最近的数据点?

谢谢

算法网址here

1 个答案:

答案 0 :(得分:3)

  1. 第一个问题(我的数据的中心部分是什么?):
  2. 没有质心您的数据成员。它们是在数据集中随机生成的。可能会发生质心落在数据点上,但这将是巧合,质心仍然是一个单独的点。

    1. 第二个问题(如何找到距离我中心最近的数据点?)
    2. 它不能在kmeans函数中发生,但很容易自己做。请参阅以下示例:

      library(stats)
      x <- matrix(runif(3000),ncol=3 ) #create a 3-column matrix
      mymod <- kmeans(x=x, centers=3)  #run the kmeans model
      
      x <- cbind(x,1:nrow(x)) #add index id (the row number) so that we can find the nearest data point later
      
      #find nearest data point for the 1st cluster for this example
      cluster1  <- data.frame(x[mymod$cluster==1,]) #convert to data.frame to work with dplyr
      
      
      library(dplyr)
      
      #calculate the euclidean distance between each data point in cluster 1 and the centroid 1
      #store in column dist
      cluster1 <- cluster1 %>% mutate(dist=sqrt(  (cluster1[,1] - mymod$centers[1,1])^2 +
                                                  (cluster1[,2] - mymod$centers[1,2])^2 +
                                                  (cluster1[,3] - mymod$centers[1,3])^2 ) 
                          )
      
      
      #nearest point to cluster 1
      > cluster1[which.min(cluster1$dist), ]
                X1        X2        X3  X4       dist
      86 0.3801898 0.2592491 0.6675403 280 0.04266474
      

      如上所示,距离中心1最近的数据点是matrix x

      中的第280行

      您可以为每个中心做同样的事情。如果您有许多中心,那么只需编写一个函数并在lapply中使用。

      希望有所帮助!

      P.S。用于计算欧氏距离的公式为here