【问题标题】:How can I get cluster number correspond to data using k-means clustering techniques in R? [closed]如何使用 R 中的 k-means 聚类技术获得与数据相对应的聚类编号? [关闭]
【发布时间】:2012-01-06 21:58:54
【问题描述】:

我通过 k-means 聚类方法对数据进行聚类,如何在 R 中使用 k-means 聚类技术获得与数据相对应的聚类数?为了得到每条记录属于哪个簇。

示例 12 32 13 => 1. 12,13 2. 32

【问题讨论】:

    标签: r cluster-analysis k-means


    【解决方案1】:

    听起来您正在尝试访问kmeans() 返回的集群向量。从集群的帮助页面:

    A vector of integers (from 1:k) indicating the cluster to which each 
    point is allocated.
    

    使用帮助页面上的示例:

    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))
    
    #Access the cluster vector
    cl$cluster
    
    > cl$cluster
      [1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
     [45] 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
     [89] 1 1 1 1 1 1 1 1 1 1 1 1
    

    解决 cmets 中的问题

    您可以通过执行以下操作将集群编号“映射”到原始数据:

    out <- cbind(x, clusterNum = cl$cluster)
    head(out)
    
                   x          y clusterNum
    [1,] -0.42480483 -0.2168085          2
    [2,] -0.06272004  0.3641157          2
    [3,]  0.08207316  0.2215622          2
    [4,] -0.19539844  0.1306106          2
    [5,] -0.26429056 -0.3249288          2
    [6,]  0.09096253 -0.2158603          2
    

    cbind 是用于列绑定的函数,还有一个用于行的rbind 函数。有关更多详细信息,请分别查看他们的帮助页面?cbind?rbind

    【讨论】:

    • 如何将此向量与我的表匹配,我想知道与表的每一行对应的簇号。 (额外的列是k-means聚类后的簇数)
    • cl$cluster 是长度为 100 的向量,在本例中是输入矩阵中 100 行的对应簇号。所以第一行是集群 2,第二行是集群 2,依此类推,直到你到达集群 1 的第 27 行,然后它的所有 2 再次上升到 51,然后 51 到 100 在集群 1 中。你不明白吗?
    • 谢谢 Spacedman,你能告诉我,我如何将这个向量映射到数据表?有功能吗?
    • @Java - 查看我更新的答案。此外,R Intro 手册中涵盖了许多此类数据转换类型信息,可在此处访问:cran.r-project.org/doc/manuals/R-intro.html。这里的人们通常很乐意帮助解决基本和复杂的问题,但也鼓励积极参与现有的 R 资源。干杯!
    • 谢谢你,Chase 很有用,对不起,我对 R 很陌生
    【解决方案2】:

    @Java 提问者

    您可以按如下方式访问集群数据:

    > data_clustered <- kmeans(data)
    > data_clustered$cluster 
    

    data_clustered$cluster是一个向量,长度为data中原始记录数。每个条目都针对该行。

    获取属于集群 1 的所有记录:

    > data$cluster <- data_clustered$cluster 
    > data_clus_1 <- data[data$cluster == 1,]
    

    集群数量:

    > max(data$cluster)
    

    祝你的聚类好运

    【讨论】:

    • 如何将此向量与我的表匹配,我想知道与表的每一行对应的簇号。 (额外的列是k-means聚类后的簇数)
    • 假设你的数据存储在矩阵(不是表!)'x'中,一个快速的方法是:clust_results
    • 你的表是这个例子中的数据。这有许多列和行。您的样本在行中,观察在列中。如果您按照帖子中的说明将额外的列簇分配给您的表,那么您将在每行的基础上找到列簇中该行的簇号。
    • 谢谢米莎,我现在明白了。完成了!
    【解决方案3】:

    我们喜欢 Stack Overflow 上可重现的示例。否则我们只是猜测。

    我猜你在 stats 包中使用了 kmeans。

    我会进一步猜测您还没有阅读文档帮助(kmeans),其中说:

    Value:
    
      an object of class 'kmeans' which is a list with components:
    
       cluster: A vector of integers indicating the cluster to which each point is allocated.
    

    帮助中有一个示例,可以准确地向您展示其工作原理。

    【讨论】:

    • 如何将此向量与我的表匹配,我想知道与表的每一行对应的簇号。 (额外的列是k-means聚类后的簇数)
    猜你喜欢
    • 2020-10-10
    • 2013-02-07
    • 2017-08-18
    • 2016-08-26
    • 1970-01-01
    • 2019-03-07
    • 2020-08-27
    • 2018-04-05
    • 2018-02-10
    相关资源
    最近更新 更多