个性推荐③—基于物品的协同过滤算法及优化方案

个性推荐系列目录
个性推荐①——系统总结个性化推荐系统
个性推荐②—基于用户协同过滤算法原及优化方案

上一篇总结了基于用户的协同过滤算法原理及优化方案,本篇则整理了另一种基于领域的算法:基于物品的协同过滤,以及这两种方法的异同点及适用范围

一、算法原理

① 计算物品之间的相似度
② 基于物品的相似度和用户历史行为给用户生成推荐列表

二、物品相似度计算

通常认为物品相似,是因为物品在某些特征上相似,比如《琅琊榜》与《伪装者》在演员阵容上非常相似,因此会认为这两部剧很相似,这种认定相似的标准就叫基于内容或特征的相似度
在itemCF中,不同基于物品内容和特征计算相似度的,而是根据同时出现在用户兴趣列表中的次数,来计算物品之间的相似度
我们一般假设:如果两个物品同时出现一个用户的兴趣列表中,那么这两个物品可能属于有限的几个领域内,如果属于很多用户的兴趣列表,那么有可能属于某一类
尽管在计算过程中没有利用任何内容属性,但利用ItemCF计算的结果却是可以从内容上看出确实存在某种相似的。
计算公式如下:
在这里插入图片描述
上述公式想必大家都很熟悉,这不就是贝叶斯中的条件概率吗?购买过i的用户有多少会购买j。但这个公式有个问题,加入物品j是热门物品,那么所有i与j都会具有较高的相似度,那这样推荐列表往往都是热门物品,这与想要挖掘长尾物品的初衷不符,因此在皮基础上增加了对物品j的热门程度的惩罚项,降低了热门物品相似度
在这里插入图片描述

def ItemSimilarity(train): 
 #calculate co-rated users between items 
 C = dict() 
 N = dict() 
 for u, items in train.items(): 
 for i in users: 
 N[i] += 1 
 for j in users: 
 if i == j: 
 continue 
 C[i][j] += 1 
 #calculate finial similarity matrix W 
 W = dict() 
 for i,related_items in C.items(): 
 for j, cij in related_items.items(): 
 W[u][v] = cij / math.sqrt(N[i] 
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值