python推荐算法
时间: 2023-10-28 08:57:30 浏览: 24
以下是一个简单的 Python 推荐算法 demo,用于基于用户相似性进行电影推荐:
```python
# 导入必要的库
import numpy as np
import pandas as pd
# 创建评分数据集
ratings_data = {
'user_id': ['user1', 'user1', 'user1', 'user2', 'user2', 'user2'],
'movie_id': ['movie1', 'movie2', 'movie3', 'movie1', 'movie2', 'movie3'],
'rating': [5, 3, 4, 4, 2, 1]
}
ratings_df = pd.DataFrame(ratings_data)
# 创建用户相似度矩阵
users = np.unique(ratings_df['user_id'])
num_users = len(users)
similarity_matrix = np.zeros((num_users, num_users))
for i in range(num_users):
for j in range(num_users):
user1_ratings = ratings_df[ratings_df['user_id'] == users[i]]['rating']
user2_ratings = ratings_df[ratings_df['user_id'] == users[j]]['rating']
similarity_matrix[i,j] = np.corrcoef(user1_ratings, user2_ratings)[0,1]
# 获取目标用户的相似用户列表
target_user = 'user1'
target_user_index = np.where(users == target_user)[0][0]
similar_users_index = np.argsort(similarity_matrix[target_user_index])[::-1][1:]
# 获取目标用户未评分的电影列表
target_user_unrated_movies = ratings_df[ratings_df['user_id'] == target_user]['movie_id']
all_movies = np.unique(ratings_df['movie_id'])
target_user_unrated_movies = np.setdiff1d(all_movies, target_user_unrated_movies)
# 计算电影推荐度
recommendations = {}
for movie in target_user_unrated_movies:
rating_sum = 0
similarity_sum = 0
for similar_user_index in similar_users_index:
similar_user_rating = ratings_df[(ratings_df['user_id'] == users[similar_user_index]) &
(ratings_df['movie_id'] == movie)]['rating']
if len(similar_user_rating) > 0:
similarity = similarity_matrix[target_user_index, similar_user_index]
rating_sum += similarity * similar_user_rating.values[0]
similarity_sum += similarity
if similarity_sum > 0:
recommendations[movie] = rating_sum / similarity_sum
# 输出电影推荐列表
if len(recommendations) > 0:
sorted_recommendations = sorted(recommendations.items(), key=lambda x: x[1], reverse=True)
print('电影推荐列表:')
for recommendation in sorted_recommendations:
print(recommendation[0])
else:
print('没有电影可以推荐!')
```
以上代码使用 Pearson 相关系数计算用户相似度,然后使用加权平均值计算电影推荐度。可以根据具体需求修改代码中的相似度计算方法和推荐度计算方法。