有效地将相似的数字组合在一起[重复]

Posted

技术标签:

【中文标题】有效地将相似的数字组合在一起[重复]【英文标题】:Efficiently grouping similar numbers together [duplicate] 【发布时间】:2012-12-14 04:01:09 【问题描述】:

可能重复:1D Number Array Clustering

我有一个像[1, 20, 300, 45, 5, 60, 10, 270, 3] 这样的数字数组。根据接近程度将这些数字分组在一起的有效算法是什么?在这种情况下,我会期待像 [1, 3, 5][20, 45, 60][270, 300] 这样的东西。

【问题讨论】:

在我看来,您要查找的关键字是集群:en.wikipedia.org/wiki/Cluster_analysis。在您的特定情况下,我将从自下而上的层次聚类方法开始:en.wikipedia.org/wiki/Hierarchical_clustering @Mathias- 哇哦,你比我快几秒。 :-) 1D Number Array Clustering、Number clustering/partitioning algorithm、Cluster one-dimensional data optimally? 等的可能副本。 使用搜索功能,弗拉德 @Mathias no:当您有多个维度时,集群是合适的。当数据是 1d 时,可以通过这种方式对数据进行排序和处理大大。 Jenks 自然中断优化是一个很好的关键字,但也有非常简单的基于 delta 的方法效果很好。而且这些非常好的方法中的大多数甚至都无法扩展到二维。 【参考方案1】:

您所问的最难的部分是如何实际定义接近度。您希望[5,10,15,20] 的输出是什么?会不会是和[500,1000,1500,2000]一样的分组?

[1,2,3,5,7,8,9] 呢?应该是一组还是三组? (或两个?)。[1,2,3,5,7,8,9,1075,4000] 呢? 1075 和 4000 会组合在一起吗?样本中较大的数字会改变较小数字的分组吗?

这个问题是整个机器学习领域都在问的问题:Cluster Analysis 也许这个related question 会有所帮助?

我认为您想要的是K-means clustering(在相关问题中有助于链接到),但您需要知道要将数据拆分为多少组才能使用它。

【讨论】:

对于一维数据,存在更有效的方法。您应该使用多变量方法,例如 k-means。相反,对数据集进行排序(在O(n log n) 中),然后寻找最佳分区策略,例如自然间断、最大间隙、最小核密度估计等。排序是关键【参考方案2】:

这可能有点矫枉过正,但您可能需要查看 hierarchical clustering algorithms。这些算法将值组合成一个层次结构,您可以从中轻松提取最佳的 k 个集群。凝聚聚类可能是这些方法中最容易实现的,并且根据经验,它往往会产生非常好的聚类。

希望这会有所帮助!

【讨论】:

实际上这些算法是为多维数据设计的。对于单维数据,它们计算成对差异,当数据集可以排序时,这没有多大意义。

以上是关于有效地将相似的数字组合在一起[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python3 - 将相似的字符串分组在一起

如何有效地生成组合而不重复,它们之间有特定的数字

拆分训练测试数据集将相似的值保持在一起

像在 GOOGLE NEWS 中一样将相似的新闻内容分组在一起

Excel 公式将相似的值替换为单个公式

MySQL查询有效地返回不包括重复信息的组合行