如何找到 k-means 簇的数值间隔?

How can I find numérical intervals of k-means clusters?

我正在尝试使用 Kmeans 离散化数值变量。 它工作得很好,但我想知道如何在我的集群中找到间隔。

我使用 FactoMineR 来做我的 kmeans。 我根据下图找到了 3 个集群:

我现在的重点是确定我的数值变量在簇内的区间。

FactoMineR 或其他包中是否有任何选项或方法可以做到这一点? 我可以手动完成,但由于我必须对一定数量的变量执行此操作,因此我想找到一种简单的方法来识别它们。

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

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