【发布时间】:2014-07-26 11:49:18
【问题描述】:
聚类算法通常考虑到人类可能认为合理的聚类是模棱两可的,并且计算的解决方案应该能够很好地概括和预测。
这就是为什么我对是否只针对我的具体情况使用久经考验的算法犹豫不决的原因——这并不意味着我确信这些算法不起作用或实际上可能是最佳的。我只是想验证一下。
那么我们来看下面的例子。
基本上这些簇是显而易见的,除了明确的例外,因为它们实际上是线性可分的。我指的数据是二维的。集群遵循一个未知分布,具有一个众数并且是独立的。
对于这种特定的集群模式,哪种算法表现良好(速度、稳健性、简单性)?
rotate <- function(xy, deg, cen) {
xy <- xy - cen
return(c(
xy[1] * cos(deg) - xy[2] * sin(deg),
xy[2] * cos(deg) + xy[1] * sin(deg)
) + cen)
}
G <- expand.grid(1:2,1:2)
S <- list()
N <- 100
for(i in 1:nrow(G)) {
set <- data.frame(x = rgamma(N,3,2)*0.2 + G[i,1], y=rgamma(N,3,2)*.1 + G[i,2])
S[[i]] <- t(apply(set,1,rotate,runif(1,0,pi),c(mean(set[,1]),mean(set[,2]))))
}
S <- do.call(rbind, S)
plot(S)
【问题讨论】:
-
O(N^2) 可以接受吗?
-
并非如此,因为鉴于情况的简单性,这种努力是不合理的。尽管如此,欢迎您分享您的想法并出于学术兴趣
-
我的想法只是创建一个所有点的连接图,其中边缘表示它们之间的距离。然后应用Kruskal 的MST 算法和Union Find Path 压缩技术得到簇。但这种方法的一个警告是,您应该从一开始就知道集群的数量。
-
好主意 - 你知道吗 - 只是有一个非常相似的想法,但有一个关键区别,这让我可以大大减少 O。如果可行,将评估并分享它
-
@user1990169 构建最小生成树与单链接层次聚类相同。
标签: algorithm machine-learning cluster-analysis spatial-data