【发布时间】:2011-07-13 12:24:56
【问题描述】:
v1 = [33, 24, 55, 56]
v2 = [32, 25, 51, 40]
v3 = [ ... ]
v4 = [ ... ]
通常,要找到与 v1 最相似的向量,我会使用 余弦相似度算法 对其他向量运行 v1。
现在,我有一组结构更复杂的向量:
v1 = [ { 'a': 4, 'b':9, 'c': 12 ... },
{ 'a', 3, 'g':3, 'b': 33 ... },
{ 'b', 1, 'k': 6, 'n': 19 ... },
...
]
v2 = [ {}, {}, {} ... ]
v3 = [ {}, {}, {} ... ]
v4 = [ {}, {}, {} ... ]
给定这个结构,你将如何计算相似度? (一个好的匹配应该是一个包含许多类似于 v1 的键的向量,这些键的值与 v1 的值非常相似)
btilly 的回答:
def cosine_sim_complex(v, w):
'''
Complex version of cosine similarity
'''
def complicated_dot(v, w):
dot = 0
for (v_i, w_i) in zip(v, w):
#{ _, _ }, {_, _}
for x in v_i:
if x in w_i:
dot += v_i[x] * w_i[x]
return float(dot)
length_v = float(complicated_dot(v, v) ** 0.5)
length_w = float(complicated_dot(w, w) ** 0.5)
score = complicated_dot(v, w) / length_v / length_w
return score
v1 = [ {'a':44, 'b':21 }, { 'a': 55, 'c': 22 } ]
v2 = [ {'a':99, 'b':21 }, { 'a': 55, 'c': 22 } ]
cosine_sim_complex(v1, v2)
1.01342687531
【问题讨论】:
-
你不能只应用与以前相同的方法,而只使用它们共有的键吗?
标签: python algorithm computer-science