java实现item-cf_基于用户(UserCF)和物品(ItemCF)协同过滤算法的比较&哈利波特问题...

UserCF推荐的是与用户兴趣相同的用户们喜欢的物品——哪怕用户根本不认识这些人。

ItemCF推荐的是与用户之前感兴趣的物品相似的物品。

UserCF更横向,更社会化。

ItemCF更纵向,更个性化。

UserCF要维护一个用户相似度矩阵,适合用户较少的场合。

ItemCF要维护一个物品相似度矩阵,适合物品较少的场合。

例如,TB、JD这样的商城,商品数再多,也比用户数少,适用ItemCF。

如网易、头条这样的新闻网站,用户数固然多,但相比几乎是无限增长的新闻,还是适用UserCF。

虽然用户、物品相似度矩阵都需要一定频率的离线计算,但从实时性来讲,用户对新物品产生了行为,在UserCF中,不一定能造成推荐结果的实时变化,因为要等用户相似度重新计算。但在ItemCF中,大概率会导致推荐结果的实时变化,因为新物品的相似度已经计算完毕。

当然,如果物品刚上线,还没有用户对其产生行为,也就没什么相似度了。必须是上线一段时间,且有一定用户对其产生了行为之后,方可产生推荐。

哈利波特问题

其实就是如何减少热门商品对推荐结果影响的问题。

所有的厨师都会买油盐酱醋,但不能总给用户推荐油盐酱醋吧。或者说,因为川菜厨师和粤菜厨师都买了油盐酱醋,就给粤菜厨师推荐火锅底料吧。

在UserCF中

2eab58c1a822bcc0b76b3f890a3e1912.png

通过

d07f538e1721ff918dcde9795a6d1d47.png

对用户u、v共同喜欢的物品i的用户数求了个倒数,i越热门,喜欢i的人越多,倒数就越小,作为分子就越小,相似度就越小。

而对于ItemCF

59e003dac5a7ce850da9d4e658ad40d9.png

如果j比较热门,分母就越大,相似度就越小。但如果j过于热门,例如全部用户都买了j,则分子就等于N(i),分子也越来越大,i与j的相似度也依然很大。

所以要进一步增加分母,以加大对热门商品的惩罚。

49209c77405f1dc402b38d34f2067945.png

经测算α=0.5时,准确率和召回率最高,α越大,对热门商品的惩罚就越重,相似度就越小,覆盖率就越高,平均流行度就越低,新颖性就越高。

但是上面也解决不了不同领域最热门物品相似度高的问题。

例如,厨师基本上都会买盐,猪肉,这二者的相似度就是高,这就导致有人买盐,第一推荐就是猪肉,可事实上我们可能更应该推荐其他调味品,这样才恰当一些。

要解决此类问题,可以通过对不同领域物品相似度降重来解决,例如盐和猪肉的相似度乘以系数,将其降低。但这些就不是协同过滤要考虑的问题了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值