如何将欧几里得距离转换为范围 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,如余弦相似度?的主要内容,如果未能解决你的问题,请参考以下文章

借助余弦相似度辅助背单词

借助余弦相似度辅助背单词

识别差异的最佳方法:欧几里得距离、余弦距离还是简单减法?

数据挖掘中的度量方法

在 TensorFlow Embedding 中有效地找到最接近的词

必备!机器学习中需要掌握的9种距离度量方法!