1. 问题提出

对于与之前一样的数据集,我们很难得到一部电影偏向爱情片和动作片的程度,即很难得到表中 x1x_1x2x_2 的值,而且一部电影的特征不止这两种,我们也需要更多的特征。

Movie Alice (1) Bob (2) Carol (3) Dave (4) x1x_1
(romance)
x2x_2
(action)
Love at last 5 5 0 0 0.9 0
Romance forever 5 ? ? 0 1.0 0.01
Cute Puppies of love ? 4 0 ? 0.99 0
Nonstop car chases 0 0 5 4 0.1 1.0
Swords vs. karate 0 0 5 ? 0 0.9

怎样得到这些特征呢?

将问题稍微变化一下,假如我们有一个数据集,如下图,我们并不知道表中 x1x_1x2x_2 的特征的值(x0=1x_0=1)。

Movie Alice (1) Bob (2) Carol (3) Dave (4) x1x_1
(romance)
x2x_2
(action)
x(1)x^{(1)} Love at last 5 5 0 0
x(2)x^{(2)} Romance forever 5 ? ? 0
x(3)x^{(3)} Cute Puppies of love ? 4 0 ?
x(4)x^{(4)} Nonstop car chases 0 0 5 4
x(5)x^{(5)} Swords vs. karate 0 0 5 ?

但假设我们采访了每一位用户,并且每一位用户都告诉我们,他们喜欢爱情电影和动作电影的程度的程度。那么 Alice、Bob、Carol、Dave 都有了对应的参数 θ(1)\theta^{(1)} , θ(2)\theta^{(2)}θ(3)\theta^{(3)}θ(4)\theta^{(4)} 如下:

θ(1)=[050],θ(2)=[050],θ(3)=[005],θ(4)=[005]\theta^{(1)}=\left[\begin{array}{l} 0 \\ 5 \\ 0 \end{array}\right], \theta^{(2)}=\left[\begin{array}{l} 0 \\ 5 \\ 0 \end{array}\right], \theta^{(3)}=\left[\begin{array}{l} 0 \\ 0 \\ 5 \end{array}\right], \theta^{(4)}=\left[\begin{array}{l} 0 \\ 0 \\ 5 \end{array}\right]

比如 Alice 的参数代表她特别喜欢爱情电影,但是一点都不喜欢动作电影。此时我们知道对于电影 x(1)x^{(1)} ,Alice 和 Bob 打了5分,而且他们都喜欢爱情电影,不喜欢动作电影,Carol 和 Dave 给了 0 分,他们都喜欢动作电影,不喜欢爱情电影。那么我们就能猜到,这个电影可能是爱情电影,不太可能是动作片。所以 x1x_1 可能等于 1, x2x_2 可能等于 0 。

我们想要知道的是,x(1)x^{(1)} 应该是多少,才使得 (θ(1))Tx(1)5(\theta^{(1)})^Tx^{(1)} \approx 5(θ(2))Tx(1)5(\theta^{(2)})^Tx^{(1)} \approx 5(θ(3))Tx(1)0(\theta^{(3)})^Tx^{(1)} \approx 0(θ(4))Tx(1)0(\theta^{(4)})^Tx^{(1)} \approx 0 ,很明显,x(1)x^{(1)} 应该约等于 [11.00]\left[\begin{array}{l}1 \\1.0 \\0\end{array}\right]

2. 公式化表达

给定 θ(1),,θ(nu)\theta^{(1)},\dots,\theta^{(n_u)},学习特定电影的特征参数 x(i)x^{(i)} ,目标函数为:

minx(i)12j:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2k=1n(xk(i))2\min _{x^{(i)}} \frac{1}{2} \sum_{j: r(i, j)=1}\left(\left(\theta^{(j)}\right)^{T} x^{(i)}-y^{(i, j)}\right)^{2}+\frac{\lambda}{2} \sum_{k=1}^{n}\left(x_{k}^{(i)}\right)^{2}

可以发现这个公式和基于内容的推荐算法的公式很像,只是最小化改变的变量和正则化项不同。

给定 θ(1),,θ(nu)\theta^{(1)},\dots,\theta^{(n_u)},学习所有的电影的特征参数 x(1),,x(nm)x^{(1)},\dots,x^{(n_m)},目标函数为:

minx(1),,x(nm)12i=1nmj:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2i=1nmk=1n(xk(i))2\min _{x^{(1)}, \ldots, x^{\left(n_{m}\right)}} \frac{1}{2} \sum_{i=1}^{n_{m}} \sum_{j: r(i, j)=1}\left(\left(\theta^{(j)}\right)^{T} x^{(i)}-y^{(i, j)}\right)^{2}+\frac{\lambda}{2} \sum_{i=1}^{n_{m}} \sum_{k=1}^{n}\left(x_{k}^{(i)}\right)^{2}

3. 协同过滤

  • 给定 x(1),,x(nm)x^{(1)},\dots,x^{(n_m)},可以学习 θ(1),,θ(nu)\theta^{(1)}, \ldots, \theta^{\left(n_{u}\right)} (见16-2 基于内容的推荐算法)
  • 给定 θ(1),,θ(nu)\theta^{(1)},\dots,\theta^{(n_u)},可以学习 x(1),,x(nm)x^{(1)},\dots,x^{(n_m)}

这有些像先有鸡还是先有蛋的问题,如果我们随机的猜测一些 θ\theta 的值,根据 θ\theta 的值来计算 xx 的值,再用 xx 的值来计算 θ\theta 的值……多次重复迭代之后,算法将收敛到一组合理的值。这是简单的协同过滤算法,在接下来的一节,我们将改进这个算法,使其在计算时更加高效。该问题只在每位用户都对数个电影进行了评价,并且每一部电影都被数位用户评价的情况下有效。