SVD++ Implementation in GraphX
Clarification
写完之后我突然发现这个标题看上去貌似有“以下实现是由本人完成的”这样的误导,所以特此澄清,下文出现的代码统统摘自
apache/spark.
SVD++ Intro
首先简单介绍 SVD++ 算法在协同过滤中的应用及其数学直觉。
SVD in CF
考虑 CF 中最为常见的用户给电影评分的场景,我们需要一个数学模型来模拟用户给电影打分的场景,i.e. 对评分进行预测。
一个 Naive 的方案可以是将评分矩阵看作是两个矩阵的乘积:
$$
U = \begin{bmatrix}
u_{11} & \cdots & u_{1k} \\
\vdots & \ddots & \vdots \\
u_{m1} & \cdots & u_{mk}
\end{bmatrix}
\begin{bmatrix}
i_{11} & \cdots & i_{1n} \\
\vdots & \ddots & \vdots \\
i_{k1} & \cdots & i_{kn}
\end{bmatrix}
$$.