基于矩阵分解的协同过滤算法

  稀疏的物品用户评分矩阵。

输出

  输出1:基于矩阵分解得到的两个子矩阵。

  输出2:根据输出2得到的已被填充的物品用户评分矩阵

前言

  当用户、物品较多的时候,基于用户和物品的协同过滤算法存在稀疏性的问题,将矩阵分解应用于协同过滤算法可以提取物品、用户的隐式特征,发现一些不是显而易见的特征,在一定程度上解决了稀疏问题的同时,也将大的行为矩阵分解为小的用户隐式特征矩阵和小的物品隐式特征矩阵,减小了计算量,提高了准确率和计算速度。 

Func-SVD矩阵分解原理

  有了近邻模型的用户物品关系矩阵后,为什么还需要用到矩阵分解呢?这是因为近邻模型存在以下的问题:

物品之间存在相关性,但是信息量并不随着向量维度增加而线性增加

近邻模型的用户物品关系矩阵是稀疏矩阵,计算结果不稳定,增减一个向量维度,可能近邻模型结果差异较大。

  矩阵分解可以解决上面的问题。矩阵分解就是把原来的用户物品关系大矩阵近似分解为两个小矩阵的乘积,假设有一个用户评分矩阵

基于矩阵分解的协同过滤算法

,其中m=10 0000n = 1 000,即一共有10万个用户,1万个物品,那么用户物品矩阵中的元素个数为10亿。我们选择一个较小的数kkmn小很多,假如取值为10,通过一系列的计算得到两个矩阵

基于矩阵分解的协同过滤算法

基于矩阵分解的协同过滤算法

,这两个子矩阵可以通过如下公式近似复原大矩阵:

基于矩阵分解的协同过滤算法

 

  通过这一系列操作可以使用涉及计算的元素数从10亿下降到110万,通过计算量上可以看出矩阵分解的优势。这里再从实际物理意义上解释以下,矩阵分别把用户和物品都映射到一个k维空间上。对于每一个用户而言,会得到一个向量

基于矩阵分解的协同过滤算法

,维度为k,这个向量称为隐因子向量,向量中的元素有正有负,代表这个用户在若干因素上的偏好。对于一个物品而言,会得到一个向量

基于矩阵分解的协同过滤算法

,维度为k,这个向量称为隐因子向量,向量中的元素有正有负,代表这个物品背后隐藏的一些用户关注的因素。

  矩阵分解之后,对于一个用户u的隐因子向量为

基于矩阵分解的协同过滤算法

,物品i的隐因子向量为

基于矩阵分解的协同过滤算法

,那么将物品i推荐给用户u的推荐分数,可以直接通过下面的点积计算即可:

基于矩阵分解的协同过滤算法

  

  这个公式很简单,关键是如何得到每一个用户、每一个物品的k维向量?我们可以按照机器学习的思路,首先定义损失函数,然后使用优化算法进行优化,减小预测结果与实际用户评分之间的误差。

  任意用户u与任意物品iFunc-svd算法损失函数定义如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzjsjj.html