【问题标题】:Similarity between two data sets or arrays两个数据集或数组之间的相似性
【发布时间】:2013-11-17 21:10:16
【问题描述】:

假设我有一个如下所示的数据集:

{A:1, B:3, C:6, D:6}

我还有一个其他集合的列表来比较我的特定集合:

{A:1, B:3, C:6, D:6},  
{A:2, B:3, C:6, D:6},  
{A:99, B:3, C:6, D:6},  
{A:5, B:1, C:6, D:9},  
{A:4, B:2, C:2, D:6}

我的条目可以可视化为一个表格(有四列,A、B、C、D 和 E)。

如何找到最相似的集合? 对于此示例,第 1 行是完美匹配,第 2 行是紧随其后的,而第 3 行则相距甚远。

我正在考虑计算一个简单的增量,例如:Abs(a1 - a2) + Abs(b1 - b2) + etc 并且可能会为具有最佳增量的条目获取 correlation value

这是一种有效的方式吗? 这个问题的名称是什么?

【问题讨论】:

  • tge 值 A、B、C 和 D 是否始终不变?
  • 我将永远拥有 A B C D 列是的。他们推崇的价值观当然会改变,但总会有 4 个“列”
  • 您将如何解决数千条记录的问题?您会将每个与另一个进行比较,以及存储在哪个 DS 中以便有效访问?

标签: algorithm correlation similarity


【解决方案1】:

“距离”或“相似度”可以指这类问题。

正如您所做的那样,简单地计算绝对差的总和应该可以很好地工作。这称为Manhattan distance。用数学术语来说,应该是:∑<sub>x ∈ (a,b,c,d)</sub> Abs(x<sub>1</sub> - x<sub>2</sub>)

虽然最好的衡量标准实际上取决于你想要什么行为。

比率可能是一个更好的主意。

考虑类似1000000, 5, 5, 5 vs 999995, 5, 5, 51000000, 0, 5, 5

根据上面的公式,第一个与第二个和第三个具有相同的相似性。

如果不希望这样做(因为999995 可以被认为非常接近1000000,而0 可以被认为距离5 很远),你应该除以两者中的最大值计算每个距离。

∑<sub>x ∈ (a,b,c,d)</sub> [ Abs(x<sub>1</sub> - x<sub>2</sub>) / max(x<sub>1</sub>, x<sub>2</sub>) ]

这会将每个数字置于 0 和 1 之间,这是值之间的百分比差异。

这意味着,对于我们上面的例子,我们认为1000000, 5, 5, 5999995, 5, 5, 5 非常相似(因为上面的总和将是|1000000-999995|/1000000 + 0 + 0 + 0 = 0.000005)并且1000000, 5, 5, 51000000, 0, 5, 5 将被认为很相似更多不同(因为总和将是|0+5|/5 + 0 + 0 + 0 = 1)。

如果可能出现负值,则需要适当更新公式。您需要根据您要解决的问题来决定如何处理它。 10 to 0 应该与5 to -5 或多或少不同(或等同于)吗?

元素在某种程度上可以互换吗?

考虑类似A=1, B=2, C=3, D=4A=4, B=1, C=2, D=3

虽然每个单独的元素都发生了变化,但该集合仍然由 1, 2, 3, 4 组成,并且每个元素仅移动了 1 个位置(4 除外)。

对于某些问题,这根本不重要,上面的内容与从A=1, B=11, C=21, D=31A=2, B=12, C=22, D=32 没有什么不同。不过,对于其他问题,它可能非常相关。

对于像字符串或数组这样的序列,插入、删除或移动元素的想法可能是有意义的。如果是这样,你会想看看edit distance,其中一个常见的就是Levenshtein distance。您可能还想考虑修改它以考虑单个值的差异程度(但这不是微不足道的)。

对于像集合这样的东西,元素是可以互换的,但元素上并没有严格的顺序({1, 2, 3}{3, 1, 2} 相同)。如果是这种情况,最简单的可能是对值进行排序并仅使用编辑距离。您还可以通过某种方式同时循环遍历两者,这样您就可以更轻松地考虑值之间的差异。

【讨论】:

  • 为什么会分帮助?
  • @Dukeling 假设您有数千个或 10K 条目,您必须在所有 10K 中为每个条目找到最相似的项目(例如 5 个)。你会循环所有条目吗?
【解决方案2】:

你的问题让我想起了寻找Hamming distance。基本上,两个对象之间的汉明距离是一个对象中必须更改以使其与另一个对象匹配的元素的数量。也有类似的措施(Damerau–Levenshtein distanceEuclidean distance 等)。

在如何实现这一点上,您有多种选择。例如,{1,3,4} 和 {1,7,4} 之间的距离是 1(因为一个元素发生了变化)还是 4(因为变化的幅度)?您如何实际定义距离很大程度上取决于您的问题的上下文,并且不一定有正确的答案。

【讨论】:

  • 这将是幅度
  • @Anders 我会考虑你建议的方法,或者Euclidean distance 然后。
  • 谢谢@Nathaniel,我会研究欧几里得距离。我不是特别擅长数学,所以对我提出的解决方案获得反馈意味着很多! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多