我有一堆数据(x,y),我想对它们进行聚类(比如60个点)。然而,由于数据的性质,一些集群可能非常小(1-2个点),而其他集群可能包含许多点(5-6个)。由于固有的随机起始点,运行k均值算法会导致不唯一的质心值。我知道每个星团的中心在y方向上应该至少是'y‘的距离。(x相对不重要)所以在运行我的kmeans之后,如果任何2个集群的中心在'y‘内,我想重新运行kmeans算法,直到它达到我的标准。此外,如果没有收敛,聚类的数量可以慢慢减少。
我该如何在R中做呢?
发布于 2013-07-06 13:53:37
你的问题没有实际意义:y是一个变量,还是给定维度中集群之间的最小距离?
这就是说,我们来试一试。簇的中心在k均值拟合的分量$centers中。所以你可以重复这个过程,直到你得到一个拟合,其中中心在y维度上至少相距给定的距离。
repeat {
m <- kmeans(df, k)
cy <- m$centers[, 2]
cy_diff <- diff(sort(cy))
if(all(cy_diff > min_dist)) break
}根据您的数据替换df、k和min_dist。这一切在统计上都是可疑的,但这是CrossValidated的问题。
https://stackoverflow.com/questions/17499449
复制相似问题