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表示最低相似度(最大距离).
如果您的相似性度量在 0 到 1 之间,您可以使用以下之一:
1-s
sqrt(1-s)
-log(s)
(1/s)-1
Run Code Online (Sandbox Code Playgroud)
做 1/similarity 不会保持分布的属性。
最好的方法是距离(a->b)=最高相似度-相似度(a->b)。最高相似度是具有最大价值的相似度。因此,您翻转了您的分布。最高相似度变为 0 等
similarity = 1/difference
Run Code Online (Sandbox Code Playgroud)
并留意difference = 0