美文网首页
矩阵分解

矩阵分解

作者: xiiatuuo | 来源:发表于2018-11-08 23:46 被阅读0次

矩阵分解

前记

矩阵分解在推荐系统里面应该说是最经典、最有代表性的算法了。除了基础 举证分解方法,后面衍生出了各种关于分解的方法,分解机、张量分解等等,我们来看看。

SVD

原始的SVD又名奇异值分解,如果是用户评分矩阵,首先需要对缺失值进行简单的不全,比如用全局平均,然后用SVD进行分解R=U^TSV其中,R为原始的评分矩阵,维度是mn,U和V分贝是一个km和kn的正交矩阵,S为kk的对角矩阵,对角线上的每一个元素都是矩阵的奇异值。这种纯数学的方法计算量特别大,实际应用中的数据根本处理不了。Simon Funk的Funk-SVD方法解决了这个问题,思想很简单:直接通过训练集的观察值利用最小化RMSE学习P、Q矩阵,这就是机器学习的思想了。R=P^TQ

SVD++

SVD矩阵分解非常成功,有很多的迭代的方法,最有名的就是SVD++了。提SVD++之前,我们先看一个简单的BiasSVD:r_{ui} = \mu + b_u + b_i + P_u^T * q_i
- \mu 为训练集中所有记录的平均全局数
- b_u 为用户的偏置项,表示用户的评分偏好
- b_i 为物品的偏置项,表示物品的本身质量

如果将用户历史行为对用户评分预测影响考虑进来就是SVD++算法:

r_{ui} = \mu + b_u + b_i + q_i^T * (p_u + \frac{1}{\sqrt{|N(u)|}}\sum_{j \in N(u)}y_j)

SVD++的核心思想是把基于领域的itemCF算法用矩阵分解的方法实现,转换的方法是这样的:

  • itemCF算法其实可以转变成 r_{ui} = \frac{1}{\sqrt{|N(u)|}} \sum_{j\in N(u)}w_{ij}
  • w_{ij}不再看成是物品的相似度矩阵,而是一个和P、Q一样的参数。对w矩阵也进行分解,把参数个数降低到2nF个, r_{ui} = \frac{1}{\sqrt{|N(u)|}} \sum_{j\in N(u)}x_i^T*y_j = \frac{1}{\sqrt{|N(u)|}} x_i^T* \sum_{j\in N(u)}y_j 其中x_i 和 y_j是两个F维的向量
  • 为了不增加太多参数导致过拟合,令x=q,这样就能得到上面的SVD++的模型了。

时间信息也是非常重要的,所有SVD++模型融合时间效应往往效果更好
r_{ui} = \mu + b_u(t) + b_i(t) + q_i^T * (p_u(t) + \frac{1}{\sqrt{|N(u)|}}\sum_{j\in N(u)}y_j)
具体的优化和迭代方法就不赘述了。

隐式反馈矩阵分解

spark的隐式反馈方法解析见https://www.jianshu.com/p/7d59612f9f49,核心思想是将观察到的隐式反馈值进行预测值和置信度的映射,重新改写了优化目标。

p_{ui} = \begin{cases}1 \quad r_{ui} > 0 \\ 0 \quad r_{ui} = 0 \end{cases}
c_{ui} = 1 + \alpha log(1 + r_{ui} / \epsilon)

FM

FM是目前非常经典的广义分解算法,Factorization Machines with libFM

FM为什么是广义分解算法,因为如果把user和item分别进行one-hot编码feed给FM,MF就变成了一个biased的FM模型,通过合适的特征变换方式,FM可以模拟二阶多项式核的SVM模型、MF模型、SVD++模型等。对于FM而言,我们可以加任意多的特征,比如user的历史购买平均值,item的历史购买平均值等,但是MF只能局限在两类特征。SVD++与MF类似,在特征的扩展性上都不如FM,在此不再赘述。

后面的FFM是FM的一个演进,通过引入field的概念,FFM把相同性质的特征归于同一个field,使得每两组特征交叉的隐向量都是独立的,可以取得更好的组合效果,但是使得计算复杂度无法通过优化变成线性时间复杂度。一般情况都是比FM效果更好,事实上,FM 可以看做只有一个场的 FFM。

基于特征的矩阵分解

svdFeature也是一种通用的分解模型,有能给把特征信息加入到矩阵分解中,比如时序信息,领域信息、层次信息等,具体分析见Feature-Based Matrix Factorization

张量分解

张量就是矩阵的推广,矩阵是二维关系建模,张量是N维关系建模。这个计算量太复杂了

开源工具

QMF:Quara出的单机多线程的加权ALS矩阵分解和BPR矩阵分解
lightfm:单机多线程的SVD矩阵分解、SVD++矩阵分解、BPR矩阵分解
spark:基于ALS的矩阵分解
LibFM : FM的单机多线程版本
SVD-Feature:基于特征的矩阵分解单机多线程版本
xlearn:FM和FFM的单机多线程版本
libffm:FFM的单机多线程版本

参考资料

《推荐系统实战》

https://tracholar.github.io/machine-learning/2017/03/10/factorization-machine.html
https://tech.meituan.com/deep_understanding_of_ffm_principles_and_practices.html

相关文章

  • 第30课 奇异值分解

    奇异值分解:简称,是矩阵最终和最好的分解,分解的因子是正交矩阵,对角矩阵,正交矩阵,任意矩阵都有这种奇异值分解 对...

  • 线代--矩阵的分解-LU分解n阶方阵

    矩阵分解的概念:初中我们接触过数的分解,如:;推广到矩阵,一个矩阵也可以分解为几个矩阵乘积的形式,矩阵分解具有不同...

  • 非方正矩阵的LU分解_线性代数_day42

    矩阵的LU分解就是将矩阵分解成一个上三角矩阵,和一个下三角矩阵 矩阵的LU分解可以用于非方阵的分解 矩阵的LU分解...

  • 机器学习矩阵分解解析Recommender.Matrix.Fac

    目录: 1.为什么要矩阵分解 2.矩阵分解怎么分解 3.什么样的情况考虑矩阵分解 4.矩阵分解有哪些分类 5.各种...

  • 矩阵的LU分解2_线性代数_day41

    将矩阵A分解为 分解成了LU矩阵 LU分解大概有:

  • 2018-12-23 MF Basic

    【矩阵分解】 矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积。常见的矩阵分解有可逆方阵的三角...

  • SVD奇异值分解(1)-预备知识

    引入 SVD奇异值分解属于矩阵分解的知识,矩阵分解用白话解释就是将一个复杂的矩阵分解成一些特殊形式的矩阵,这些特殊...

  • 推荐系统11:交替最小二乘 (ALS)及其改进Weighted-

    回顾矩阵分解 矩阵分解要将用户物品评分矩阵分解成两个小矩阵,一个矩阵是代表用户偏好的用户隐因子向量组成,另一个矩阵...

  • 矩阵分解的一点总结

    1.为什么要矩阵分解 2.矩阵分解的算法 3.矩阵分解算法的应用场景 4.评价指标 ---------------...

  • 范式组件02

    深度矩阵分解(DMF)模型 深度矩阵分解模型(Deep Matrix Factorization Model,DM...

网友评论

      本文标题:矩阵分解

      本文链接:https://www.haomeiwen.com/subject/vamwxqtx.html