使用python基于用户的协同过滤算法对于实现包含用户id、商品id及用户对商品的评分三列的数据集向用户进行商品推荐的代码
时间: 2023-06-11 10:07:57 浏览: 61
下面是一个基于Python的用户协同过滤算法的示例代码:
```python
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
# 读取数据集
data = pd.read_csv("data.csv")
# 创建用户-商品评分矩阵
ratings_matrix = data.pivot_table(index="user_id", columns="item_id", values="rating")
# 计算用户相似度矩阵
user_similarity = cosine_similarity(ratings_matrix)
# 为每个用户推荐商品
def recommend_items(user_id, ratings_matrix, user_similarity, n=5):
# 获取用户对所有商品的评分
user_ratings = ratings_matrix.loc[user_id].dropna()
# 获取与该用户最相似的前n个用户
similar_users = pd.Series(user_similarity[user_id]).sort_values(ascending=False)[:n+1].index[1:]
# 获取这些相似用户对所有商品的评分
similar_ratings = ratings_matrix.loc[similar_users]
# 计算每个商品的加权平均分数
weighted_ratings = similar_ratings.apply(lambda x: x * user_similarity[user_id][x.name], axis=0).sum()
# 移除用户已评分的商品
weighted_ratings = weighted_ratings.drop(user_ratings.index)
# 返回评分最高的n个商品
recommended_items = weighted_ratings.sort_values(ascending=False)[:n]
return recommended_items
# 为用户1推荐商品
recommend_items(1, ratings_matrix, user_similarity, n=5)
```
在这段代码中,我们首先读取了一个包含用户ID、商品ID和评分的数据集,并将其转换成了一个用户-商品评分矩阵。然后,我们使用余弦相似度计算了每对用户之间的相似度,并使用这些相似度来为每个用户推荐商品。最后,我们为用户1推荐了5个商品。
需要注意的是,这只是一个示例代码,实际应用中还需要进行一些调整和优化,比如对相似用户进行加权平均等。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)