美文网首页
矩阵分解

矩阵分解

作者: 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

    相关文章

      网友评论

          本文标题:矩阵分解

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