寻找算法:通过'相似性'聚类

时间:2012-04-16 12:48:59

标签: algorithm cluster-analysis

我有一组'向量',我需要根据它们的“相似性”对它们进行排序。

像这样:向量{1,0,0} {1,1,0} {0,1,0} {1,0,1}非常类似,最后应该彼此接近,但是向量{1,0,0} {8,0,0} {0,5,0} - 不是。

A和B之间的度量是max(abs(A [i] -B [i])),但是什么样的算法可以根据相对比较对事物进行排序?

UPD: 输入:N个向量的数组
输出:N个向量的数组,其中索引向量最近(例如arr [i] arr [i + 1])是'similiar'= arr [i]和arr [i + 1]之间的度量值尽可能低任何我,j。
度量 - 向量分量的最大差异

UPD2: 就像现在看来的那样,@ jogojapan是对的 - 我需要对矢量进行聚类,然后按照线性顺序逐个打印它们

4 个答案:

答案 0 :(得分:3)

这是由max norm (aka sup norm or l-infinity norm)引起的距离。如果通过对序列中的ordring进行排序,距离不足以创建线性排序。

答案 1 :(得分:2)

排序本质上是一维问题。你在这里描述的内容听起来更像是加权图,但目前还不清楚你的目标是什么。如果你试图找出与已知向量“最接近”的向量,你也可以从信息理论中找到一些概念,例如Hamming Distance

答案 2 :(得分:0)

嗯,显而易见的方法是(恕我直言,严重命名)“层次聚类”,它总是合并那些具有最小距离的聚类。您可以在那里插入指标。大多数实现都在O(n ^ 3)中,因此对大型数据集没有用。另外,你会得到一个难以阅读的巨大树形图。

您可能想尝试一下OPTICS。在维基百科上查找。它可能会很好地满足您的需求,因为它实际上排序点。它将从一个集群走到另一个集群,并且实际上可以生成分层(如“嵌套”)集群。一个好的实现应该在没有索引结构的O(n ^ 2)和带索引加速的O(n log n)中运行。

答案 3 :(得分:-1)

任何排序算法都可以为您提供所需的结果。

问题是你将如何比较你的向量。你只想比较它们吗?或其他什么?