写一个使用用户点赞数据完成的基于用户的协同过滤算法
时间: 2023-10-20 12:10:16 浏览: 74
基于用户的协同过滤算法是一种个性化推荐算法,它基于用户之间的相似性来推荐物品。其核心思想是:如果两个用户具有相似的兴趣,那么他们对某个物品的评价也可能相似。下面是一个使用用户点赞数据完成的基于用户的协同过滤算法的实现:
1. 数据集准备
我们假设有一个用户点赞数据集,其中每行记录表示一个用户对一个物品的点赞情况,例如:
```
user_id,item_id,like
1,101,1
1,102,1
1,103,0
2,101,1
2,102,0
2,103,1
3,101,0
3,102,1
3,103,1
```
其中,`user_id` 表示用户的唯一标识,`item_id` 表示物品的唯一标识,`like` 表示用户对该物品的点赞情况,1表示点赞,0表示未点赞。
2. 计算用户相似性
我们可以使用余弦相似度来计算用户之间的相似性,具体步骤如下:
(1)对于每个用户,计算其点赞物品的向量表示,例如用户1点赞的物品为[101, 102],则其向量表示为[1, 1, 0]。
(2)对于每对用户,计算它们的点赞向量的余弦相似度,得到用户之间的相似性矩阵。
```
1 2 3
1 1.00 0.33 0.29
2 0.33 1.00 0.50
3 0.29 0.50 1.00
```
3. 为用户推荐物品
对于某个用户,我们可以通过以下步骤来为其推荐物品:
(1)找到与该用户最相似的K个用户,可以通过相似性矩阵按相似度大小进行排序,取前K个相似用户。
(2)对于每个相似用户,找到其点赞但该用户未点赞的物品,这些物品就是候选推荐物品。
(3)根据候选物品的点赞次数进行排序,选出排名前N的物品推荐给该用户。
下面是一个Python实现的示例代码:
```python
import pandas as pd
import numpy as np
# 加载数据
data = pd.read_csv('data.csv')
# 构建用户-物品矩阵
user_item_matrix = data.pivot(index='user_id', columns='item_id', values='like')
# 计算用户相似性矩阵
similarity_matrix = pd.DataFrame(np.dot(user_item_matrix, user_item_matrix.T),
index=user_item_matrix.index,
columns=user_item_matrix.index)
similarity_matrix = similarity_matrix.div(similarity_matrix.sum(axis=1), axis=0)
# 定义推荐函数
def recommend(user_id, K=10, N=5):
# 找到与该用户最相似的K个用户
similar_users = similarity_matrix.loc[user_id].sort_values(ascending=False)[:K]
# 找到候选推荐物品
candidate_items = set()
for sim_user_id, similarity in similar_users.iteritems():
candidate_items |= set(user_item_matrix.loc[sim_user_id][user_item_matrix.loc[user_id].isnull()].dropna().index)
# 根据点赞次数排序,选出排名前N的物品
items_rank = pd.Series(index=candidate_items)
for item_id in candidate_items:
items_rank[item_id] = user_item_matrix[item_id].dropna().sum()
items_rank = items_rank.sort_values(ascending=False)[:N]
return items_rank.index.tolist()
# 测试推荐函数
print(recommend(1))
```
上述代码实现了一个基于用户的协同过滤推荐算法,可以根据用户点赞数据为用户推荐物品。
阅读全文