使用python基于用户的协同过滤算法写一段对包含用户id及用户所浏览的商品id两列的数据集中的用户做商品推荐
时间: 2023-06-13 19:05:23 浏览: 87
好的,我可以给你一个基于Python的简单的用户协同过滤推荐算法。这里假设你的数据集已经包含了用户ID和浏览的商品ID。
首先,我们需要将数据集转换成一个用户-商品矩阵。这可以方便地使用pandas库完成:
```python
import pandas as pd
data = pd.read_csv('your_dataset.csv')
user_item_matrix = data.pivot_table(index='user_id', columns='item_id', values='rating')
```
接下来,我们可以计算用户之间的相似度。这里我们使用余弦相似度作为相似性度量:
```python
from sklearn.metrics.pairwise import cosine_similarity
user_similarity = cosine_similarity(user_item_matrix)
```
然后,我们可以使用用户相似性矩阵来预测用户对未浏览商品的评分,并推荐最高评分的商品:
```python
def get_user_recommendations(user_id, user_item_matrix, user_similarity, top_n=5):
# 找到用户之间的相似度
sim_scores = list(enumerate(user_similarity[user_id]))
# 按相似度排序
sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
# 取出前n个最相似的用户
sim_scores = sim_scores[1:top_n+1]
# 找到这些用户喜欢的商品
similar_users = [i[0] for i in sim_scores]
similar_items = user_item_matrix.loc[similar_users].sum().dropna()
# 找到用户还没浏览过的商品
user_items = user_item_matrix.loc[user_id].dropna().index
recommendations = similar_items.drop(user_items).sort_values(ascending=False).head(top_n)
return recommendations
```
现在,我们可以为每个用户生成推荐列表:
```python
recommendations = {}
for user_id in user_item_matrix.index:
recommendations[user_id] = get_user_recommendations(user_id, user_item_matrix, user_similarity)
```
这样,我们就可以为每个用户生成一个包含最高评分的商品列表了。你可以根据需要对这个简单的推荐算法进行修改和改进。
阅读全文