推荐系统实战笔记2

推荐系统实践2

协同过滤:所有用户齐心协力,通过与网站的互动,不断过滤掉自己不感兴趣的物品

2.1 用户行为数据
  1. 显性反馈行为:评分和喜欢/不喜欢等直接表达喜好的行为
  2. 隐性反馈行为:如页面浏览等不能明确用户喜好的行为,一般分析用户会话日志得到该行为数据
2.2 用户行为分析

以用户购买过的物品数代表用户活跃度,以购买过该商品的用户数代表物品流行度

  1. 以物品流行度K为横坐标,以流行度为K的物品总数为纵坐标,该分布曲线呈长尾分布;

    以用户活跃度K为横坐标,以活跃度为K的用户总数为纵坐标,该分布曲线呈长尾分布。

  2. 以用户活跃度K为横坐标,以具有某个活跃度的所有用户评过分的物品的平均流行度为纵坐标,该分布曲线呈长尾分布。(用户活跃度越高的用户,越倾向于购买流行度低的物品)

  3. 基于用户行为数据设计的算法即为协同过滤算法,有以下4种:

  • 基于用户的协同过滤
  • 基于物品的协同过滤
  • 隐语义模型
  • 基于图的随机游走算法
2.3 实验设计和算法评测
  1. 数据集:MoviesLens数据集,双重字典:
  • 外层:key为用户id,value为该用户看过的电影id集合
  • 内层:key为电影id,value为该用户对该电影的评分(此实验中令评分均为1)
  1. 实验设计:八折交叉验证
  2. 评价指标:
  • 召回率,准确率
  • 覆盖率
  • 新颖度(以平均流行度衡量)
2.4 基于用户的协同过滤算法
一、算法实现

1.找到和目标用户兴趣相似的用户集合

2.找到该用户集合中用户喜欢的,且目标用户没有听说过的物品推荐给目标用户

给定用户u和v,令N(u)表示用户u曾经有过正反馈的物品集合,N(v)表示用户v曾经有过正反馈的物品集合

  1. 计算用户相似度矩阵:
  • 余弦相似度

  • 普通代码:双层遍历,遍历所有用户,两两计算相似度
    在这里插入图片描述

  • 改良代码:先建立item-user倒排表,再利用倒排表计算C[u] [v] (上述公式的分子),N[u] (上述公式的分母)
    在这里插入图片描述

  • 改进的余弦相似度:惩罚热门商品,users表示购买该商品的用户集合

  • 计算公式:在这里插入图片描述

  • 代码实现:
    在这里插入图片描述

  1. 给用户推荐与他兴趣相似的K个用户喜欢的物品
  • 计算目标用户u对物品i的感兴趣程度(此处即在与用户u兴趣相似的K个用户中,选出买过物品i的用户,将他们与用户u的相似度相加):
    [外链图片转存失败(img-UcAISGgl-1567947583189)(C:\Users\25013\AppData\Roaming\Typora\typora-user-images\1567862912112.png)]
  • 代码实现:
    在这里插入图片描述
二、算法缺点:
  1. 随着用户数增加,相似度矩阵越来越大,运算的时间复杂度和空间复杂度的增长与用户数量的增长呈平方关系
  2. 基于用户的协同过滤很难对推荐结果做出解释
2.5 基于物品的协同过滤算法

并不利用物品的内容属性计算相似度,而是通过用户的行为记录计算物品之间的相似度,即物品A和物品B具有很大相似度的原因是喜欢物品A的用户大都也喜欢物品B

一、算法实现

1.计算物品之间的相似度

2.根据物品之间的相似度和用户的历史行为给用户生成推荐列表

  1. 计算物品的相似度矩阵
  • 普通版:
    在这里插入图片描述

  • 改进版:

  • 计算公式:加大了对热门物品的惩罚(与余弦相似度的计算类似)
    在这里插入图片描述

  • 代码实现:

    建立用户-物品倒排表(训练数据已经是倒排表),再计算相似度矩阵(第一段代码里面两层for循环应该遍历items而不是users)
    [外链图片转存失败(img-6b1ShqNu-1567947583191)(C:\Users\25013\AppData\Roaming\Typora\typora-user-images\1567911679624.png)]

  • 超级版:加大了对活跃用户的惩罚

  • 计算公式:[外链图片转存失败(img-erXwEPYb-1567947583192)(C:\Users\25013\AppData\Roaming\Typora\typora-user-images\1567913949439.png)]

  • 代码实现:

[外链图片转存失败(img-8h05h5pr-1567947583193)(C:\Users\25013\AppData\Roaming\Typora\typora-user-images\1567914088503.png)]

  • 这种方法只是加大了对活跃用户的软性惩罚,实际应用中可以直接忽略他们
  1. 推荐物品给用户:
  • 计算用户u对物品j的感兴趣程度:
  • 计算公式(这里 r u i r_{ui} rui默认为1,公式可理解为用户对已购买的商品的评分与该商品与待推荐商品的相似度相乘再累加):

[外链图片转存失败(img-FrHQVYKt-1567947583193)(C:\Users\25013\AppData\Roaming\Typora\typora-user-images\1567912288834.png)]

  • 代码实现:在这里插入图片描述
二、算法改进
  • 一般来说,得到物品相似度矩阵w后,对其按行进行归一化,能够提高推荐的效果:
    在这里插入图片描述
2.6 UserCF VS ItemCF
  • UserCF给用户推荐那些与他兴趣爱好相似的用户喜欢的物品,侧重于反映和用户兴趣类似的小群体的热点,即推荐更加社会化
  • ItemCF给用户推荐那些与他之前喜欢的物品类似的物品,侧重于反映用户自己的兴趣传承,即推荐更加个性化
  • 具体使用哪种算法,还需结合具体场景,如用户/物品相似度矩阵维护的难易(大小、更新速度)
2.7 隐语义模型
  1. 此处使用的是隐性反馈数据集,只有正样本(用户喜欢什么物品),而没有负样本(用户对什么物品不感兴趣),因此应先进行负采样,同时遵循以下原则:
  • 对于每个用户,正负样本要均衡
  • 对于每个用户进行负采样时,要选取那些很热门,用户却没有行为的物品
  • 代码如下:

items_pool是候选物品的列表,里面物品i出现次数与它的流行度成正比;

结果即为正样本取值为1,负样本取值为0

[外链图片转存失败(img-2Apw6DOZ-1567947583196)(C:\Users\25013\AppData\Roaming\Typora\typora-user-images\1567924766175.png)]

  1. 算法公式(书里出错):
  • LFM通过以下公式计算用户u对物品i的兴趣:
    在这里插入图片描述

  • 通过以下损失函数寻找参数p和q(含正则项):

  • 通过梯度下降法逼近最佳参数:
    在这里插入图片描述

  • 超参数:
    在这里插入图片描述

  1. 代码实现:
  • 隐语义模型

  • 推荐模型
    在这里插入图片描述

结合下图理解:

在这里插入图片描述

  1. 算法缺点:
  • 难以实现实时推荐:每次训练都需要扫描所有用户行为记录才能得到隐类向量p和q
2.8 基于图的模型
  1. 将用户行为数据表示为二分图后,个性化推荐算法即可转化为度量用户顶点 v u v_u vu和与 v u v_u vu没有边直接相连的物品节点在图上的相关性,相关性高的一对顶点一般具有如下特征:

1.两个顶点之间有很多路径相连

2.连接两个顶点之间的路径长度都比较短

3.连接两个顶点之间的路径不会经过出度比较大的顶点

  1. 基于随机游走的PersonalRank算法:
  • 参考链接:https://blog.csdn.net/sinat_33741547/article/details/53002524
  • 计算公式:在这里插入图片描述
  • 代码实现:在这里插入图片描述
  1. 算法缺点与改良:
  • 缺点:时间复杂度太高,不仅无法在线提供实时推荐,甚至离线生成推荐结果也很耗时
  • 改良:
    • 减少迭代次数
    • 将PersonalRank转化为矩阵的形式
迭代最近点算法Iterative Closest Point Algorithm, ICPL)是一种用于三维点云配准的算法。其基本思想是通过迭代的方式,将一个点云与另一个参考点云对齐,以获得两个点云之间的最优转换关系。 ICP算法的步骤如下: 1. 初始化:选择一个参考点云和一个待配准点云,并设定初始转换矩阵。 2. 最近点匹配:对于待配准点云中的每个点,通过计算其在参考点云中的最近邻点,建立起点对的对应关系。 3. 计算刚体变换:通过使用最小二乘法,计算待配准点云到参考点云的最佳刚体变换,并更新转换矩阵。 4. 更新待配准点云:将待配准点云根据最佳刚体变换进行变换。 5. 终止条件判断:如果满足终止条件,即配准误差小于设定阈值,算法结束;否则返回步骤2进行下一轮迭代。 ICP算法的主要优点是简单高效,特别适用于实时点云配准。它在三维重建、机器人导航、三维医学图像处理等领域有广泛应用。然而,ICP算法也存在一些不足之处,如对初始矩阵的敏感性、可能陷入局部最优以及对噪声和局部形状变化敏感等。 为了克服这些限制,研究者提出了各种改进的ICP算法,如带分支限界的ICP、多尺度ICP和非刚性ICP等。这些改进使得ICP算法在更复杂的场景下具有更好的鲁棒性和配准精度。随着深度学习的兴起,ICP算法也被结合到深度学习框架中进行点云配准任务,展现出更强大的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值