0

我有一堆数据(x,y),我想对它们进行聚类(比如 60 个点)。然而,由于数据的性质,一些聚类可能非常小(1-2 个点),而其他聚类可能包含很多点(5-6 个)。由于固有的随机起点,运行 k-means 算法会产生非唯一的质心值。我确实知道每个集群的中心在 y 方向上应该至少相距“y”。(x 相对不重要)所以在运行我的 kmeans 之后,如果任何 2 个集群的中心在 'y' 内,我想重新运行 kmeans 算法,直到它获得我的标准。此外,如果没有收敛,集群的数量可以慢慢减少。

我该如何在 R 中进行操作?

4

1 回答 1

1

您的问题没有真正意义:是y变量,还是给定维度中集群之间的最小距离?

就是说,这是一个尝试。集群的中心在$centers您的 k-means 拟合的组成部分中。y因此,您可以重复该过程,直到您找到中心在第 th 维中至少相距给定距离的拟合。

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 的一个问题。

于 2013-07-06T05:53:37.480 回答