计算欧式距离分数
欧式距离分数:代表一种相似度指标,可以计算两个数据点之间的欧几里得距离
以电影推荐系统为例 代码如下:
# -*- coding:utf-8 -*-
'''
计算欧式距离分数
'''
import json
import numpy as np
# 定义一个计算两个用户之间欧几里得距离的函数 user1和user2
def euclidean_score(dataset, user1, user2):
if user1 not in dataset:
raise TypeError('User'+user1+'not present in the dataset')
if user2 not in dataset:
raise TypeError('User'+user2+'not present in the dataset')
# 提取两个用户均评过分的电影
rated_by_both = {}
for item in dataset[user1]:
if item in dataset [user2]:
rated_by_both[item]=1
# 如果两个用户均没评分过,则得分为0
if len(rated_by_both)==0:
return 0
# 计算平方和的平方根 并将其归一化 使得评分取值在0-1之间
squared_difference = []
for item in dataset[user1]:
if item in dataset[user2]:
squared_difference.append(np.square(dataset[user1][item]-dataset[user2][item]))
return 1/(1+np.sqrt(np.sum(squared_difference)))
# 加载数据文件中的json格式文件
if __name__ == "__main__":
data_file = 'movie_ratings.json'
# 上下文管理器
with open(data_file,'r') as f:
data = json.loads(f.read())
# 假定两个随机用户,计算欧式距离分数
user1='John Carson'
user2='Michelle Peterson'
print '\n欧几里得距离分数: '
print euclidean_score(data,user1,user2)
输出结果如下:
欧几里得距离分数:
1.0