python - 如何将向量之间的欧氏距离转换为相似度分数

标签 python vector numpy distance similarity

下面是我计算向量之间欧氏距离的代码,以及我转换后的数据集(向量)的片段。

import itertools
import numpy as np

vect=[[2, 1, 1, 1, 1, 3, 4, 2, 5, 1],
 [1, 5, 2, 1, 1, 1, 1, 1, 1, 2],
 [2, 1, 1, 1, 2, 1, 1, 1, 1, 1]]

for u1, u2 in itertools.combinations(vect, 2):
    x = np.array(u1)
    y = np.array(u2)
    space = np.linalg.norm(y - x)
    print space

向量之间的欧氏距离为:

7.0
5.56776436283
4.472135955

我的目标是计算向量之间的相似度并为每次比较输出相似度分数。典型的相似度分数介于 0 和 1 之间,0 表示不相似,1 表示完全相似。这里的问题是如何将欧几里德距离转换为相似度分数? 有人建议这个公式:1/1+d(P1, P2) 即欧氏距离的倒数=相似度分数。有什么建议吗?谢谢

最佳答案

那里有很多相似性度量。正如 user2357112 所说,最好的 取决于您的应用程序。我建议看看这里列出的一些内核:

http://crsouza.blogspot.co.uk/2010/03/kernel-functions-for-machine-learning.html

我发现卡方核在我的应用程序中是一个很好的默认选择 - 特别是当向量是直方图时。

如果你有一个数据子集,你已经知道哪些数据是你想要彼此相似的,我会建议尝试一些不同的内核并绘制这些样本的结果相似性矩阵(如果你有 100 个测试样本,你会得到一个 100x100 的相似矩阵,您可以使用 matplotlib.pyplot 中的 imshow 方法将其简单地绘制为热图)。

关于python - 如何将向量之间的欧氏距离转换为相似度分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18045321/

相关文章:

python - Sabre GetReservation wsdl 不包含 PriceQuoteServices 的架构

python - 使用librosa加载文件夹和子文件夹时发生类型转换错误

python - 使用 K-Nearest 聚类颜色的有效方法

python - Tkinter session 在退出时仍处于事件状态?

python - 在安装之前检查可用的 pip 包版本

python - Django 国际化语言代码

未分配 C++ vector 值

c++ - 有没有办法在 vector 常数时间的中间插入一些东西

python - 在 C++ 中嵌入 Python。传递接收列表列表的字符串 vector

python - 嵌套 numpy 运算