【问题标题】:R k-means clustering dataR k-means 聚类数据
【发布时间】:2013-02-07 19:36:41
【问题描述】:

在 R 中,我计算了一个 k-means 聚类如下:

km = (mat2, centers=3)

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

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

【问题讨论】:

  • 您需要添加更多详细信息;跟随你正在做的事情是不可能的。

标签: r data-mining k-means


【解决方案1】:

我希望您这样称呼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"

【讨论】:

    猜你喜欢
    • 2020-08-27
    • 2015-04-11
    • 2018-04-05
    • 2018-02-10
    • 2017-08-18
    • 2011-08-13
    • 2013-08-08
    • 2013-02-14
    • 2018-01-14
    相关资源
    最近更新 更多