我现在有个csv文件列名为user_iditem_idcategory_idbehave_typedatetimepython实现简单协同推荐算法
- 读取csv文件:
import pandas as pd
df = pd.read_csv('data.csv')
- 根据用户对物品的行为(behave_type)进行评分:
# 将浏览和收藏行为的评分设为1,将购买和加入购物车行为的评分设为2
df['score'] = df['behave_type'].map({'浏览': 1, '收藏': 1, '购买': 2, '加入购物车': 2})
- 构建用户-物品评分矩阵:
user_item_score = df.pivot_table(index='user_id', columns='item_id', values='score')
- 计算相似度矩阵:
# 使用余弦相似度计算相似度矩阵
from sklearn.metrics.pairwise import cosine_similarity
item_sim_matrix = cosine_similarity(user_item_score.T)
- 为用户推荐物品:
# 给用户推荐与其已评分物品相似度最高的前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
- 使用示例:
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))
原文地址: https://www.cveoy.top/t/topic/bp6d 著作权归作者所有。请勿转载和采集!