gpt4 book ai didi

algorithm - 在大小相等的 k 个簇中分组 n 个点

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:17:10 24 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
K-means algorithm variation with equal cluster size

编辑:就像 casperOne 向我指出这个问题是重复的。无论如何,这里有一个更笼统的问题,涵盖了这个问题:https://stats.stackexchange.com/questions/8744/clustering-procedure-where-each-cluster-has-an-equal-number-of-points

我的要求

在一个项目中,我需要将 n 个点 (x,y) 分组到 k 个大小相等 (n/k) 的簇中。其中 x 和 y 是 double float ,n 的范围是 100 到 10000,k 的范围是 2 到 100。并且 k 在算法运行之前是已知的。

我的实验

我开始使用 http://en.wikipedia.org/wiki/K-means_clustering 解决问题算法,它可以很好地快速生成大小大致相同的 k 个簇。

但我的问题是,K-means 生成大小大致相同的簇,我需要这些簇的大小完全相同(或者更准确地说:我需要它们的大小介于 floor(n/k) 和 ceil(n/k)).

在你向我指出之前,是的,我在这里尝试了第一个答案 K-means algorithm variation with equal cluster size ,这听起来是个好主意。

主要思想是通过K-means对簇产生的数组进行后处理。从最大的集群到最小的集群。我们通过将额外的点移动到另一个最近的集群来减少具有超过 n/k 成员的集群的大小。留下已经减少的集群。

这是我实现的伪代码:

n is the number of point
k is the number of cluster
m = n / k (the ideal cluster size)
c is the array of cluster after K-means
c' = c sorted by size in descending order
for each cluster i in c' where i = 1 to k - 1
n = size of cluster i - m (the number of point to move)
loop n times
find a point p in cluster i with minimal distance to a cluster j in c' where j > i
move point p from cluster i to cluster j
end loop
recalculate centroids
end for each

这个算法的问题在于,在过程接近尾声时(当 i 接近 k 时),我们必须在 c' 中选择一个簇 j(其中 j > i,因为我们需要单独处理已经处理过的簇), 但是我们发现的这个簇j可以远离簇i, 从而打破了簇的概念。

我的问题

是否有post K-means算法或K-means变体可以满足我的要求,还是我一开始就错了,我需要寻找其他聚类算法?

PS:我不介意自己实现解决方案,但如果我可以使用一个库,最好是在 JAVA 中,那就太好了。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com