如何将欧几里得距离转换为范围 0 和 1,如余弦相似度?
Posted
技术标签:
【中文标题】如何将欧几里得距离转换为范围 0 和 1,如余弦相似度?【英文标题】:How to convert Euclidean distance to range 0 and 1 like Cosine Similarity? 【发布时间】:2017-09-27 01:16:28 【问题描述】:想将欧几里得距离映射到 [0, 1] 范围内,有点像向量的余弦相似度。
例如
input output
0 1.0
1 0.9 approximate
2 0.8 to 0.9 somewhere
inf 0.0
我尝试了公式1/(1+d)
,但它从 1.0 下降得太快了。
【问题讨论】:
你的英语已经足够好了。但是,缺少您的数学细节。 “喜欢”余弦相似度并不能告诉我们您需要什么。我们所知道的是,您想将某些东西映射到范围 [0,1] 中。为什么 1 映射到 0.9,具体来说? 1/(1+d) 怎么不正确? d1 和 d2 的距离 = 1,也就是说,d1 和 d2 相似,对应的余弦相似度为 0,9 或其他数字。 如果距离 d1 和 d2 = 2 => 1/1+d = 0,3。我希望该值等于 0,8 或 0,9,因为 d1 和 d2 靠得很近。 我们需要您详细说明您想要什么样的映射。你需要用更清晰的术语来描述你对“关闭”的想法。您给我们的只是端点和其他两个数据点的模糊概念。 @Prune 非常感谢您编辑我的问题,这正是我的意思 【参考方案1】:您似乎希望分数的分母增长得更慢(分母是底部,到目前为止您拥有 (d+1) )。有多种方法可以处理这个问题。例如,为 d 尝试较低的幂,例如
1 / (1 + d**(0.25))
...或分母的指数衰减,例如
1 / (1.1 ** d)
...或使用三角函数来调整映射,例如
1 - tanh(d)
这些家庭中的某一个对你有用吗?
【讨论】:
以上是关于如何将欧几里得距离转换为范围 0 和 1,如余弦相似度?的主要内容,如果未能解决你的问题,请参考以下文章