gpt4 book ai didi

vector - 相似距离度量

转载 作者:行者123 更新时间:2023-12-04 06:20:46 24 4
gpt4 key购买 nike

像这样的向量

v1 = {0 0 0 1 1 0 0 1 0 1 1}
v2 = {0 1 1 1 1 1 0 1 0 1 0}
v3 = {0 0 0 0 0 0 0 0 0 0 1}

需要计算它们之间的相似度。汉明距离 v1v2是 4 并且介于 v1 之间和 v3也是 4。但是因为我对为我在一起的“1”组感兴趣 v2更类似于 v1然后 v3是。

是否有任何距离指标可以在数据中捕捉到这一点?

数据代表房屋的及时入住率,这就是为什么它对我很重要。 “1”表示被占用,“0”表示未被占用。

最佳答案

听起来您需要 cosine similarity措施:

similarity = cos(v1, v2) = v1 * v2 / (|v1| |v2|)

哪里 v1 * v2v1 之间的点积和 v2 :
v1 * v2 = v1[1]*v2[1] + v1[2]*v2[2] + ... + v1[n]*v2[n]

本质上,点积显示了两个向量中有多少元素在同一位置具有 1:if v1[k] == 1v2[k] == 1 ,然后最终总和(以及相似度)增加,否则不会改变。

您可以使用点积本身,但有时您希望将最终相似度标准化,例如介于 0 和 1 之间。在这种情况下,您可以除以 v1 的点积和 v2按它们的长度 - |v1||v2| .本质上,向量长度是向量与自身点积的平方根:
|v| = sqrt(v[1]*v[1] + v[2]*v[2] + ... + v[n]*v[n])

有了所有这些,很容易实现余弦距离如下(Python 中的示例):
from math import sqrt

def dot(v1, v2):
return sum(x*y for x, y in zip(v1, v2))

def length(v):
return sqrt(dot(v, v))

def sim(v1, v2):
return dot(v1, v2) / (length(v1) * length(v2))

请注意,我描述的是相似性(两个向量彼此接近多少),而不是距离(它们相距多远)。如果您需要精确的距离,您可以将其计算为 dist = 1 / sim .

关于vector - 相似距离度量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16496618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com