【发布时间】:2016-04-04 17:34:21
【问题描述】:
我有以下代码,我可以使用它绘制 WSS 曲线来定位膝盖,以便我可以为 KMeans 聚类选择 K 的值。
# To find WSS
findWSS <- function(data) {
if (VERBOSE) {
print(paste("[TRACER] Finding WSS.."))
}
start <- Sys.time()
wss <- (nrow(data)-1)*sum(apply(data,2,var))
for (i in 2:length(unique(data))) {
wss[i] <- sum(kmeans(data, centers=i)$withinss)
}
if (ENABLE_PLOTS) {
plot(1:length(unique(data)), wss, type="b", xlab="Number of Clusters", ylab="Within groups sum of squares")
}
end <- Sys.time()
if (ENABLE_MEASUREMENTS && VERBOSE) {
print(paste("[TIMER] Finding WSS:", difftime(end, start), "secs"))
}
}
以下是我得到的情节的表示:
例如,上图中观察到的膝盖是 3。但我想在 R
中以编程方式计算这个膝盖对我如何做同样的事情有什么想法吗?
【问题讨论】:
-
您对“观察到的膝盖”的统计标准是什么?当我使用由 2 组构造的 100x2 矩阵(
?kmeans中的示例)执行此操作时,没有明确的拐点,曲线上的点与原点的距离最小,这可能是“拐点”的一种定义建议有 6-9 组。 -
您可以尝试通过Hastie et al 实现差距统计。请参阅此处了解已工作的example。
-
谢谢。我使用图书馆“集群”中的 clusGap 来进行差距统计
-
在我看来,膝盖是 2... 你可能会注意到我们不同意,那么算法如何找到“正确”的解决方案?不要信任/依赖这些统计数据,而是可视化您的数据并仔细检查集群。
标签: r cluster-analysis k-means