zoukankan      html  css  js  c++  java
  • ALS数学点滴

    其中,$n_{u_i}$表示用户$i$评分的电影数目,$n_{m_j}$表示对电影$j$评分的用户数目。设$I_i$表示用户$i$所评分的电影集合,则$n_{u_i}$是$I_i$的基数,同样的,$I_j$表示对电影$j$评分的用户集合,$n_{m_j}$是$I_j$的基数。这对应于Tikhonov正则化中的$Gamma_U=diag(n_{u_i})$和$Gamma_M=diag(n_{m_j})$

    设$U=[mathbf{u}_i]$为用户特征矩阵,$M=[mathbf{m}_j]$为电影特征矩阵。

    我们在$M$给定的情况下来求解$U$。$U$中某一列$u_i$是通过求解一个正则化线性最小二乘问题确定的,该问题的求解需要已知的用户$i$的评分,以及用户$i$参与评分的电影的特征向量$m_j$.

    用户特征矩阵的每一列的解$mathbf{u}_i$如下:
    $$mathbf{u}_i=A_i^{-1}V_i$$
    该解对应的原始方程为:$$A_i mathbf{u}_i=V_i$$

    其中,$A_i=M_{I_i}M_{I_i}^T+lambda n_{u_i}E$ ,$V_i=M_{I_i}R^T(i,I_i)$。$E$是一个$n_f imes n_f$单位矩阵。$M_{I_i}$是电影特征矩阵的一个子矩阵,其中只选取$jin I_i$的列。$I_i$是用户$i$所评分的电影集合。$R(i,I_i)$是原始user-movie矩阵$R$中第$i$行的向量,该行中只选取$jin I_i$的列中的元素。

    同样的,更新电影特征矩阵$M$的公式为:

    $$mathbf{m}_j=A_j^{-1}V_j,forall j$$

    其中,$A_j=U_{I_j}U_{I_j}^T+lambda n_{m_j}E$,$V_j=U_{I_j}R(I_j,j)$。$U_{I_j}$是用户特征矩阵$U$的子矩阵,其中只选取$iin I_j$的列。$I_j$表示对电影$j$评过分的用户集合。$R(I_j,j)$是原始user-movie矩阵$R$的第$j$列向量,该列中只选取$iin I_j$的行中的元素。

    设用户矩阵和电影矩阵的特征数量为$n_f$,对电影$j$评过分的用户有$k$个,则$U_{I_j}$为一个$n_f imes k$的矩阵,$R(I_j,j)$为一个$k imes 1$的列向量。$V_j=U_{I_j}R(I_j,j)$为一个$f imes k cdot k imes 1=f imes 1$的矩阵。

    设用户数量$n_u=3$,电影数量$n_m=4$,用户以及电影的特征维度$n_f=2$。则user-movie评分矩阵$R$(Rating)为:

    $$R=egin{bmatrix}
    r_{11} & r_{12} & r_{13} & r_{14} \
    r_{21} & r_{22} & r_{23} & r_{24} \
    r_{31} & r_{32} & r_{33} & r_{34}
    end{bmatrix}$$

    若矩阵$R$是稀疏的,那么其形式可能如下:
    $$R=egin{bmatrix}
    & r_{12} & r_{13}  & r_{14} \
    r_{21} & & & r_{24} \
    & r_{32} & r_{33} &
    end{bmatrix}$$

    用户特征矩阵$U$为:
    $$U=egin{bmatrix}
    u_{11} & u_{12} & u_{13} \
    u_{21} & u_{22} & u_{23}
    end{bmatrix}$$

    电影特征矩阵$M$为:
    $$M=egin{bmatrix}
    m_{11} & m_{12} & m_{13} & m_{14} \
    m_{21} & m_{22} & m_{23} & m_{24}
    end{bmatrix}$$

    显然,我们要求解的是用户特征矩阵$U$和电影特征矩阵$M$。

    求解用户特征矩阵$U$的时候要固定电影特征矩阵$M$,用求得的$U$再去求$M$,如此迭代,直到$RMSE$在设定范围之内即可,此时$U$和$M$收敛到一个局部最优解。

    可将$U$表为$U=[mathbf{u}_i], i=1,2,3$。即:
    $$U=
    egin{bmatrix}
    mathbf{u}_1 & mathbf{u}_2& mathbf{u}_3
    end{bmatrix}
    $$

    调用上面的求解公式$mathbf{u}_i=A_i^{-1}V_i$,其中$A_i=M_{I_i}M_{I_i}^T+lambda n_{u_i}E$ ,$V_i=M_{I_i}R^T(i,I_i)$,则:
    $$mathbf{u}_1=A_1^{-1}V_1$$
    以上面的稀疏矩阵为例,求解$[mathbf{u}_i], i=1,2,3$时,$I_1={2,3,4}$,$I_2={1,4}$,$I_3={2,3}$。$n_{u_1}=3$,表示用户$u_1$评过分的电影有3部,设用户$u_i$评过分的电影有$k$部,那么$I_i$的个数为$k$,$M_{I_i}$为一个$n_f imes k$的矩阵,$M_{I_i}M_{I_i}^T$为一个$n_f imes n_f$的矩阵。$R(i,I_i)$为$u_i$所对应的评分向量,该向量的维度为$k$,因为只取了$j in I_i$中的元素,所以$R(i,I_i)$为$1 imes k$行向量,$R^T(i,I_i)$为$k imes 1$列向量。

    例如:
    $$
    egin{align*}
    A_1 &= M_{I_1}M_{I_1}^T+lambda n_{u_1}E \
    &= egin{bmatrix}
    m_{12} & m_{13} & m_{14} \
    m_{22} & m_{23} & m_{24}
    end{bmatrix}
    cdot
    egin{bmatrix}
    m_{12} & m_{22} \
    m_{13} & m_{23} \
    m_{14} & m_{24}
    end{bmatrix}
    +lambda n_{u_1}
    cdot
    egin{bmatrix}
    1 & 0 \
    0 & 1
    end{bmatrix} \
    \
    V_1 &= M_{I_1}R^T(1,I_1) \
    &= egin{bmatrix}
    m_{12} & m_{13} & m_{14} \
    m_{22} & m_{23} & m_{24}
    end{bmatrix}
    cdot
    egin{bmatrix}
    r_{12} & r_{13} & r_{14}
    end{bmatrix}^T \
    &= egin{bmatrix}
    m_{12} & m_{13} & m_{14} \
    m_{22} & m_{23} & m_{24}
    end{bmatrix}
    cdot
    egin{bmatrix}
    r_{12} \
    r_{13} \
    r_{14}
    end{bmatrix}
    end{align*}
    $$

    这样即可求出$mathbf{u}_1$,类似可求出$mathbf{u}_2, mathbf{u}_3$

    好了,这样就求出了$U$,此时在用$U$去求解$M$,求解公式为:$mathbf{m}_j=A_j^{-1}V_j,forall j$。其中,$A_j=U_{I_j}U_{I_j}^T+lambda n_{m_j}E$,$V_j=U_{I_j}R(I_j,j)$。需要注意的是这里的$I_j$与上面的$I_i$指代的内容有所区别,上面的$I_i$表示用户$u_i$所评分的电影集合,$I_i$中的元素个数小于等于电影的总数,即$size(I_i)le n_m$,而这里的$I_j$表示对电影$j$评过分的用户个数,所以$I_j$中的元素个数小于等于用户的总数,即$size(I_j)le n_u$。

    这次以求解$mathbf{m}_3$为例。$I_3={1,3}$,$n_{m_3}=2$表示给电影$m_3$评过分的用户有2个。

    $$
    egin{align*}
    A_3 &= U_{I_3}U_{I_3}^T+lambda n_{m_3}E \
    &= egin{bmatrix}
    u_{11} & u_{13} \
    u_{21} & u_{23}
    end{bmatrix}
    cdot
    egin{bmatrix}
    u_{11} & u_{13} \
    u_{21} & u_{23}
    end{bmatrix}^T
    +lambda n_{m_3}
    cdot
    egin{bmatrix}
    1 & 0 \
    0 & 1
    end{bmatrix}\
    \
    V_3 &=U_{I_j}R(I_j,j) \
    &=egin{bmatrix}
    u_{11} & u_{13} \
    u_{21} & u_{23}
    end{bmatrix}
    cdot
    egin{bmatrix}
    r_{13} \
    r_{33}
    end{bmatrix}
    end{align*}
    $$

    如此,便可求出$mathbf{m}_3=A_3^{-1}V_3$。类似可求出$mathbf{m}_1, mathbf{m}_2, mathbf{m}_4$。

    原始论文:http://www.grappa.univ-lille3.fr/~mary/cours/stats/centrale/reco/paper/MatrixFactorizationALS.pdf


    去吧,去吧,到彼岸去吧,彼岸是光明的世界!
  • 相关阅读:
    centos7装NVIDIA显卡驱动
    前端MVC学习笔记(三)——AngularJS服务、路由、内置API、jQueryLite
    前端MVC学习笔记(二)——AngularJS验证、过滤器、指令
    前端MVC学习笔记(一)——MVC概要与angular概要、模板与数据绑定
    JavaScript学习笔记(四)——jQuery插件开发与发布
    JavaScript学习笔记(三)——this、原型、javascript面向对象
    Node.js学习笔记——Node.js开发Web后台服务
    JavaScript学习笔记(二)——闭包、IIFE、apply、函数与对象
    JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
    【趣味分享】C#实现回味童年的24点算法游戏
  • 原文地址:https://www.cnblogs.com/lengyue365/p/5629713.html
Copyright © 2011-2022 走看看