我正在尝试使用Kmeans对数值变量进行离散化。 它工作得很好,但我想知道如何在群集中找到间隔。
我使用 FactoMineR 来做我的kmeans。 我根据下图找到了3个集群:
我现在的观点是确定群集中数值变量的间隔。
FactoMineR 或其他套餐中是否有任何选项或方法可以执行此操作? 我可以手动完成,但由于我必须为一定数量的变量做这件事,我想找到一种简单的方法来识别它们。
答案 0 :(得分:0)
由于您没有提供数据,我使用了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