协同过滤是一种常用的推荐算法,它基于用户的历史行为和其他用户的行为进行推荐。在电影推荐中,协同过滤算法可以根据用户对电影的评分来推荐相似的电影给用户。
下面是一个简单的Python代码实现电影推荐的协同过滤算法:
import numpy as np
# 电影评分数据
ratings = {
'Alice': {'Transformers': 3, 'Star Wars': 4, 'The Dark Knight': 5},
'Bob': {'Transformers': 4, 'Star Wars': 3, 'The Dark Knight': 2},
'Charlie': {'Transformers': 5, 'Star Wars': 2, 'The Dark Knight': 4},
'Dave': {'Transformers': 2, 'Star Wars': 5, 'The Dark Knight': 3},
'Eve': {'Transformers': 3, 'Star Wars': 4, 'The Dark Knight': 1}
}
# 计算用户之间的相似度
def similarity(user1, user2):
movies1 = ratings[user1]
movies2 = ratings[user2]
# 计算共同评分的电影数量
common_movies = set(movies1.keys()) & set(movies2.keys())
# 如果没有共同评分的电影,返回0
if len(common_movies) == 0:
return 0
# 计算用户之间的相似度
sum_of_squares = sum([(movies1[movie] - movies2[movie])**2 for movie in common_movies])
return 1 / (1 + np.sqrt(sum_of_squares))
# 根据用户的历史评分进行电影推荐
def recommend_movies(user):
similarity_scores = [(other_user, similarity(user, other_user)) for other_user in ratings if other_user != user]
# 按相似度降序排序
similarity_scores.sort(key=lambda x: x[1], reverse=True)
# 取相似度最高的用户
most_similar_user = similarity_scores[0][0]
# 获取相似用户的电影评分
recommended_movies = {movie: rating for movie, rating in ratings[most_similar_user].items() if movie not in ratings[user]}
return recommended_movies
# 测试代码
user = 'Alice'
recommendations = recommend_movies(user)
print(f"Recommended movies for {user}: {recommendations}")
运行以上代码,将会输出Alice用户的电影推荐结果。
注意:以上代码仅是一个简单的示例,实际应用中还需要考虑更多的因素,如用户的兴趣偏好、电影的类型等。