如何确保列表中的实数至少相隔“y”

时间:2013-07-06 03:39:30

标签: r cluster-analysis k-means

我有一堆数据(x,y),我想要聚类(比如说60分)。但是,由于数据的性质,一些集群可能非常小(1-2个点),而其他集群可以包含许多点(5-6)。由于固有的随机起始点,运行k均值算法会导致非唯一的质心值。我知道每个星团的中心在y方向上应该至少相距“y”。 (x相对不重要)所以在运行我的kmeans之后,如果任何2个集群的中心在'y'之内,我想重新运行kmeans algo直到它达到我的标准。此外,如果没有收敛,则可以缓慢减少簇的数量。

如何在R中进行此操作?

1 个答案:

答案 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
}

根据您的数据替换dfkmin_dist。这完全是统计上可疑的IMO,但这是CrossValidated的一个问题。