python协同过滤算法实现电影推荐

协同过滤是一种常用的推荐算法,它基于用户的历史行为和其他用户的行为进行推荐。在电影推荐中,协同过滤算法可以根据用户对电影的评分来推荐相似的电影给用户。

下面是一个简单的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用户的电影推荐结果。

注意:以上代码仅是一个简单的示例,实际应用中还需要考虑更多的因素,如用户的兴趣偏好、电影的类型等。

你可能感兴趣的:(Python,算法,python)