集体智慧编程:提供推荐_欧几里得距离

欧几里得距离:m维空间中两个点之间的真实距离。

from math import sqrt

critics = {'Lisa':{'A':2.5,'B':3.5,'C':3.0,'D':3.5,'E':2.5,'F':3.0},
           'Gene':{'A':3.0,'B':3.5,'C':1.5,'D':5.0,'F':3.0,'E':3.5},
           'Michael':{'A':2.5,'B':3.0,'D':3.5,'F':4.0},
           'Claudia':{'B':3.5,'C':3.0,'F':4.5,'D':4.0,'E':2.5},
           'Mick':{'A':3.0,'B':4.0,'C':2.0,'D':3.0,'F':3.0,'E':2.0},
           'Jack':{'A':3.0,'B':4.0,'F':3.0,'D':5.0,'E':3.5},
           'Toby':{'B':4.5,'D':4.0,'E':1.0}}

"""""
欧几里得距离评价
Euclidean Distance Score
"""""
#书本算法
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_distance2(prefs,person1,person2):
    si = {}
    for item in prefs[person1]:
        if item in prefs[person2]:
            si[item] = 1
    
    if len(si) == 0:
        return 0
    
    sum = 0
    for item in si:
        sum = sum + pow((prefs[person1][item]-prefs[person2][item]),2)
        
    sim_dis = 1/(1+sqrt(sum))
    return sim_dis
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 给大神跪了! 一张图弄明白:从零维到十维空间 我们都爱地理2天前 文:商老师 事情是这样的,这周商老师给学生讲3d...
    简书jianshu1阅读 8,593评论 2 11
  • 人生苦短,必须把每一分每一秒都用在“真正想做的事”和“真正重要的事”上。真正宝贵、必要的东西,其实寥寥无几。把你折...
    吕氏冬夏阅读 2,761评论 0 2
  • 大三就喜欢上了一个作者,听她讲述她居住的地方深圳,心理埋了一颗种子觉得深圳就是一个神奇的地方,自己一定要去看一看。...
    拉西西菲阅读 1,332评论 0 0
  • 进行财务分析, 可得出:净资产、收支比率、消费与投资比率、现金流量、投资收益率、投资结构、资产负债率等, 为投资理...
    走向财务自由之路阅读 2,844评论 0 1
  • “我的老家,你不会知道,地球上你永远找它不着。”
    手感情怀阅读 1,001评论 0 0