基于领域的协同过滤——推荐系统surpriseKNN家族

这篇博客介绍了基于Surprise库的协同过滤算法,包括UserCF和ItemCF。通过KNNBasic、KNNWithMeans、KNNWithZScore和KNNBaseline四种算法进行用户和物品的相似度计算,以预测用户对物品的评分并进行推荐。代码示例展示了如何使用Surprise库加载数据集、训练模型并进行预测,为推荐系统提供了实际操作指南。
摘要由CSDN通过智能技术生成

基于领域的协同过滤主要有两种:UserCF、ItemCF

基于用户的协同过滤(UserCF)

利用用户的相似度来计算用户的相似度
step1:找到和目标用户兴趣相似的用户集合,用Jaccard相似度、余弦相似度等相似度计算方法;
step2:用户u对物品i的相似度,等价于K个邻居对物品i的兴趣度;
step3:把和用户兴趣相同的k个邻居喜欢的物品进行汇总,去掉用户u已经喜欢过的物品,剩下的按照从大到小进行推荐。

基于物品的协同过滤(ItemCF)

利用用户行为相似度计算物品的相似度:
step1:计算物品之间相似度;
step2:用户u对物品i的兴趣度,等价于物品i的K个邻居物品,受到用户u的兴趣度;
step3:和用户历史上感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名
预测用户u对物品的兴趣度,去掉用户u已经喜欢过的物品,剩下按照从大到小进行推荐.

surprise工具:

surprise工具:https://surprise.readthedocs.io/en/stable/getting_started.html
在这里插入图片描述
基于邻域的协同过滤算法:knns.KNNBasic;knns.KNNWithMeans;
knns.KNNWithZScore;knns.KNNBaseline;
主要参数:
k:设置领域的个数;
user_based:是否为基于用户的协同过滤,True则为UserCF,False为ItemCF;
name:相似度计算方式,默认为MSD,也可设置为cosine,pearson,pearson_baseline

movielen数据集进行推荐

代码如下:

from surprise import Reader,Dataset
from surprise import KNNBasic,KNNWithMeans,KNNWithZScore,KNNBaseline

#数据读取
reader = Reader(line_format='user item rating timestamp' , sep = ',',skip_lines=1)
data = Dataset.load_from_file('ratings_sample.csv',reader = reader)
trainset = data.build_full_trainset()

#KNNBasic
algo1 = KNNBasic(k =30,sim_options={'name':'MSD','user_based':True},verbose=True)
algo1.fit(trainset)
uid = str(196)
iid = str(302)

pred1 = algo1.predict(uid, iid,verbose=True)
#KNNWithMeans
algo2 = KNNWithMeans(k = 30,sim_options={'name':'cosine','user_based':False},verbose = True)
algo2.fit(trainset)
pred2 = algo2.predict(uid, iid,verbose=True)

#KNNWithZScore f
algo3 = KNNWithZScore(k =30,sim_options={'name':'MSD','user_based':True},verbose=True)
algo3.fit(trainset)
pred3 = algo3.predict(uid, iid,verbose=True)
#KNNBaseline
algo4 = KNNBaseline(k =30,sim_options={'name':'MSD','user_based':True},verbose=True)
algo4.fit(trainset)
pred4 = algo4.predict(uid, iid,verbose=True)

结果如下:

Computing the msd similarity matrix...
Done computing similarity matrix.
user: 196        item: 302        r_ui = None   est = 3.51   {'was_impossible': True, 'reason': 'Not enough neighbors.'}
Computing the cosine similarity matrix...
Done computing similarity matrix.
user: 196        item: 302        r_ui = None   est = 3.75   {'actual_k': 0, 'was_impossible': False}
Computing the msd similarity matrix...
Done computing similarity matrix.
user: 196        item: 302        r_ui = None   est = 4.80   {'actual_k': 0, 'was_impossible': False}
Estimating biases using als...
Computing the msd similarity matrix...
Done computing similarity matrix.
user: 196        item: 302        r_ui = None   est = 3.92   {'actual_k': 0, 'was_impossible': False}

代码及数据集:https://github.com/HuangxinYu359/project/tree/master/%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9FsurpriseKNN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝翔厨师长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值