推荐系统MOOC笔记

对应课程

2. 基于邻域的协同过滤

2.1 协同过滤基本思想

算法分类

  1. Top-N推荐 <=> 评分预测
  2. 基于邻域 <=> 基于模型

步骤

  1. 收集数据
    • 隐式反馈
    • 显式反馈
  2. 寻找邻域/训练模型
  3. 计算推荐结果

2.2 基于用户的协同过滤

用户相似度

  • N(u)为用户u有过正回馈的项目集
  • N(v)为用户v有过正回馈的项目集合
  • uv的兴趣相似度
    • Jaccard相似度:ωuv=|N(u)N(v)||N(u)N(v)|
    • 余弦相似度:ωuv=|N(u)N(v)||N(u)||N(v)|
    • 例:ωAB=|{b,d}{a,b,c}||{b,d}{a,b,c}|=14

兴趣度预测

  • 计算用户u对邻域用户购买过的项目i的感兴趣程度p(u,i)
  • 输入:
    • S(u,K):和用户u最相似的K个用户(K-近邻)
    • ωuv:用户u和用户v的兴趣相似度
    • rvi:观测到的用户v对项目i的兴趣度(有正反馈为1,否则为0)
  • 兴趣度:邻域用户的兴趣度的加权求和
    • p(u,i)=vS(u,K)ωuvrvi
  • 例:
    • 邻域:S(A,2)={C,B}
    • 候选项目集(邻域用户购买过的):{a,c}
    • 计算用户感兴趣程度:p(A,a)=14+23=1112
    • 推荐排序:p(A,a)>p(A,c)>p(A,e)

基于User-CF的推荐系统

  • 离线预处理
    • 计算用户间的相似度
    • 确定每个用户的邻域(K近邻)
  • 在线推荐:针对当前活跃用户计算推荐列表
    • 确定候选项目集:C(u)={i|iN(u)&iN(v)&vS(u,K)}
    • 预测兴趣度并生成推荐列表:p(u,i)=vS(u,K)N(i)ωuvrvi

用户相似度改进:IUF

  • 逆用户频率(Inverse User Frequency)
    • 基本思想:惩罚热门项目
  • 计算:
    • 惩罚系数:fi=lognni
    • n:总用户数
    • ni:对项目i有过正反馈的用户数
    • ωuv=iN(u)N(v)lognni|N(u)N(v)|

User-CF的缺点

  • 很难形成有意义的邻域集合
    • 用户两两之间共同反馈少
    • 仅有的共同反馈项目往往是热门项目
  • 随用户行为数据增加,相似度变化可能很快
    • 离线(offline)算法难以瞬间更新推荐结果

2.3 基于项目的协同过滤

项目相似度

  • N(i)为点击(或购买)过项目i用户集
  • ij的兴趣相似度
    • Jaccard相似度/余弦相似度(类似User-CF)
    • 条件概率相似度:ωij=P(j|i)=|N(i)N(j)||N(i)|
  • 计算:
    • 构建用户-项目倒排表:购买某项目的用户列表
    • 得到项目相似度矩阵、项目邻域表

兴趣度预测

  • 计算用户u对候选项目i的感兴趣程度p(u,i)
  • 输入:
    • S(j,K):和项目j最相似的K个项目
    • N(u):用户u有过正反馈的项目集合
    • ruj:观测到的用户u对项目j的兴趣度
  • 兴趣度:已反馈的项目的兴趣度的加权求和
    • p(u,i)=jN(u)I(iS(j,K))ωijruj

基于Item-CF的推荐系统

  • 离线预处理
  • 在线推荐
    • 确定候选项目集:C(u)={i|iN(u)&iS(j,K)&jN(u)}
    • 预测兴趣度并生成推荐列表:p(u,i)=jN(u)I(iS(j,K))ωijruj

改进

  • 惩罚活跃用户(Jaccard相似度)
    • 基本思想:越活跃的用户对项目相似度贡献越小
    • 惩罚系数:fu=logmmu
      • m:总项目数
      • mu:用户u有过正反馈的项目数
    • 修正Jaccard相似度:ωij=uN(i)N(j)logmmu|N(i)N(j)|
  • 惩罚热门项目(条件概率相似度)
    • 修正后的条件概率相似度:ωij=P(j|i)=|N(i)N(j)||N(i)||N(j)|α
      • α[0,1]

2.4 基于邻域的评分预测

评分预测

  • 输入:用户显式评分
  • 输出:用户u对项目i的期望评分r^ui
  • 步骤
    • 收集数据
    • 寻找邻域
    • 计算推荐结果
      • User-CF:r^ui=vNi(u)ωuvrvivNi(u)|ωuv|
        • Ni(u):对物品i有过评分的与用户u相似的用户v的集合
        • 例(K=2):r^Ad=30.839+20.8270.839+0.8272.50
      • Item-CF:r^ui=jNu(i)ωijrujvNu(i)|ωij|

余弦相似度(用户)

  • ωuv=iJuvruirviiJurui2jJvrvj2
    • Ju:用户u有过评分的项目集合
    • rui:用户u对项目i的评分
    • 隐含假设:用户u对未知评分项目的评分为0
    • 例:ωAB=53+31+31(52+32+32)(32+12+12+22)0.827
    • 缺点:未考虑到用户评分的相对高低,相似度与预测评分不合理

Pearson相似度(用户)

  • ωuv=iJuv(ruir¯u)(rvir¯v)iJuv(ruir¯u)2iJuv(rvir¯v)2
    • Juv:用户uv都有过评分的项目集合
    • r¯u:用户u的评分平均值
    • 将用户评分看作随机变量

预测修正

  • User-CF:r^ui=r¯u+vNi(u)ωuv(rvir¯v)vNi(u)|ωuv|
    • 目标用户自身评分平均值+相对预测结果
    • 例:r^Ad=r¯A+vNd(A)ωAv(rvdr¯v)vNd(A)|ωAv|=3.667+0.996(21.75)0.9963.917
  • Item-CF:r^ui=r¯i+jNu(i)ωij(rujr¯j)vNu(i)|ωij|

2.5 基于二部图的CF

传统邻域方法的缺点

  • 范围限制:只考虑和用户有过共同评价(或购买)项目的相邻用户
  • 计算空间复杂度较大:需要在内存中保存整个用户-项目反馈(评分)集合(矩阵)
  • 数据稀疏/冷启动:用户一般只会评价(或购买)少量项目

基于二部图的协同过滤

  • 隐式反馈行为数据集:(u,i)二元组集合
  • 表示成(二部)图形式
    • 不相交的两个顶点子集:UI(用户集和项目集)
    • 每条边(u,i)关联的两个顶点ui属于两个不同的顶点子集(uU, iI)
  • 推荐类型:Top-N推荐

激活扩散

  • 假设:
    • 用户反馈过的项目都具有用户偏好的某种属性
    • 用户偏好可以在图中的节点间传递
  • 基本思想:根据用户偏好的传递性来挖掘用户潜在偏好信息
  • 标准的协同过滤:路径长度=3,UA-Ib-UB-Ic
  • 扩展路径长度
    • 例:路径长度=5
  • 步骤(给定目标用户):
    • 图扩散:
      • 目标用户节点出发,沿边扩散
      • 直到给定的最大扩散步长
    • 确定候选项目集:
      • 到达过的所有项目目标用户有过正反馈的项目
    • 项目排序:
      • 依据(1.相同看2.)
        1. 首次到达步数(升序)
        2. 到达次数(降序)
  • 系统
    • 数据表示:矩阵R
      • 行用户,列项目
      • 有反馈1,无反馈0
    • 图扩散:S(2k+1)=R(RTR)k
      • 矩阵乘法表示
      • 步长一般为奇数(到项目节点)
    • 确定候选项目集:该行非0,且未反馈过
    • 项目排序:根据矩阵乘法结果(到达次数)降序

物质扩散(Mass Diffusion)

  • 假设:
    • 扩散过程中每条边的影响不完全相同
    • 可避免活跃用户/热门项目偏置的问题
  • 基本思想:
    • 将用户的偏好属性表示为节点所拥有的资源
    • 每个节点平均地将资源分享给相邻节点,满足守恒律
  • 步骤(给定目标用户):
    • 资源初始化分配:目标用户有过正反馈的项目节点分配一个资源
    • 资源扩散:根据邻接关系平均分配迭代传递资源
      • bu=j=1nrujsjk(Ij)
        • S=(s1,s2,......,sn):项目节点资源分配
        • k(Ij):项目节点j的出度
        • bu:用户节点u获得的资源
    • 生成推荐列表:候选项目按资源拥有量降序
  • 系统
    • 数据表示:矩阵R
      • rui{1用户u对项目i有过正反馈0其他
    • 图扩散:S(k)=S(0)(W)k
      • 资源分配初始化:S(0)=R
    • 转移矩阵W的计算
      • wlj:一轮迭代(“项目-用户-项目”)从项目节点l上资源转移到项目j上的比例
      • wlj=1k(Il)u=1mrulrujk(Uu)
    • “项目-用户”扩散:每个项目节点平均分配资源给相邻用户节点
      • bu=j=1nrujsujk(Ij)
    • “用户-项目”扩散
      • suj=u=1mrujbuk(Uu)=l=1nsulwlj
    • 排序:根据资源分配矩阵S(k)该行降序

其他图扩散方法

  • 热扩散(Heat Spreading)
    • 假设:
      • 有恒温热源驱动,不满足守恒律
      • 平均影响:每个节点的热量是其所有相邻节点的平均值
  • 带重启的随机游走
    • 每次迭代以一定概率α向前随机游走(扩散W),以概率(1α)回到初始状态
    • S(k+1)=(1α)S(0)+αS(k)W
posted @   hibana049  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示