推荐算法(一):协同过滤系列

一、协同过滤(collaborative filtering)
一种ItemCF推荐baseline:
1.输入:user-item相关矩阵
2.中间结果:item间相似度计算:item_i与item_j间相似度:分子:与二者均有关联的user数,被同一个人购买的次数多则相似;分母包含各自关联的总用户数,用以惩罚热门item;
在这里插入图片描述
p.s.认为无评分时相当于做了热度衰减的频繁项集推荐方式;
如有user-item关系有权重(如用户对影片评分):相似度取决于对二者皆有交互的用户评分,将上式分子换为两item评分向量内积(余弦相似度),或对二者的评分减去二者各自平均值后相乘结果(皮尔逊相关系数)
在这里插入图片描述
保存item相似度矩阵;
3.user推荐:根据user-item相关矩阵得到user-itemlist,遍历该user交互过的itemlist,对每个item取相似N个,根据相似度聚合排序得到用户推荐结果;
ItemCF推荐用户交互过的item的相似item,适合item集比较稳定的情况下,如长视频等,对新item的推荐不友好,如推荐新闻等变化快的item,则UserCF更具优势,推荐以往相似兴趣的用户在看的内容;

附代码如下:

import math
def ItemSimilarity(train):
    # 物品-物品的共同矩阵
    C = dict()
    # 物品被多少个不同用户购买
    N = dict()
    for u, items in train.items():
        for i in items.keys():
            N.setdefault(i, 0)
            N[i] += 1
            C.setdefault(i, {
   })
            for j in items.keys():
                if i == j:
                    continue
                C[i].setdefault(j, 0)
                C[i][j] += 1
    # 计算相似度矩阵
    W = dict()
    for i, related_items in C.items():
        W.setdefault(i
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值