【问题标题】:How do I ensure that real numbers in a list are at least 'y' apart如何确保列表中的实数至少相隔“y”
【发布时间】:2013-07-04 04:19:58
【问题描述】:

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

我如何在 R 中做这件事?

【问题讨论】:

    标签: r cluster-analysis k-means


    【解决方案1】:

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

    也就是说,这是一个尝试。集群的中心位于您的 k-means 拟合的组件 $centers 中。所以你可以重复这个过程,直到你找到一个合适的中心在yth维度上至少相距给定的距离。

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

    【讨论】:

    • y 将是一个用户输入值,它强制质心在 y 方向上始终按值 y 间隔开。谢谢,sn-p 解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2021-06-24
    • 2021-08-10
    • 2019-03-23
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多