代码之家  ›  专栏  ›  技术社区  ›  Laurent Magon

如何找到k均值聚类的数值区间?

  •  0
  • Laurent Magon  · 技术社区  · 7 年前

    我试图用Kmeans离散一个数值变量。 它运行得很好,但我想知道如何在集群中找到间隔。

    我与 工厂矿工 做我的kmeans。 根据下图,我发现了3个集群: enter image description here

    我现在的重点是确定集群中数值变量的间隔。

    中是否有任何选项或方法 工厂矿工 还是其他包来做呢? 我可以手动操作,但由于我必须对一定数量的变量进行操作,我想找到一种简单的方法来识别它们。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Manuel Bickel    7 年前

    由于您没有提供数据,我使用了 kmeans 文档,它为具有两列x和y的数据生成两组。您可以 split 将原始数据按每行所属的集群,然后从每个组中提取数据。我不确定我的示例数据是否与您的数据相似,但在下面的代码中,我只是使用了 min x列值和 max 列y的值作为潜在间隔的边界(取决于用例,这是否合理)。这对你有帮助吗?

    data <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2),
               matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))
    colnames(data) <- c("x", "y")
    
    cl <- kmeans(data, 2)
    
    data <- as.data.frame(cbind(data, cluster = cl$cluster))
    
    lapply(split(data,  data$cluster), function(x) {
      min_x <- min(x$x)
      max_y <- max(x$y)
      diff <- max_y-min_x
      c(min_x = min_x , max_y = max_y, diff = diff) 
    })
    
    # $`1`
    # min_x      max_y       diff 
    # -0.6906124  0.5123950  1.2030074 
    # 
    # $`2`
    # min_x     max_y      diff 
    # 0.2052112 1.6941800 1.4889688