Making Recommendations

Euclidean Distance Score

/**
 *@author zhuang_yongxin  2015/12/12
 */

from math import sqrt

#构造一个涉及影评者及其对几部影片评分情况的字典数据集
critics = {
    'Lisa Rose':{
        'Lady in the Water':2.5, 'Snakes on a Plane':3.5, 'Just My Luck':3.0,
        'Superman Returns':3.5, 'You, Me and Dupree':2.5, 'The Night Listener':3.0
    },
    'Gene Seymour':{
        'Lady in the Water':3.0, 'Snakes on a Plane':3.5, 'Just My Luck':1.5,
        'Superman Returns':5.0, 'You, Me and Dupree':3.5, 'The Night Listener':3.0
    },
    'Michael Phillips':{
        'Lady in the Water':2.5, 'Snakes on a Plane':3.0, 
        'Superman Returns':3.5, 'The Night Listener':4.0
    },
    'Claudia Puig':{ 
        'Snakes on a Plane':3.5, 'Just My Luck':3.0,'Superman Returns':4.0, 
        'The Night Listener':4.5, 'You, Me and Dupree':2.5
    },
    'Mick LaSalle':{
        'Lady in the Water':3.0, 'Snakes on a Plane':4.0, 'Just My Luck':2.0,
        'Superman Returns':3.0, 'You, Me and Dupree':2.0, 'The Night Listener':3.0
    },
    'Jack Matthews':{
        'Lady in the Water':3.0, 'Snakes on a Plane':4.0, 'Superman Returns':5.0, 
        'You, Me and Dupree':3.5, 'The Night Listener':3.0
    },
    'Toby':{
        'Snakes on a Plane':3.5, 'Superman Returns':3.5, 'You, Me and Dupree':2.5
    }
}

#返回一个有关person1和person2的基于距离的相似度评价
def sim_distance(prefs, person1, person2):
    #得到shared_items的列表
    si = {}
    for item in prefs[person1]:
        if item in prefs[person2]:
            si[item] = 1

    #如果两者没有共同之处,返回0
    if len(si) == 0:
        return 0

    #计算所有差值的平方和
    sum_of_squares = sum(pow(prefs[person1][item] - prefs[person2][item],2) for item in si)

    return 1/(1+sqrt(sum_of_squares))

if __name__ == '__main__':
    print(sim_distance(critics, 'Lisa Rose', 'Gene Seymour'))
  1. 中文名称叫做欧几里得距离评价算法,根据我的注释应该很好懂
  2. 需要解释的是sum()函数中的列表生成式及字典迭代的问题,一个demo解释之。
    这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值