推荐系统 --- 推荐算法 --- 基于用户行为的推荐算法 - 矩阵分解

本文探讨了矩阵分解在推荐系统中的应用,解决了高维稀疏数据的计算难题,并介绍了SVD、PCA和ALS算法,如何通过用户-物品交互构建U-U、V-V和U-V矩阵,以及如何考虑偏置信息、历史行为和时间因素。重点讲解了隐式反馈的处理和大规模数据优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

  • 矩阵分解
    • 问题
      • 物品之间存在相关性,信息量并不随着向量维度增加⽽线性增加;
      • 矩阵元素稀疏,计算结果不稳定,增减⼀个向量维度,导致近邻结果差 异很⼤的情况存在。
    • 思路
      • 上述两个问题,在矩阵分解中可以得到解决。矩阵分解,直观上说来简单,就 是把原来的⼤矩阵,近似分解成两个⼩矩阵的乘积,在实际推荐计算时不再使 ⽤⼤矩阵,⽽是使⽤分解得到的两个⼩矩阵。
  • 矩阵存储
    • 难点
      • 只有原始⽤户⾏为⽇志,需要从中构造出矩阵,怎么做?
    • 思路
      • CSR:这个存储稍微复杂点,是⼀个整体编码⽅式。它有三个组成:数 值、列号和⾏偏移共同编码
      • COO:这个存储⽅式很简单,每个元素⽤⼀个三元组表示(⾏号,列号, 数值),只存储有值的元素,缺失值不存储。

关系矩阵及矩阵计算

  • U - U 矩阵
    • 概述
      • 计算用户相似度,一般使用Pearson相关系数
    • 原理
      • 通过计算用户相似度来找到与目标用户行为具有相似性的用户集
      • 排序,选取相似度最高的 K 个用户
    • 相似度计算流程
      • 访问用户最近的行为数据
      • 提取用户-视频二维矩阵
      • 分别计算用户 i 和 j 对视频的平均评价值
      • 寻找用户 i 和 j 共同评价过的视频的集合
      • 根据公式计算得到用户 i 和 j 的相似度
  • V - V 矩阵
    • 概述
      • 计算物品相似度,一般使用余弦相似度
    • 原理
      • 计算视频相似度
      • 排序,选取相似度最高的 K 个视频
    • 相似度计算流程
      • 访问用户最近的行为数据
      • 提取用户-视频二维矩阵
      • 寻找历史上对视频 i 和视频 j 共同评价过的用户的集合
      • 分别计算用户对视频 i 和视频 j 的平均评价值
      • 根据公式计算得到视频 i 和 j 的相似度
  • U - V 矩阵
    • 概述
      • 用户和视频之间的关系
    • 矩阵降维
      • 奇异值分解(SVD)
        • 将用户 - 视频矩阵分解成
          • 表示 用户 的矩阵
          • 表示 物品 的矩阵
          • 表示用户 和 物品 相关性的矩阵
      • 主成分分析(PCA)

矩阵分解算法

  • 矩阵分解之后,矩阵的特点
    • 每个⽤户对应⼀个 k 维向量,每个物品也对应⼀个 k 维向量,就是所 谓的隐因⼦向量,因为是⽆中⽣有变出来的,所以叫做“隐因⼦”;
    • 两个矩阵相乘后,就得到了任何⼀个⽤户对任何⼀个物品的预测评分,具体这个评分靠不靠谱,那就是看功夫了。
  • 基础的 SVD 算法
    • 算法步骤
      • 准备好⽤户物品的评分矩阵,每⼀条评分数据看做⼀条训练样本;
      • 给分解后的 U 矩阵和 V 矩阵随机初始化元素值;
      • ⽤ U 和 V 计算预测后的分数;
      • 计算预测的分数和实际的分数误差;
      • 按照梯度下降的⽅向更新 U 和 V 中的元素值;
      • 重复步骤 3 到 5,直到达到停⽌条件。
    • 交替最⼩⼆乘原理 (ALS)
      • 算法流程
        • 初始化随机矩阵 Q ⾥⾯的元素值;
        • 把 Q 矩阵当做已知的,直接⽤线性代数的⽅法求得矩阵 P;
        • 得到了矩阵 P 后,把 P 当做已知的,故技重施,回去求解矩阵 Q;
        • 上⾯两个过程交替进⾏,⼀直到误差可以接受为⽌。
      • 优点
        • 在交替的其中⼀步,也就是假设已知其中⼀个矩阵求解另⼀个时,要优 化的参数是很容易并⾏化的;
        • 在不那么稀疏的数据集合上,交替最⼩⼆乘通常⽐随机梯度下降要更快 地得到结果,事实上这⼀点就是我⻢马上要说的,也就是关于隐式反馈的内容。
  • 增加偏置信息
    • 问题
      • 有⼀些⽤户会给出偏⾼的评分,⽐如标准宽松的⽤户;
      • 有⼀些物品 也会收到偏⾼的评分,⽐如⼀些⽬标观众为铁粉的电影,甚⾄有可能整个平台 的全局评分就偏⾼
    • 思路
      • ⼀个⽤户给⼀个物品的评分会由四部分相加:全局平均分、物品的评分偏置、⽤户评分的偏置、⽤户和 物品之间的兴趣偏好
  • 增加历史⾏为
    • 问题
      • 有的⽤户评分⽐较 少
    • 算法
      • 在 SVD 中结合⽤户的隐式反馈⾏为和属性,这套模型叫 做 SVD++。
        • 除了假设评分矩阵中的物品有⼀个隐因⼦向 量外,⽤户有过⾏为的物品集合也都有⼀个隐因⼦向量,维度是⼀样的。把⽤ 户操作过的物品隐因⼦向量加起来,⽤来表达⽤户的兴趣偏好。
  • 在 SVD 中考虑时间因素
    • 对评分按照时间加权,让久远的评分更趋近平均值;
    • 对评分时间划分区间,不同的时间区间内分别学习出隐因⼦向量,使⽤ 时按照区间使⽤对应的隐因⼦向量来计算;
    • 对特殊的期间,如节⽇、周末等训练对应的隐因⼦向量。

隐式反馈

  • 概述
    • ⽤ 户浏览数据远远多于打分评价数据。也就是说,实际上推荐系统关注的是预测 ⾏为,⾏为也就是⼀再强调的隐式反馈。
  • 特点
    • 如果把预测⽤户⾏为看成⼀个⼆分类问题,猜⽤户会不会做 某件事,但实际上收集到的数据只有明确的⼀类:⽤户⼲了某件事,⽽⽤户明 确“不⼲”某件事的数据却没有明确表达。所以这就是 One-Class 的由来, One-Class 数据也是隐式反馈的通常特点。
  • 算法
    • 概述
      • 对隐式反馈的矩阵分解,需要将交替最⼩⼆乘做⼀些改进,改进后的算法叫做 加权交替最⼩⼆乘:Weighted-ALS。
    • 加权交替最⼩⼆乘这样对待隐式反馈:
      • 如果⽤户对物品⽆隐式反馈则认为评分是 0;
      • 如果⽤户对物品有⾄少⼀次隐式反馈则认为评分是 1,次数作为该评分 的置信度。
    • 问题
      • 取值 为 0 的评分就⾮常多
        • 描述
          • 本身隐式反馈就只有正类别是确定的,负类别是我们假设的,你要知道, One-Class 并不是随便起的名字;
          • 这会导致正负类别样本⾮常不平衡,严重倾斜到 0 评分这边。
        • 思路
          • 挑⼀部分缺失值作为负类别样本即可
            • 随机均匀采样和正类别⼀样多(不靠谱)
            • 按照物品的热⻔门程度采样(实践检验证明有效)
      • 数据量太多(用户、物品等)
        • 描述
          • 让⽤户和物品的隐因⼦向量两两相乘,计算点积就可以得到所有的推 荐结果了。但是实际上复杂度还是很⾼,尤其对于⽤户数量和物品数量都巨⼤ 的应⽤,如 Facebook,就更不现实。于是 Facebook 提出了两个办法得到真 正的推荐结果。
        • 思路
          • 第⼀种,利⽤⼀些专⻔门设计的数据结构存储所有物品的隐因⼦向量,从⽽实现 通过⼀个⽤户向量可以返回最相似的 K 个物品。
          • 第⼆种
            • 就是拿着物品的隐因⼦向量先做聚类,海量的物品会减少为少量的聚 类。
            • 然后再逐⼀计算⽤户和每个聚类中⼼的推荐分数,给⽤户推荐物品就变成 了给⽤户推荐物品聚类。
            • 得到给⽤户推荐的聚类后,再从每个聚类中挑选少许⼏个物品作为最终推荐结 果。

优化

  • point-wise:矩阵分解
    • 概述
      • 本质上都是在预测⽤户对⼀个物品的偏好程度, 哪怕不是预测评分,只是预测隐式反馈,也难逃这个事实,因为算法展现出来 的⽬标函数就出卖了这⼀切。
      • 得到这样的矩阵分解结果后,常常在实际使⽤时,⼜是⽤这个预测结果来排序。
      • 这种针对单个⽤户对单个物品的偏好程度进⾏预测,得到结果后再排序的问题, 在排序学习中的⾏话叫做 point-wise
    • 缺点
      • 只能收集到 正样本,没有负样本,于是认为缺失值就是负样本,再以预测误差为评判标准 去使劲逼近这些样本。
      • 逼近正样本没问题,但是同时逼近的负样本只是缺失值 ⽽已,还不知道真正呈现在⽤户⾯前,到底是不喜欢还是喜欢呢?
  • pair-wise:⻉叶斯个性化 排序,简称 BPR 模型
    • 概述
      • AUC 全称是 Area Under Curve,意思是曲线下的⾯积,这⾥的 曲线就是 ROC 曲线。
    • 算法流程
      • 构造样本
        • 四元组:⽤户、物 品1、物品2、两个物品相对顺序
          • 如果物品 1 是消费过的,⽽物品 2 不是,那么相对顺序取值为 1,是 正样本;
          • 如果物品 1 和物品 2 刚好相反,则是负样本;
          • 样本中不包含其他情况:物品 1 和物品 2 都是消费过的,或者都是没 消费过的。
      • ⽬标函数
      • 训练⽅法
        • 梯度下降⼜有批量梯度和随机梯度下降两个选择,前者收敛慢,后 者训练快却不稳定。
为了回答这个问题,我将假设您要使用基于协同过滤的推荐系统来完成建模、求解和分析过程。下面是一个基本的流程: 1. 数据收集:您可以从网上下载一些测试数据集,例如 MovieLens 数据集。该数据集包含大量用户对电影的评分数据。您也可以创建自己的用户-物品矩阵,其中行代表用户,列代表物品,并填入相应的评分值。 2. 数据预处理:您需要将数据转换为 MATLAB 中的矩阵形式,并进行必要的数据清洗和处理,例如去除缺失值、标准化数据等。 3. 模型建立:基于协同过滤的推荐系统需要使用相似性度量来计算用户之间或物品之间的相似度。您可以使用余弦相似度或皮尔逊相关系数等相似性度量方法。 4. 模型求解:您可以使用 MATLAB 中的相似性度量函数来计算用户之间或物品之间的相似度。然后,您可以使用基于用户的协同过滤或基于物品的协同过滤算法来预测用户对物品的评分值。 5. 模型评估:您需要使用一些度量指标来评估您的模型的性能,例如均方根误差、平均绝对误差等指标。 6. 结果分析:最后,您可以使用 MATLAB 中的可视化工具来分析推荐结果,例如热力图、散点图等。 需要注意的是,协同过滤算法在处理大规模数据集时可能会面临计算效率和内存消耗的问题。因此,您需要考虑使用分布式计算或者其他优化方法来加速算法的计算过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值