其中,$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\times n_f$单位矩阵。$M_{I_i}$是电影特征矩阵的一个子矩阵,其中只选取$j\in I_i$的列。$I_i$是用户$i$所评分的电影集合。$R(i,I_i)$是原始user-movie矩阵$R$中第$i$行的向量,该行中只选取$j\in 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$的子矩阵,其中只选取$i\in I_j$的列。$I_j$表示对电影$j$评过分的用户集合。$R(I_j,j)$是原始user-movie矩阵$R$的第$j$列向量,该列中只选取$i\in I_j$的行中的元素。

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

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

$$R=\begin{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=\begin{bmatrix}
& r_{12} & r_{13}  & r_{14} \\
r_{21} & & & r_{24} \\
& r_{32} & r_{33} &
\end{bmatrix}$$

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

电影特征矩阵$M$为:
$$M=\begin{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=
\begin{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 \times k$的矩阵,$M_{I_i}M_{I_i}^T$为一个$n_f \times n_f$的矩阵。$R(i,I_i)$为$u_i$所对应的评分向量,该向量的维度为$k$,因为只取了$j \in I_i$中的元素,所以$R(i,I_i)$为$1 \times k$行向量,$R^T(i,I_i)$为$k \times 1$列向量。

例如:
$$
\begin{align*}
A_1 &= M_{I_1}M_{I_1}^T+\lambda n_{u_1}E \\
&= \begin{bmatrix}
m_{12} & m_{13} & m_{14} \\
m_{22} & m_{23} & m_{24}
\end{bmatrix}
\cdot
\begin{bmatrix}
m_{12} & m_{22} \\
m_{13} & m_{23} \\
m_{14} & m_{24}
\end{bmatrix}
+\lambda n_{u_1}
\cdot
\begin{bmatrix}
1 & 0 \\
0 & 1
\end{bmatrix} \\
\\
V_1 &= M_{I_1}R^T(1,I_1) \\
&= \begin{bmatrix}
m_{12} & m_{13} & m_{14} \\
m_{22} & m_{23} & m_{24}
\end{bmatrix}
\cdot
\begin{bmatrix}
r_{12} & r_{13} & r_{14}
\end{bmatrix}^T \\
&= \begin{bmatrix}
m_{12} & m_{13} & m_{14} \\
m_{22} & m_{23} & m_{24}
\end{bmatrix}
\cdot
\begin{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个。

$$
\begin{align*}
A_3 &= U_{I_3}U_{I_3}^T+\lambda n_{m_3}E \\
&= \begin{bmatrix}
u_{11} & u_{13} \\
u_{21} & u_{23}
\end{bmatrix}
\cdot
\begin{bmatrix}
u_{11} & u_{13} \\
u_{21} & u_{23}
\end{bmatrix}^T
+\lambda n_{m_3}
\cdot
\begin{bmatrix}
1 & 0 \\
0 & 1
\end{bmatrix}\\
\\
V_3 &=U_{I_j}R(I_j,j) \\
&=\begin{bmatrix}
u_{11} & u_{13} \\
u_{21} & u_{23}
\end{bmatrix}
\cdot
\begin{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

ALS数学点滴的更多相关文章

  1. 数学复习 ---- Mathematics Notes: A Programmer's Perspective ---- by Orzer ---- 我是沙茶

    今年是好没长进的一年呢..只学了些基本的方法.. 本文记号0] x:p x类型为p1] f(x) 表示一个函数2] (n_1,n_2,...) 表示多元组,特别的,(n)表示一个一元组3] x 表示一 ...

  2. SQL点滴25—T-SQL面试语句,练练手

    原文:SQL点滴25-T-SQL面试语句,练练手 1. 用一条SQL语句查询出每门课都大于80分的学生姓名 name   kecheng    fenshu 张三     语文     81张三    ...

  3. ALS音乐推荐(上)

    本篇文章的开头笔者提出一个疑问,何为数据科学,数据科学是做什么的?大家带着这个疑问去读接下来的这篇音乐推荐的公众号. 从经验上讲,推荐引擎属于大规模机器学习,在日常购物中大家或许深有体会,比如:你在淘 ...

  4. 【机器学习笔记一】协同过滤算法 - ALS

    参考资料 [1]<Spark MLlib 机器学习实践> [2]http://blog.csdn.net/u011239443/article/details/51752904 [3]线性 ...

  5. Spark MLlib回归算法------线性回归、逻辑回归、SVM和ALS

    Spark MLlib回归算法------线性回归.逻辑回归.SVM和ALS 1.线性回归: (1)模型的建立: 回归正则化方法(Lasso,Ridge和ElasticNet)在高维和数据集变量之间多 ...

  6. Spark Mllib里的协调过滤的概念和实现步骤、LS、ALS的原理、ALS算法优化过程的推导、隐式反馈和ALS-WR算法

    不多说,直接上干货! 常见的推荐算法 1.基于关系规则的推荐 2.基于内容的推荐 3.人口统计式的推荐 4.协调过滤式的推荐 (广泛采用) 协调过滤的概念 在现今的推荐技术和算法中,最被大家广泛认可和 ...

  7. 机器学习(十三)——机器学习中的矩阵方法(3)病态矩阵、协同过滤的ALS算法(1)

    http://antkillerfarm.github.io/ 向量的范数(续) 范数可用符号∥x∥λ表示. 经常使用的有: ∥x∥1=|x1|+⋯+|xn| ∥x∥2=x21+⋯+x2n−−−−−− ...

  8. spark 机器学习 ALS原理(一)

    1.线性回归模型线性回归是统计学中最常用的算法,当你想表示两个变量间的数学关系时,就可以用线性回归.当你使用它时,你首先假设输出变量(相应变量.因变量.标签)和预测变量(自变量.解释变量.特征)之间存 ...

  9. 数学思想:为何我们把 x²读作x平方

    要弄清楚这个问题,我们得先认识一个人.古希腊大数学家 欧多克索斯,其在整个古代仅次于阿基米德,是一位天文学家.医生.几何学家.立法家和地理学家. 为何我们把 x²读作x平方呢? 古希腊时代,越来越多的 ...

随机推荐

  1. mysql 连接问题----转载

    最近碰到一个mysql5数据库的问题.就是一个标准的servlet/tomcat网络应用,后台使用mysql数据库.问题是待机一晚上后,第二天早上第一次登录总是失败.察看日志发现如下错误: “com. ...

  2. C#遍历窗体控件(原文出自http://www.liangshunet.com/ca/201403/286434593.htm)

    一.C#遍历窗体控件 主要遍历属于窗体(Form)的控件(Controls),假如窗体中有 Panel.Button 和 TextBox 控件,遍历代码如下: /// <summary> ...

  3. js字符串倒序

    有的时候我们需要把字符串倒序. 比如“范坚强”的倒序就是“强坚范”. 如何对字符串进行倒序呢?你首先想到的方法就是生成一个栈,从尾到头依次取出字符串中的字符压入栈中,然后把栈连接成字符串. var r ...

  4. dede定义全局变量(include/common.inc.php)及调用方式

    dede定义全局变量的文件include/common.inc.php及使用   在include/common.inc.php文件里,dede定义了大量的全局变量,详细自己去看看   dede模板里 ...

  5. 51中的C语言数据类型

    在标准C语言中基本的数据类型为char,int,short,long,float 和double,而在C51编译器中int和short相同,float和double相同. 说明: (1)类型修饰符si ...

  6. 【转】app后端如何选择合适的数据库产品

    转自:http://blog.csdn.net/newjueqi/article/details/44003503 app后端的开发中,经常要面临的一个问题是:数据放在哪里? mysql ?redis ...

  7. bzoj3541: Spoj59 Bytelandian Information Agency

    Description        BIA机构内部使用一个包含N台计算机的网络.每台计算机被标号为1..N,并且1号机是服务器.计算机被一些单向传输线连接着,每条数据线连接两台计算机.服务器可以向任 ...

  8. 关于html5

    html5   是用来  将 js  和 css  结合起来 从而实现 各种功能 javascript 用来定义 html5   页面的逻辑 css 来定义 html5 中的显示样式

  9. Dollars

    uva147: 题意:给你几种钱币,在给你一个钱的数目,问有多少种用这些钱来组成这个数目. 题解:完全背包,不过此时要把钱的数目*100,因为是小数,背包的容量都是整数,然后dp,求出每个容量的数目即 ...

  10. Linux kernel ‘ip6_sk_dst_check’函数拒绝服务漏洞

    漏洞名称: Linux kernel ‘ip6_sk_dst_check’函数拒绝服务漏洞 CNNVD编号: CNNVD-201307-070 发布时间: 2013-07-05 更新时间: 2013- ...