推荐系统MOOC笔记
2. 基于邻域的协同过滤
2.1 协同过滤基本思想
算法分类
- Top-N推荐 <=> 评分预测
- 基于邻域 <=> 基于模型
步骤
- 收集数据
- 隐式反馈
- 显式反馈
- 寻找邻域/训练模型
- 计算推荐结果
2.2 基于用户的协同过滤
用户相似度
为用户 有过正回馈的项目集合 为用户 有过正回馈的项目集合 和 的兴趣相似度- Jaccard相似度:
- 余弦相似度:
- 例:
- Jaccard相似度:
兴趣度预测
- 计算用户
对邻域用户购买过的项目 的感兴趣程度 - 输入:
:和用户 最相似的 个用户( -近邻) :用户 和用户 的兴趣相似度 :观测到的用户 对项目 的兴趣度(有正反馈为1,否则为0)
- 兴趣度:邻域用户的兴趣度的加权求和
- 例:
- 邻域:
- 候选项目集(邻域用户购买过的):
- 计算用户感兴趣程度:
- 推荐排序:
- 邻域:
基于User-CF的推荐系统
- 离线预处理
- 计算用户间的相似度
- 确定每个用户的邻域(K近邻)
- 在线推荐:针对当前活跃用户计算推荐列表
- 确定候选项目集:
- 预测兴趣度并生成推荐列表:
- 确定候选项目集:
用户相似度改进:IUF
- 逆用户频率(Inverse User Frequency)
- 基本思想:惩罚热门项目
- 计算:
- 惩罚系数:
:总用户数 :对项目 有过正反馈的用户数
- 惩罚系数:
User-CF的缺点
- 很难形成有意义的邻域集合
- 用户两两之间共同反馈少
- 仅有的共同反馈项目往往是热门项目
- 随用户行为数据增加,相似度变化可能很快
- 离线(offline)算法难以瞬间更新推荐结果
2.3 基于项目的协同过滤
项目相似度
为点击(或购买)过项目 的用户集 和 的兴趣相似度- Jaccard相似度/余弦相似度(类似User-CF)
- 条件概率相似度:
- 计算:
- 构建用户-项目倒排表:购买某项目的用户列表
- 得到项目相似度矩阵、项目邻域表
兴趣度预测
- 计算用户
对候选项目 的感兴趣程度 - 输入:
:和项目 最相似的 个项目 :用户 有过正反馈的项目集合 :观测到的用户 对项目 的兴趣度
- 兴趣度:已反馈的项目的兴趣度的加权求和
基于Item-CF的推荐系统
- 离线预处理
- 在线推荐
- 确定候选项目集:
- 预测兴趣度并生成推荐列表:
- 确定候选项目集:
改进
- 惩罚活跃用户(Jaccard相似度)
- 基本思想:越活跃的用户对项目相似度贡献越小
- 惩罚系数:
:总项目数 :用户u有过正反馈的项目数
- 修正Jaccard相似度:
- 惩罚热门项目(条件概率相似度)
- 修正后的条件概率相似度:
- 修正后的条件概率相似度:
2.4 基于邻域的评分预测
评分预测
- 输入:用户显式评分
- 输出:用户
对项目 的期望评分 - 步骤
- 收集数据
- 寻找邻域
- 计算推荐结果
- User-CF:
:对物品i有过评分的与用户u相似的用户v的集合- 例(K=2):
- Item-CF:
- User-CF:
余弦相似度(用户)
:用户 有过评分的项目集合 :用户 对项目 的评分- 隐含假设:用户
对未知评分项目的评分为0 - 例:
- 缺点:未考虑到用户评分的相对高低,相似度与预测评分不合理
Pearson相似度(用户)
:用户 和 都有过评分的项目集合 :用户 的评分平均值- 将用户评分看作随机变量
预测修正
- User-CF:
- 目标用户自身评分平均值+相对预测结果
- 例:
- Item-CF:
2.5 基于二部图的CF
传统邻域方法的缺点
- 范围限制:只考虑和用户有过共同评价(或购买)项目的相邻用户
- 计算空间复杂度较大:需要在内存中保存整个用户-项目反馈(评分)集合(矩阵)
- 数据稀疏/冷启动:用户一般只会评价(或购买)少量项目
基于二部图的协同过滤
- 隐式反馈行为数据集:
二元组集合 - 表示成(二部)图形式
- 不相交的两个顶点子集:
和 (用户集和项目集) - 每条边
关联的两个顶点 和 属于两个不同的顶点子集( , )
- 不相交的两个顶点子集:
- 推荐类型:Top-N推荐
激活扩散
- 假设:
- 用户反馈过的项目都具有用户偏好的某种属性
- 用户偏好可以在图中的节点间传递
- 基本思想:根据用户偏好的传递性来挖掘用户潜在偏好信息
- 标准的协同过滤:路径长度=3,
- - - - 扩展路径长度
- 例:路径长度=5
- 步骤(给定目标用户):
- 图扩散:
- 目标用户节点出发,沿边扩散
- 直到给定的最大扩散步长
- 确定候选项目集:
- 到达过的所有项目
目标用户有过正反馈的项目
- 到达过的所有项目
- 项目排序:
- 依据(1.相同看2.)
- 首次到达步数(升序)
- 到达次数(降序)
- 依据(1.相同看2.)
- 图扩散:
- 系统
- 数据表示:矩阵
- 行用户,列项目
- 有反馈1,无反馈0
- 图扩散:
- 矩阵乘法表示
- 步长一般为奇数(到项目节点)
- 确定候选项目集:该行非0,且未反馈过
- 项目排序:根据矩阵乘法结果(到达次数)降序
- 数据表示:矩阵
物质扩散(Mass Diffusion)
- 假设:
- 扩散过程中每条边的影响不完全相同
- 可避免活跃用户/热门项目偏置的问题
- 基本思想:
- 将用户的偏好属性表示为节点所拥有的资源
- 每个节点平均地将资源分享给相邻节点,满足守恒律
- 步骤(给定目标用户):
- 资源初始化分配:目标用户有过正反馈的项目节点分配一个资源
- 资源扩散:根据邻接关系平均分配迭代传递资源
:项目节点资源分配 :项目节点 的出度 :用户节点 获得的资源
- 生成推荐列表:候选项目按资源拥有量降序
- 系统
- 数据表示:矩阵
- 图扩散:
- 资源分配初始化:
- 资源分配初始化:
- 转移矩阵
的计算 :一轮迭代(“项目-用户-项目”)从项目节点 上资源转移到项目 上的比例
- “项目-用户”扩散:每个项目节点平均分配资源给相邻用户节点
- “用户-项目”扩散
- 排序:根据资源分配矩阵
该行降序
- 数据表示:矩阵
其他图扩散方法
- 热扩散(Heat Spreading)
- 假设:
- 有恒温热源驱动,不满足守恒律
- 平均影响:每个节点的热量是其所有相邻节点的平均值
- 假设:
- 带重启的随机游走
- 每次迭代以一定概率
向前随机游走(扩散 ),以概率 回到初始状态
- 每次迭代以一定概率
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】