[具有相同簇大小的K均值算法变异
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[具有相同簇大小的K均值算法变异相关的知识,希望对你有一定的参考价值。
我正在寻找最快的算法,用于按距离将地图上的点分为大小相等的组。 k-means clustering algorithm看起来直截了当且很有前途,但没有产生相同大小的组。
是否存在此算法的变体或其他算法,允许所有集群的成员数相等?
答案
这可能会成功:应用Lloyd's algorithm获得k重心。对质心按数组中与之相关的簇的大小递减排序。对于i = 1到k-1,将簇i中的数据点推到与其他质心j(i <j ≤k)更改为j,然后重新计算质心i(但不要重新计算簇),直到簇大小为n / k 。
此后处理步骤的复杂度为O(k²n lg n)。
另一答案
[2012年1月新增:比后处理更好的是保持群集大小它们的成长大致相同。例如,为每个X找到3个最近的中心,然后将X加到效果最好的那个距离-λclustersize。另一答案
还要查看对数据进行分区的K-d树,直到每个分区的成员小于作为算法输入的BUCKET_SIZE。另一答案
[我可以谦虚地建议您尝试这个项目ekmeans。另一答案
我也一直在努力解决这个问题。但是,我意识到我一直都在使用错误的关键字。如果希望点结果成员的数量相同,请进行分组,而不是聚类。我终于能够使用简单的python脚本和postgis查询解决问题。另一答案
您想看一下空间填充曲线,例如z曲线或hilbert曲线。您可以想到一个将2维问题简化为1维问题的空间填充曲线。尽管sfc索引仅是二维数据的重新排序,而不是数据的完美聚类,但是当解决方案不能满足完美聚类且必须相当快地计算时,它可能会很有用。另一答案
ELKI数据挖掘框架具有一个tutorial on equal-size k-means。
这不是一个很好的算法,但是它是一个简单的k均值变体,可以编写教程并教人们如何实现自己的聚类算法变体;尽管SSQ的质量将比常规k均值差,但显然有些人确实需要它们的簇具有相同的大小。在ELKI 0.7.5中,您可以将此算法选择为tutorial.clustering.SameSizeKMeansAlgorithm
。
另一答案
您可以在定义权重图时查看距离。相当多的图分区算法都是基于将图顶点划分为两组大小相等的显式算法的。例如,这出现在Kernighan-Lin algorithm和使用拉普拉斯算子的spectral graph partitioning中。要获得多个集群,您可以递归地应用分区算法。在频谱图分区的链接上对此进行了很好的讨论。 另一答案
尝试这个k均值变体:另一答案
考虑某种形式的递归贪婪合并-每个点都从一个单例群集开始,并反复合并最接近的两个点,以使此类合并不超过max。尺寸。如果您别无选择,只能超出最大大小,则在本地重新创建。这是回溯层次聚类的一种形式:http://en.wikipedia.org/wiki/Hierarchical_clustering另一答案
最近,我需要一个非常小的数据集。我的回答尽管运行时间相对较长,但可以保证收敛到局部最优。另一答案
有了簇质心,可以进行更清洁的后处理。令N
为项目数,K
集群数和S = ceil(N/K)
最大集群大小。另一答案
[阅读了这个问题和几个类似的问题之后,我在https://elki-project.github.io/tutorial/same-size_k_means上的Elki教程中创建了一个大小相同的k-means的python实现,该教程将scikit-learn的K-Means实现用于大多数常见方法和熟悉的API 。另一答案
[通常,将地图上的点按距离分组为大小相等的组在理论上是不可能完成的任务。因为将点分组为大小相等的组与[冲突
以上是关于[具有相同簇大小的K均值算法变异的主要内容,如果未能解决你的问题,请参考以下文章