推荐系统学习:协同过滤实现

本文总结了推荐系统的主要评测指标,如准确率、召回率、覆盖率和新颖度,并详细介绍了基于用户和物品的协同过滤算法。通过余弦相似度计算用户或物品之间的相似度,用于推荐。UserCF适合用户兴趣变化不大、新物品多的场景,而ItemCF适用于物品丰富、用户个性化需求强的情况。
摘要由CSDN通过智能技术生成

阿里大数据竞赛的第一季也即将告一段落,之前一直想发篇竞赛心得/攻略,但是看到有人发的博客居然被阿里查封了就不敢了…扯远了,这篇文章主要总结下自己看了项亮的《推荐系统实践》后的学习笔记。作为入门,这么书确实写的不错。

推荐系统的评测指标

为了评估推荐算法的好坏需要各方面的评估指标。

●准确率

准确率就是最终的推荐列表中有多少是推荐对了的。

●召回率

召回率就是推荐对了的占全集的多少。

下图直观地描述了准确率和召回率的含义

●覆盖率

覆盖率表示推荐的物品占了物品全集空间的多大比例。

●新颖度

新颖度是为了推荐长尾区间的物品。用推荐列表中物品的平均流行度度量推荐结果的新颖度。如果推荐出的物品都很热门,说明推荐的新颖度较低,否则说明推荐结果比较新颖。

各个评测指标的代码实现如下:

#train为训练集合,test为验证集合,给每个用户推荐N个物品

#召回率和准确率

def RecallAndPrecision(self,train=None,test=None,K=3,N=10):

train = train or self.train

test = test or self.test

hit = 0

recall = 0

precision = 0

for user in train.keys():

tu = test.get(user,{})

rank = self.Recommend(user,K=K,N=N)

for i,_ in rank.items():

if i in tu:

hit += 1

recall += len(tu)

precision += N

recall = hit / (recall * 1.0)

precision = hit / (precision * 1.0)

return (recall,precision)

#覆盖率

def Coverage(self,train=None,test=None,K=3,N=10):

train = train or self.train

recommend_items = set()

all_items = set()

for user,items in train.items():

for i in items.keys():

all_items.add(i)

rank = self.Recommend(user,K)

for i,_ in rank.items():

recommend_items.add(i)

return len(recommend_items) / (len(all_items) * 1.0)

#新颖度

def Popularity(self,train=None,test=None,K=3,N=10):

train = train or self.train

item_popularity = dict()

#计算物品流行度

for user,items in train.ite

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码农老K

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

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

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

打赏作者

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

抵扣说明:

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

余额充值