如何在相似度量和差异度量(距离)之间进行转换?

135*_*498 8 metrics string-comparison levenshtein-distance

是否有一种通用的方法来转换相似度量和距离度量?

考虑一个相似性度量,例如两个字符串共有的2克数.

2-grams('beta', 'delta') = 1
2-grams('apple', 'dappled') = 4
Run Code Online (Sandbox Code Playgroud)

如果我需要将其提供给期望测量差异的优化算法,例如Levenshtein距离,该怎么办?

这只是一个例子......我正在寻找一个通用的解决方案,如果存在的话.比如如何从Levenshtein距离到相似度量?

我感谢您提供的任何指导.

hen*_*ung 10

d表示距离,s表示相似度.要将距离度量转换为相似性度量,我们需要首先使用d_norm = d/max(d)将d归一化为[0 1] .然后相似性度量由下式给出:

s = 1 - d_norm.

其中s在[0 1]范围内,1表示最高相似度(比较项目相同),0表示最低相似度(最大距离).


nim*_*cap 6

如果您的相似性度量在 0 到 1 之间,您可以使用以下之一:

1-s
sqrt(1-s)
-log(s)
(1/s)-1
Run Code Online (Sandbox Code Playgroud)


Oma*_*for 5

做 1/similarity 不会保持分布的属性。

最好的方法是距离(a->b)=最高相似度-相似度(a->b)。最高相似度是具有最大价值的相似度。因此,您翻转了您的分布。最高相似度变为 0 等


Hig*_*ark 1

similarity = 1/difference
Run Code Online (Sandbox Code Playgroud)

并留意difference = 0

  • 所以可以尝试使用“相似度= 1 /(差异+ 1)” (10认同)