我有一堆数据(x,y),我想要聚类(比如说60分)。但是,由于数据的性质,一些集群可能非常小(1-2个点),而其他集群可以包含许多点(5-6)。由于固有的随机起始点,运行k均值算法会导致非唯一的质心值。我知道每个星团的中心在y方向上应该至少相距“y”。 (x相对不重要)所以在运行我的kmeans之后,如果任何2个集群的中心在'y'之内,我想重新运行kmeans algo直到它达到我的标准。此外,如果没有收敛,则可以缓慢减少簇的数量。
如何在R中进行此操作?
答案 0 :(得分:1)
您的问题没有意义:y
是变量,还是给定维度中群集之间的最小距离?
那就是说,这是对它的抨击。群集的中心位于k-means拟合的$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
。这完全是统计上可疑的IMO,但这是CrossValidated的一个问题。