And*_*ers 6 algorithm similarity correlation
假设我有一个如下所示的数据集:
{A:1, B:3, C:6, D:6}
Run Code Online (Sandbox Code Playgroud)
我还有一个其他集的列表来比较我的具体集:
{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}
Run Code Online (Sandbox Code Playgroud)
我的条目可以显示为表格(有四列,A,B,C,D和E).
如何找到最相似的集合?对于此示例,第1行是完美匹配,第2行是第二行,而第3行是相当远的.
我正在考虑计算一个简单的delta,例如:Abs(a1 - a2) + Abs(b1 - b2) + etc并且可能获得具有最佳增量的条目的相关值.
这是一种有效的方式吗?这个问题的名称是什么?
“距离”或“相似性”可以指这类问题。
\n正如您所做的那样,简单地计算绝对差值之和应该可以很好地工作。这称为曼哈顿距离。用数学术语来说,它是:。\xe2\x88\x91x \xe2\x88\x88 (a,b,c,d) Abs(x1 - x2)
尽管最好的措施实际上取决于您想要什么行为。
\n比率可能是一个更好的主意。
\n考虑类似1000000, 5, 5, 5vs999995, 5, 5, 5和 的东西1000000, 0, 5, 5。
根据上面的公式,第一个与第二个和第三个具有相同的相似度。
\n如果这不是我们想要的(999995可以认为非常接近1000000,而0可以认为非常远离5),则在计算每个距离时应除以两者中的最大值。
\xe2\x88\x91x \xe2\x88\x88 (a,b,c,d) [ Abs(x1 - x2) / max(x1, x2) ]
这会将每个数字置于 0 和 1 之间,即值之间的百分比差异。
\n这意味着,对于我们上面的例子,我们认为1000000, 5, 5, 5和999995, 5, 5, 5非常相似(因为上面的总和将是|1000000-999995|/1000000 + 0 + 0 + 0 = 0.000005)并且1000000, 5, 5, 5和1000000, 0, 5, 5将被认为更加不同(因为总和将是|0+5|/5 + 0 + 0 + 0 = 1)。
如果可能出现负值,则需要适当更新公式。您需要根据您要解决的问题来决定如何处理该问题。应该10 to 0或多或少不同于(或相当于)5 to -5?
考虑类似A=1, B=2, C=3, D=4和A=4, B=1, C=2, D=3东西。
虽然每个单独的元素都发生了变化,但集合仍然由以下组成1, 2, 3, 4,并且每个元素只是简单地移动了 1 个位置(除了4)。
对于某些问题,这根本不重要,并且上面的内容与从 到 没有什么A=1, B=11, C=21, D=31不同A=2, B=12, C=22, D=32。对于其他问题,它可能非常相关。
对于像字符串或数组这样的序列,插入、删除或移动元素的想法是有意义的。如果是这样,您需要查看编辑距离,其中常见的一个是编辑距离。您可能还想考虑修改它以考虑各个值的差异有多大(但这并不是微不足道的)。
\n对于像 set 这样的东西,元素是可以互换的,但元素上并没有真正的严格顺序({1, 2, 3}与{3, 1, 2})。如果是这种情况,最简单的方法可能是对值进行排序并仅使用编辑距离。您还可以以某种方式同时循环遍历这两个值,这将使您可以更轻松地考虑值之间的差异。