分组或聚类算法
Posted
技术标签:
【中文标题】分组或聚类算法【英文标题】:Grouping or Clustering Algorithm 【发布时间】:2014-11-10 11:44:30 【问题描述】:数据库中的类似问题似乎比我的示例复杂得多。我想在一条线上聚集 100 个点。组数无关;点的接近程度更重要。
处理这个分组问题的术语、方法或算法是什么? K-means、汉明距离、层次凝聚、团还是完全连锁??
为了澄清起见,我已将两个示例减少到最低限度:
简单示例: 设置 A = 600, 610, 620, 630,其元素之间的差异集是 diff_A = 10, 20, 30, 10, 20, 10。然后我可以按如下方式分组:10、10、10、20、20 和 30。完成。
有问题的例子: 设置 B = 600, 609, 619, 630,差异集是 diff_B = 9, 10, 11, 19, 21, 30。我尝试以 1 的容差进行分组,即 1(或更小)的差异“足够相似”可以进行分组,但我遇到了一个悖论:9, 10 AND/OR 10, 11, 19 、21 和 30。
问题: 9 和 10 足够接近,10 和 11 足够接近,但 9 和 11 不是,那么我应该如何处理这些重叠的组?也许这个小例子是对称的,所以无法解决?
【问题讨论】:
partitioning an float array into similar segments (clustering)的可能重复 【参考方案1】:您为什么要处理成对的差异?考虑值 1、2、101、102、201、202。成对差异为 1,100,101,200,201,99,100,199,200,1,100,101,99,100,1
~200 的值没有任何信息。中间有一个不同的“集群”。您不应该将它们用于您的分析。
取而代之的是,拿起一本统计教科书并查找Kernel Density Estimation。不必费心寻找聚类 - 这些方法通常是为 multivariate 情况设计的。您的数据是一维的。它可以被排序(它可能已经被排序),并且可以利用它来获得更好的结果。
对于此类数据的密度估计存在完善的启发式方法,您可以将数据拆分到局部最小密度(或简单地以低密度阈值)。这要简单得多,但稳健可靠。您不需要为 k-means 设置诸如 k 之类的参数。在某些情况下,k-means 是一个不错的选择——它起源于信号检测,已知有 k=10 个不同的信号频率。今天,它主要用于多维数据。
另见:
Cluster one-dimensional data optimally? 1D Number Array Clustering partitioning an float array into similar segments (clustering) What clustering algorithm to use on 1-d data?【讨论】:
以上是关于分组或聚类算法的主要内容,如果未能解决你的问题,请参考以下文章