R k-意味着聚类数据

时间:2013-02-22 08:33:27

标签: r data-mining k-means

在R中,我已经计算了k-means聚类,如下所示:

km = (mat2, centers=3)

其中mat2是通过组合一组时间序列的元素而获得的列向量的矩阵。有31行

现在我有了k-means对象,如何查看与特定点相关的数据?例如,假设我点击了一个属于其中一个分区的点。如何查看此数据?当然,我的意思是如何以编程方式获取这些数据。

1 个答案:

答案 0 :(得分:2)

我希望你打电话给kmeans

set.seed(42)
df <- data.frame( row.names = paste0( "obs", 1:100 ), 
                         V1 = rnorm(100),
                         V2 = rnorm(100),
                         V3 = rnorm(100) )
km <- kmeans( df, centers = 3 )

如果您不熟悉新功能,最好使用str()检查生成的对象:

> str(km)
List of 7
 $ cluster     : Named int [1:100] 1 2 3 3 1 1 1 1 1 1 ...
  ..- attr(*, "names")= chr [1:100] "obs1" "obs2" "obs3" "obs4" ...
 $ centers     : num [1:3, 1:3] 0.65604 -1.09689 0.56428 0.11162 0.00549 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:3] "1" "2" "3"
  .. ..$ : chr [1:3] "V1" "V2" "V3"
 $ totss       : num 291
 $ withinss    : num [1:3] 43.7 65.7 51.3
 $ tot.withinss: num 161
 $ betweenss   : num 130
 $ size        : int [1:3] 36 34 30
 - attr(*, "class")= chr "kmeans"

正如我从您的问题中所理解的那样,您正在寻找km$cluster,它会告诉您哪些观察数据已分配给哪个群集。因此,可以通过km$centers来调查群集中心。

如果您现在想知道哪些观察结果聚集到具有中心km$centers[3,]的第三个群集,您可以通过

data.frame(或matrix)进行归类。
> rownames(df[ km$cluster == 3, ])
 [1] "obs3"  "obs4"  "obs12" "obs15" "obs16" "obs21" "obs25" "obs27" "obs32" "obs42" "obs43" "obs46" "obs48" "obs54" "obs55" "obs58" "obs61" "obs62" "obs63" "obs66" "obs67" "obs73" "obs76"
[24] "obs77" "obs81" "obs84" "obs86" "obs87" "obs90" "obs94"