协同过滤算法代码实例
时间: 2023-10-12 18:06:15 浏览: 92
协同过滤算法是一种用于推荐系统的重要思想之一。它可以根据用户的历史行为数据(例如评分、点击等)来计算用户之间或物品之间的相似度,然后根据相似度来进行推荐。协同过滤算法包括基于用户的协同过滤(UserCF)和基于物品的协同过滤(ItemCF)两种方法。
基于用户的协同过滤算法的代码实例:
```
# 假设用户评分数据以字典形式存储,键为用户ID,值为评分向量
user_ratings = {
'user1': {'item1': 5, 'item2': 3, 'item3': 4},
'user2': {'item1': 2, 'item3': 5},
'user3': {'item2': 4, 'item4': 2}
}
# 计算用户之间的相似度(这里使用皮尔逊相关系数作为相似度度量)
def pearson_correlation(user1, user2):
common_items = set(user_ratings[user1].keys()) & set(user_ratings[user2].keys())
if len(common_items) == 0:
return 0
sum_xy = sum(user_ratings[user1][item] * user_ratings[user2][item] for item in common_items)
sum_x = sum(user_ratings[user1][item] for item in common_items)
sum_y = sum(user_ratings[user2][item] for item in common_items)
sum_x2 = sum(user_ratings[user1][item] ** 2 for item in common_items)
sum_y2 = sum(user_ratings[user2][item] ** 2 for item in common_items)
num = sum_xy - (sum_x * sum_y / len(common_items))
den = ((sum_x2 - (sum_x ** 2 / len(common_items))) * (sum_y2 - (sum_y ** 2 / len(common_items)))) ** 0.5
if den == 0:
return 0
return num / den
# 根据用户之间的相似度进行推荐
def user_based_recommendation(target_user):
similar_users = {}
for user in user_ratings:
if user != target_user:
similar_users[user] = pearson_correlation(target_user, user)
sorted_users = sorted(similar_users.items(), key=lambda x: x[1], reverse=True)
recommendations = {}
for item in user_ratings[target_user]:
for user, similarity in sorted_users:
if item not in user_ratings[user] and item not in recommendations:
recommendations[item] = similarity
sorted_recommendations = sorted(recommendations.items(), key=lambda x: x[1], reverse=True)
return sorted_recommendations
# 示例使用
target_user = 'user1'
recommendations = user_based_recommendation(target_user)
for item, similarity in recommendations:
print(item)
```
以上是基于用户的协同过滤算法的一个简单的代码实例。你可以根据具体的需求和数据结构进行适当的修改。
阅读全文