Python实现简单协同推荐算法:基于用户行为的物品推荐
Python实现简单协同推荐算法:基于用户行为的物品推荐
本文将介绍使用Python实现一个简单的协同推荐算法,该算法基于用户对物品的行为数据,为用户推荐与他们已评分物品相似度最高的物品。
假设我们拥有一个CSV文件,包含以下列名:
- user_id:用户ID
- item_id:物品ID
- category_id:物品类别ID
- behave_type:用户行为类型(浏览、收藏、购买、加入购物车)
- date:行为发生日期
- time:行为发生时间
下面将逐步介绍如何使用Python代码实现该算法:
1. 读取CSV文件:
import pandas as pd
df = pd.read_csv('data.csv')
2. 根据用户对物品的行为(behave_type)进行评分:
# 将浏览和收藏行为的评分设为1,将购买和加入购物车行为的评分设为2
df['score'] = df['behave_type'].map({'浏览': 1, '收藏': 1, '购买': 2, '加入购物车': 2})
3. 构建用户-物品评分矩阵:
user_item_score = df.pivot_table(index='user_id', columns='item_id', values='score')
4. 计算相似度矩阵:
# 使用余弦相似度计算相似度矩阵
from sklearn.metrics.pairwise import cosine_similarity
item_sim_matrix = cosine_similarity(user_item_score.T)
5. 为用户推荐物品:
# 给用户推荐与其已评分物品相似度最高的前K个物品
def recommend_items(user_id, user_item_score, item_sim_matrix, K):
# 获取用户已评分物品的列表
rated_items = user_item_score.loc[user_id].dropna().index
# 获取与已评分物品相似度最高的前K个物品
sim_items = pd.Series(0, index=user_item_score.columns)
for item in rated_items:
sim_items += pd.Series(item_sim_matrix[item], index=user_item_score.columns)
sim_items.drop(rated_items, inplace=True)
sim_items.sort_values(ascending=False, inplace=True)
sim_items = sim_items[:K]
return sim_items
6. 使用示例:
user_id = '123'
K = 10
# 给用户123推荐10个物品
recommended_items = recommend_items(user_id, user_item_score, item_sim_matrix, K)
# 输出推荐结果
print('为用户{}推荐的物品:'.format(user_id))
for item_id, score in recommended_items.iteritems():
print('物品ID:{},相似度:{:.2f}'.format(item_id, score))
总结:
本文介绍了使用Python实现一个简单的协同推荐算法,该算法基于用户对物品的行为数据,为用户推荐与他们已评分物品相似度最高的物品。该算法简单易懂,易于实现,可作为推荐系统开发的基础。
需要注意的是,该算法仅仅是一个简单的示例,实际应用中需要根据具体需求进行改进和优化。
原文地址: https://www.cveoy.top/t/topic/mS9u 著作权归作者所有。请勿转载和采集!