Python协同过滤推荐算法的核心代码
时间: 2024-05-18 19:09:20 浏览: 96
Python中实现协同过滤推荐算法的主要思路是通过计算用户之间的相似度来预测用户对物品的评分。以下是协同过滤推荐算法的核心代码:
```
# 计算用户相似度
def similarity(data, user1, user2):
# 找出两个用户都评过分的物品
si = {}
for item in data[user1]:
if item in data[user2]:
si[item] = 1
# 如果两个用户没有共同评过分的物品,则返回0
if len(si) == 0:
return 0
# 计算两个用户共同评分物品的评分之和
sum1 = sum([data[user1][item] for item in si])
sum2 = sum([data[user2][item] for item in si])
# 计算两个用户共同评分物品的评分平方之和
sum1Sq = sum([pow(data[user1][item], 2) for item in si])
sum2Sq = sum([pow(data[user2][item], 2) for item in si])
# 计算两个用户共同评分物品的乘积之和
pSum = sum([data[user1][item] * data[user2][item] for item in si])
# 计算皮尔逊相关系数
num = pSum - (sum1 * sum2 / len(si))
den = sqrt((sum1Sq - pow(sum1, 2) / len(si)) * (sum2Sq - pow(sum2, 2) / len(si)))
if den == 0:
return 0
return num / den
# 为指定用户推荐物品
def recommend(data, user):
# 找出与指定用户相似度最高的用户
simList = [(otherUser, similarity(data, user, otherUser)) for otherUser in data if otherUser != user]
simList.sort(key=lambda x: x, reverse=True)
topSimUser = simList
# 找出指定用户没有评分的物品,并计算推荐度
recommendations = {}
for item in data[topSimUser]:
if item not in data[user]:
recommendations[item] = data[topSimUser][item] * simList[1]
# 按推荐度排序,并返回推荐结果
return sorted(recommendations.items(), key=lambda x: x, reverse=True)
```
以上代码实现了协同过滤推荐算法中的基本功能,通过计算用户之间的相似度来预测用户对物品的评分,并为指定用户推荐物品。当然,这只是一个基础的示例,实际应用中还需要对数据进行处理、优化和完善。
阅读全文