在看《集体智慧编程》的时候跟着书顺手写的
欧几里得距离
# 返回person1 与 person2 基于欧几里得距离的相似度评价
# sum_of squares = 所有 p1 与 p2 共同评价的物品的分数差的平方之和ß
# 即在 "p1 与 p2 共同评价商品数量"维度 的空间中的欧几里得距离ß
def sim_distance(prefs, person1, person2):
si = {}
for item in prefs[person1]:
if item in prefs[person2]:
si[item] = 1
if len(si) == 0:
return 0
sum_of_squares = sum(
[pow(prefs[person1][item] - prefs[person2][item], 2) for item in prefs[person1] if item in prefs[person2]])
return 1 / (1 + sqrt(sum_of_squares))
曼哈顿距离
# 曼哈顿距离
def sim_manhattan(prefs, person1, person2):
si = {}
for item in prefs[person1]:
if item in prefs[person2]:
si[item] = 1
if len(si) == 0:
return 0
sum_of_manhattan = sum(
[abs(prefs[person1][item] - prefs[p