吴恩达机器学习笔记(十三)

1. 基于内容的推荐算法

推荐算法主要的目的就是根据已有信息找出一些未知的信息,比如根据用户以往的观影记录推荐其可能喜欢的。下图表示若干用户对不同电影的评分,其中包含一部分 ? ? ? 表示用户没有对对应的电影评分,我们正是希望通过推荐算法将下图 ? ? ? 位置表示的用户评分计算出来。
在这里插入图片描述
为了计算未知数据,如下图所示,根据每个电影的特点建立特征向量 x ( i ) = [ x 0 x 1 x 2 ] x^{(i)}=\left[\begin{matrix}x_0 \\ x_1 \\ x_2\end{matrix}\right] x(i)=x0x1x2(其中 x 0 = 1 x_0=1 x0=1),之后根据每个用户的信息,为每个用户构建一个维度与 x x x 相同的参数向量 θ ( j ) \theta^{(j)} θ(j),那么用户 j j j 对电影 i i i 的评分就可以记为 ( θ ( j ) ) T x ( i ) (\theta^{(j)})^Tx^{(i)} (θ(j))Tx(i)

在这里插入图片描述
对于电影的特征向量,我们可以根据电影的信息构建,所以是已知的信息。而 θ ( j ) \theta^{(j)} θ(j) 需要根据用户的历史评价来计算,所以主要目标就是构建用户的参数向量。

这里我们首先对其中的参数表示进行定义:

  • n u n_u nu 表示用户个数
  • n m n_m nm 表示电影的个数
  • r ( i , j ) = 1 r(i,j)=1 r(i,j)=1 表示用户 j j j 对电影 i i i 进行了评分
  • y ( i , j ) y^{(i,j)} y(i,j) 表示用户 j j j 对电影 i i i 的评分
  • θ ( j ) \theta^{(j)} θ(j) 用户 j j j 的参数向量,有 n n n 个特征的电影, θ ( j ) ∈ R n + 1 \theta^{(j)}\in \mathbb{R}^{n+1} θ(j)Rn+1 θ 0 \theta_0 θ0 为偏置项
  • x ( i ) x^{(i)} x(i) 电影 i i i 的特征向量,对于 n n n 个特征的电影, x ( i ) ∈ R n + 1 x^{(i)}\in \mathbb{R}^{n+1} x(i)Rn+1,其中 x 0 = 1 x_0=1 x0=1
  • m ( j ) m^{(j)} m(j) 表示用户 j j j 已经评价的电影个数

为了求解 θ ( j ) \theta^{(j)} θ(j) 中的参数,我们可以构建如下的代价函数:
min ⁡ θ ( j ) 1 2 ∑ i : r ( i , j ) = 1 [ ( θ ( j ) ) T x ( i ) − y ( i , j ) ] 2 + λ 2 ∑ k = 1 n [ θ k ( j ) ] 2 \min_{\theta^{(j)}} \frac{1}{2}\sum_{i:r(i,j)=1}\left[(\theta^{(j)})^Tx^{(i)}-y^{(i,j)}\right]^2 + \frac{\lambda}{2}\sum_{k=1}^n\left[\theta_k^{(j)}\right]^2 θ(j)min21i:r(i,j)=1[(θ(j))Tx(i)y(i,j)]2+2λk=1n[θk(j)]2

其中 i : r ( i , j ) = 1 i:r(i,j)=1 i:r(i,j)=1 表示用户 j j j 已经评价的所有电影 i i i,后面表示正则项。

对于所有用户的参数向量 θ ( 1 ) , θ ( 2 ) , ⋯   , θ ( n u ) \theta^{(1)},\theta^{(2)},\cdots,\theta^{(n_u)} θ(1),θ(2),,θ(nu),我们将它们所有的代价函数累加,得到如下的代价函数:
min ⁡ θ ( 1 ) , ⋯   , θ ( n u ) 1 2 ∑ j = 1 n u ∑ i : r ( i , j ) = 1 [ ( θ ( j ) ) T x ( i ) − y ( i , j ) ] 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n [ θ k ( j ) ] 2 \min_{\theta^{(1)},\cdots,\theta^{(n_u)}} \frac{1}{2}\sum_{j=1}^{n_u}\sum_{i:r(i,j)=1}\left[(\theta^{(j)})^Tx^{(i)}-y^{(i,j)}\right]^2 + \frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^n\left[\theta_k^{(j)}\right]^2 θ(1),,θ(nu)min21j=1nui:r(i,j)=1[(θ(j))Tx(i)y(i,j)]2+2λj=1nuk=1n[θk(j)]2

得到代价函数后,我们就可以使用如下梯度更新的方式计算出每个参数的值:
θ k ( j ) = θ k ( j ) − α ∑ i : r ( i , j ) = 1 [ ( θ ( j ) ) T x ( i ) − y ( i , j ) ] x k ( i ) i f   k = 0 θ k ( j ) = θ k ( j ) − α { ∑ i : r ( i , j ) = 1 [ ( θ ( j ) ) T x ( i ) − y ( i , j ) ] x k ( i ) + λ θ k ( j ) } i f   k ≠ 0 \begin{aligned} \theta_k^{(j)} &= \theta_k^{(j)} - \alpha \sum_{i:r(i,j)=1}\left[ (\theta^{(j)})^Tx^{(i)}-y^{(i,j)}\right]x_k^{(i)} &\quad if\ k=0\\ \theta_k^{(j)} &= \theta_k^{(j)} - \alpha \left\{\sum_{i:r(i,j)=1}\left[ (\theta^{(j)})^Tx^{(i)}-y^{(i,j)}\right]x_k^{(i)}+\lambda\theta_k^{(j)} \right\}&\quad if\ k\neq 0\\ \end{aligned} θk(j)θk(j)=θk(j)αi:r(i,j)=1[(θ(j))Tx(i)y(i,j)]xk(i)=θk(j)αi:r(i,j)=1[(θ(j))Tx(i)y(i,j)]xk(i)+λθk(j)if k=0if k=0

这种根据电影的特征做出预测的方法称为 基于内容的推荐算法,算法的关键就算要对电影的特点构建特征向量。但是有时我们很难对要预测的事物构建特征向量,这时基于内容的推荐算法就不能满足要求了。

2. 协同过滤

特征学习,自行学习所需要的特征

在上面的算法过程中,我们需要首先计算出每个电影的特征向量,但是在条件不允许时,我们无法找到电影的特征向量,如下所示:
在这里插入图片描述

这时如果我们知道每个人的电影偏好,并构建参数向量 θ \theta θ,那么就能根据每个人的偏好总结出对应电影的特征向量。

如 A 和 B 都喜欢 romance 电影,但是不喜欢 action 类型的电影,对于第一步电影 Love at last,A 和 B 都喜欢,那么就有很大的概率判断该电影属于 romance 电影,所以对应的特征向量就可能为 x ( 1 ) = [ x 1 x 2 ] = [ 1 0 ] x^{(1)}=\left[\begin{matrix}x_1\\ x_2\end{matrix}\right]=\left[\begin{matrix}1 \\ 0\end{matrix}\right] x(1)=[x1x2]=[10]

这时如果我们知道了用户 A 的参数向量 θ ( 1 ) \theta^{(1)} θ(1),又知道了 A 对电影 Love at last 的评分为 5 5 5,所以只需要找到电影 Love at last 对应的特征向量 x ( 1 ) x^{(1)} x(1),使得 y ( 1 , 1 ) = 5 ≈ ( θ ( 1 ) ) T x ( 1 ) y^{(1,1)}=5\approx (\theta^{(1)})^Tx^{(1)} y(1,1)=5(θ(1))Tx(1),依次这样使用每个 θ ( 1 ) , θ ( 2 ) , θ ( 3 ) , ⋯ \theta^{(1)},\theta^{(2)},\theta^{(3)},\cdots θ(1),θ(2),θ(3), 计算每个 x ( i ) x^{(i)} x(i),使得 y ( i , j ) ≈ ( θ ( j ) ) T x ( i ) y^{(i,j)}\approx (\theta^{(j)})^Tx^{(i)} y(i,j)(θ(j))Tx(i),就能求解出每个电影的特征向量,也就能根据特征向量对未知数据进行预测了。

至此我们就得到了根据用户的参数向量 θ ( 1 ) , ⋯   , θ ( n u ) \theta^{(1)},\cdots,\theta^{(n_u)} θ(1),,θ(nu) 计算电影的特征向量 x ( i ) x^{(i)} x(i)的方法,我们只需要优化如下的代价函数即可:
min ⁡ x ( i ) 1 2 ∑ j : r ( i , j ) = 1 [ ( θ ( j ) ) T x ( i ) − y ( i , j ) ] 2 + λ 2 ∑ k = 1 n [ x k ( i ) ] 2 \min_{x^{(i)}}\frac{1}{2}\sum_{j:r(i,j)=1}\left[(\theta^{(j)})^Tx^{(i)} -y^{(i,j)}\right]^2 + \frac{\lambda}{2}\sum_{k=1}^{n}\left[x_k^{(i)}\right]^2 x(i)min21j:r(i,j)=1[(θ(j))Tx(i)y(i,j)]2+2λk=1n[xk(i)]2

计算所有电影的特征向量 x ( 1 ) , ⋯   , x ( n m ) x^{(1)},\cdots,x^{(n_m)} x(1),,x(nm) 可以优化如下的代价函数:
min ⁡ x ( 1 ) , ⋯   , x ( n m ) 1 2 ∑ i = 1 n m ∑ j : r ( i , j ) = 1 [ ( θ ( j ) ) T x ( i ) − y ( i , j ) ] 2 + λ 2 ∑ i = 1 n m ∑ k = 1 n [ x k ( i ) ] 2 \min_{x^{(1)},\cdots,x^{(n_m)}}\frac{1}{2}\sum_{i=1}^{n_m}\sum_{j:r(i,j)=1}\left[(\theta^{(j)})^Tx^{(i)} -y^{(i,j)}\right]^2 + \frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}\left[x_k^{(i)}\right]^2 x(1),,x(nm)min21i=1nmj:r(i,j)=1[(θ(j))Tx(i)y(i,j)]2+2λi=1nmk=1n[xk(i)]2

综上所述,

  • 给定了电影的特征向量 x ( 1 ) , ⋯   , x ( n m ) x^{(1)},\cdots,x^{(n_m)} x(1),,x(nm) 和对应部分电影的评分,我们就能计算出参数向量 θ ( 1 ) , ⋯   , θ ( n u \theta^{(1)},\cdots,\theta^{(n_u} θ(1),,θ(nu
  • 给定了参数向量 θ ( 1 ) , ⋯   , θ ( n u \theta^{(1)},\cdots,\theta^{(n_u} θ(1),,θ(nu,我们能够计算出电影特征向量 x ( 1 ) , ⋯   , x ( n m ) x^{(1)},\cdots,x^{(n_m)} x(1),,x(nm)

所以我们就可以首先任意初始化一个参数向量 θ \theta θ,计算特征向量 x x x ,再根据算出的 x x x 计算 θ \theta θ,这样就构成了协同过滤 θ → x → θ → x → θ → x → θ ⋯ \theta \rightarrow x \rightarrow \theta \rightarrow x \rightarrow \theta \rightarrow x \rightarrow \theta \cdots θxθxθxθ,不断重复优化,直到得出 θ \theta θ x x x 的最优解。

协同过滤就是再执行算法时观察大量的用户,根据这些用户的实际行为,协同的得到每个人对电影的评分,只要每位用户都对部分电影做出了评价,那么每个用户都在帮助算法学习更合适的特征,再通过这些特征预测其他用户的评分。

3. 协同过滤算法

给定电影的特征向量 x ( 1 ) , ⋯   , x ( n m ) x^{(1)},\cdots,x^{(n_m)} x(1),,x(nm) ,我们可以最小化下式求解 θ ( 1 ) , θ ( 2 ) , ⋯   , θ ( n u ) \theta^{(1)},\theta^{(2)},\cdots,\theta^{(n_u)} θ(1),θ(2),,θ(nu)
min ⁡ θ ( 1 ) , ⋯   , θ ( n u ) 1 2 ∑ j = 1 n u ∑ i : r ( i , j ) = 1 [ ( θ ( j ) ) T x ( i ) − y ( i , j ) ] 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n [ θ k ( j ) ] 2 \min_{\theta^{(1)},\cdots,\theta^{(n_u)}} \frac{1}{2}\sum_{j=1}^{n_u}\sum_{i:r(i,j)=1}\left[(\theta^{(j)})^Tx^{(i)}-y^{(i,j)}\right]^2 + \frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^n\left[\theta_k^{(j)}\right]^2 θ(1),,θ(nu)min21j=1nui:r(i,j)=1[(θ(j))Tx(i)y(i,j)]2+2λj=1nuk=1n[θk(j)]2

而如果给定了特征 θ ( 1 ) , θ ( 2 ) , ⋯   , θ ( n u ) \theta^{(1)},\theta^{(2)},\cdots,\theta^{(n_u)} θ(1),θ(2),,θ(nu),我们可以最小化下式求解 x ( 1 ) , ⋯   , x ( n m ) x^{(1)},\cdots,x^{(n_m)} x(1),,x(nm)
min ⁡ x ( 1 ) , ⋯   , x ( n m ) 1 2 ∑ i = 1 n m ∑ j : r ( i , j ) = 1 [ ( θ ( j ) ) T x ( i ) − y ( i , j ) ] 2 + λ 2 ∑ i = 1 n m ∑ k = 1 n [ x k ( i ) ] 2 \min_{x^{(1)},\cdots,x^{(n_m)}}\frac{1}{2}\sum_{i=1}^{n_m}\sum_{j:r(i,j)=1}\left[(\theta^{(j)})^Tx^{(i)} -y^{(i,j)}\right]^2 + \frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}\left[x_k^{(i)}\right]^2 x(1),,x(nm)min21i=1nmj:r(i,j)=1[(θ(j))Tx(i)y(i,j)]2+2λi=1nmk=1n[xk(i)]2

协同过滤算法将以上两个式子结合为一个式子,这样就不需要循环求解,如下所示:
min ⁡ x ( 1 ) , ⋯   , x ( n m ) θ ( 1 ) , ⋯   , θ ( n u ) J ( x ( 1 ) , ⋯   , x ( n m ) , θ ( 1 ) , ⋯   , θ ( n u ) ) = 1 2 ∑ ( i , j ) : r ( i , j ) = 1 [ ( θ ( j ) ) T x ( i ) − y ( i , j ) ] 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n [ θ k ( j ) ] 2 + λ 2 ∑ i = 1 n m ∑ k = 1 n [ x k ( i ) ] 2 \begin{aligned} &\min_{x^{(1)},\cdots,x^{(n_m)} \atop \theta^{(1)},\cdots,\theta^{(n_u)}} J(x^{(1)},\cdots,x^{(n_m)} , \theta^{(1)},\cdots,\theta^{(n_u)}) \\ =&\frac{1}{2}\sum_{(i,j):r(i,j)=1}\left[(\theta^{(j)})^Tx^{(i)} -y^{(i,j)}\right]^2+ \frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^n\left[\theta_k^{(j)}\right]^2+ \frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}\left[x_k^{(i)}\right]^2 \end{aligned} =θ(1),,θ(nu)x(1),,x(nm)minJ(x(1),,x(nm),θ(1),,θ(nu))21(i,j):r(i,j)=1[(θ(j))Tx(i)y(i,j)]2+2λj=1nuk=1n[θk(j)]2+2λi=1nmk=1n[xk(i)]2

式子中的第一项是上面两个式子第一项的结合,后面两项分别表示对应的惩罚项。这里有一点不一样的是在我们分别求解 θ \theta θ x x x 时, x ∈ R n + 1 , 、 θ ∈ R n + 1 x\in\mathbb{R}^{n+1},、\theta\in\mathbb{R}^{n+1} xRn+1,θRn+1 ,但是在我们联合求解时, x ∈ R n , 、 θ ∈ R n x\in\mathbb{R}^{n},、\theta\in\mathbb{R}^{n} xRn,θRn,这是因为我们联合求解时不需要偏置项,算法可以自己学习相关的特征。

综上所述,协同过滤算法的过程如下:

  1. 用小随机数初始化 x ( 1 ) , ⋯   , x ( n m ) , θ ( 1 ) , ⋯   , θ ( n u ) x^{(1)},\cdots,x^{(n_m)} , \theta^{(1)},\cdots,\theta^{(n_u)} x(1),,x(nm),θ(1),,θ(nu)

  2. 使用梯度下降算法最小化代价函数 J ( x ( 1 ) , ⋯   , x ( n m ) , θ ( 1 ) , ⋯   , θ ( n u ) ) J(x^{(1)},\cdots,x^{(n_m)} , \theta^{(1)},\cdots,\theta^{(n_u)}) J(x(1),,x(nm),θ(1),,θ(nu))
    x k ( i ) = x k ( i ) − α [ ∑ j : r ( i , j ) = 1 [ ( θ ( j ) ) T x ( i ) − y ( i , j ) ] θ k ( j ) + λ x k ( i ) ] θ k ( i ) = θ k ( i ) − α [ ∑ i : r ( i , j ) = 1 [ ( θ ( j ) ) T x ( i ) − y ( i , j ) ] x k ( j ) + λ θ k ( i ) ] \begin{aligned} x_k^{(i)} = x_k^{(i)} - \alpha\left[ \sum_{j:r(i,j)=1}\left[(\theta^{(j)})^Tx^{(i)}-y^{(i,j)}\right]\theta_k^{(j)}+\lambda x_k^{(i)} \right] \\ \theta_k^{(i)} = \theta_k^{(i)} - \alpha\left[ \sum_{i:r(i,j)=1}\left[(\theta^{(j)})^Tx^{(i)}-y^{(i,j)}\right]x_k^{(j)}+\lambda \theta_k^{(i)} \right] \end{aligned} xk(i)=xk(i)αj:r(i,j)=1[(θ(j))Tx(i)y(i,j)]θk(j)+λxk(i)θk(i)=θk(i)αi:r(i,j)=1[(θ(j))Tx(i)y(i,j)]xk(j)+λθk(i)

  3. 使用 ( θ ( i ) ) T x ( j ) (\theta^{(i)})^Tx^{(j)} (θ(i))Tx(j) 计算用户对电影的评分

4. 协同过滤的向量实现

对于如下的电影评分表,我们可以构建一个矩阵进行表示,
在这里插入图片描述

对于 n u = 4 n_u=4 nu=4 个用户对 n m = 5 n_m=5 nm=5 个电影的评分,我们可以构建一个 n m × n u n_m\times n_u nm×nu 的评分矩阵:
Y = [ 5 5 0 0 5 ? ? 0 ? 4 0 ? 0 0 5 4 0 0 5 0 ] = [ ( θ ( 1 ) ) T x ( 1 ) ( θ ( 2 ) ) T x ( 1 ) ⋯ ( θ ( n u ) ) T x ( 1 ) ( θ ( 1 ) ) T x ( 2 ) ( θ ( 2 ) ) T x ( 2 ) ⋯ ( θ ( n u ) ) T x ( 2 ) ⋮ ⋮ ⋮ ⋮ ( θ ( 1 ) ) T x ( n m ) ( θ ( 2 ) ) T x ( n m ) ⋯ ( θ ( n u ) ) T x ( n m ) ] Y = \left[\begin{matrix} 5 & 5 & 0 & 0 \\ 5 & ? & ? & 0 \\ ? & 4 & 0 & ? \\ 0 & 0 & 5 & 4 \\ 0 & 0 & 5 & 0 \end{matrix}\right] =\left[\begin{matrix} (\theta^{(1)})^Tx^{(1)} & (\theta^{(2)})^Tx^{(1)} & \cdots & (\theta^{(n_u)})^Tx^{(1)} \\ (\theta^{(1)})^Tx^{(2)} & (\theta^{(2)})^Tx^{(2)} & \cdots & (\theta^{(n_u)})^Tx^{(2)} \\ \vdots & \vdots & \vdots & \vdots \\ (\theta^{(1)})^Tx^{(n_m)} & (\theta^{(2)})^Tx^{(n_m)} & \cdots & (\theta^{(n_u)})^Tx^{(n_m)} \end{matrix}\right] Y=55?005?4000?05500?40=(θ(1))Tx(1)(θ(1))Tx(2)(θ(1))Tx(nm)(θ(2))Tx(1)(θ(2))Tx(2)(θ(2))Tx(nm)(θ(nu))Tx(1)(θ(nu))Tx(2)(θ(nu))Tx(nm)

其中每个 y ( i , j ) = ( θ ( i ) ) T x ( j ) y^{(i,j)}=(\theta^{(i)})^Tx^{(j)} y(i,j)=(θ(i))Tx(j) 表示通过特征向量和权重向量得到的评分值。如果我们将特征向量表示如下,其中 ( x ( 1 ) ) T (x^{(1)})^T (x(1))T 表示将列向量转置为行向量:
X = [ ( x ( 1 ) ) T ( x ( 2 ) ) T ⋮ ( x ( n m ) ) T ] X = \left[\begin{matrix}(x^{(1)})^T \\ (x^{(2)})^T \\ \vdots \\ (x^{(n_m)})^T \end{matrix}\right] X=(x(1))T(x(2))T(x(nm))T

再将权重向量表示如下:
Θ = [ ( θ ( 1 ) ) T ( θ ( 2 ) ) T ⋮ ( θ ( n u ) ) T ] \Theta = \left[\begin{matrix}(\theta^{(1)})^T \\ (\theta^{(2)})^T \\ \vdots \\ (\theta^{(n_u)})^T \end{matrix}\right] Θ=(θ(1))T(θ(2))T(θ(nu))T

那么我们就可以将评分矩阵表示为两者的乘积,即:
F = X Θ T F = X \Theta^T F=XΘT

该方法也称为 低秩矩阵分解(low rank matrix factorization)

通过计算得出每个电影的特征向量 x ( i ) x^{(i)} x(i) 后,我们可以通过如下的方式衡量两个电影 i i i k k k 之间的相似度:
∥ x ( i ) − x ( k ) ∥ \| x^{(i)}- x^{(k)}\| x(i)x(k)

也就是通过衡量两个特征向量之间的距离,距离值越小,表示两个电影越相似,进而找到最相关的两个电影,通过这种方式就可以向用户推荐相似的电影。

5. 均值归一化

我们通过一个例子来说明均值归一化的目的,对于如下的用户评分,
在这里插入图片描述

我们可以发现用户 E E E 并没有对任何电影有过评分,对于如下的代价函数:

min ⁡ x ( 1 ) , ⋯   , x ( n m ) θ ( 1 ) , ⋯   , θ ( n u ) 1 2 ∑ ( i , j ) : r ( i , j ) = 1 [ ( θ ( j ) ) T x ( i ) − y ( i , j ) ] 2 + λ 2 ∑ i = 1 n m ∑ k = 1 n [ x k ( i ) ] 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n [ θ k ( j ) ] 2 \min_{x^{(1)},\cdots,x^{(n_m)} \atop \theta^{(1)},\cdots,\theta^{(n_u)}} \frac{1}{2}\sum_{(i,j):r(i,j)=1}\left[(\theta^{(j)})^Tx^{(i)} -y^{(i,j)}\right]^2+ \frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}\left[x_k^{(i)}\right]^2+ \frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^n\left[\theta_k^{(j)}\right]^2 θ(1),,θ(nu)x(1),,x(nm)min21(i,j):r(i,j)=1[(θ(j))Tx(i)y(i,j)]2+2λi=1nmk=1n[xk(i)]2+2λj=1nuk=1n[θk(j)]2

如果我们想要预测用户 E 对每个电影的评分,就要计算其参数向量 θ ( 5 ) \theta^{(5)} θ(5) ,由于当 i = 5 i = 5 i=5 r ( i , j ) r(i,j) r(i,j) 都不为 1 1 1 ,所以在计算 θ ( 5 ) \theta^{(5)} θ(5) 时上式的前一项不会有影响,只有最后一项 λ 2 ∑ j = 1 n u ∑ k = 1 n [ θ k ( j ) ] 2 \frac{\lambda}{2}\sum\limits_{j=1}^{n_u}\sum\limits_{k=1}^n\left[\theta_k^{(j)}\right]^2 2λj=1nuk=1n[θk(j)]2 会对 θ ( 5 ) \theta^{(5)} θ(5) 的值有影响,所以在计算时也会使该式尽可能小,由于只有这一项,所以最后会趋向于使 θ ( 5 ) = [ 0 0 ] \theta^{(5)}=\left[\begin{matrix} 0 \\ 0 \end{matrix}\right] θ(5)=[00],所以最后对用户 E 的所有电影的评分预测 ( θ ( 5 ) ) T x ( i ) (\theta^{(5)})^Tx^{(i)} (θ(5))Tx(i) 都会是 0 0 0

预测都是 0 0 0 的结果并不是我们想要的,我们并不能根据这个结果得到任何与 E 相关的信息,也就不能根据这些预测结果对用户 E 进行相似的电影推荐。

为了解决这个问题,我们引入均值归一化。首先构造评分矩阵,并计算每个电影获得评分的均值 μ \mu μ
Y = [ 5 5 0 0 ? 5 ? ? 0 ? ? 4 0 ? ? 0 0 5 4 ? 0 0 5 0 ? ] μ = [ 2.5 2.5 2 2.25 1.25 ] Y = \left[\begin{matrix} 5 & 5 & 0 & 0 & ? \\ 5 & ? & ? & 0 & ? \\ ? & 4 & 0 & ? & ? \\ 0 & 0 & 5 & 4 & ? \\ 0 & 0 & 5 & 0 & ? \end{matrix}\right] \quad\quad \mu= \left[\begin{matrix} 2.5 \\ 2.5 \\ 2 \\ 2.25 \\ 1.25 \\ \end{matrix}\right] Y=55?005?4000?05500?40?????μ=2.52.522.251.25

之后将每个用户对指定电影的评分都减去该电影的均值,那么评分矩阵就变为 :
Y = [ 2.5 2.5 − 2.5 − 2.5 ? 2.5 ? ? − 2.5 ? ? 2 − 2 ? ? − 2.25 − 2.25 2.75 1.75 ? − 1.25 − 1.25 3.75 − 1.25 ? ] Y = \left[\begin{matrix} 2.5 & 2.5 & -2.5 & -2.5 & ? \\ 2.5 & ? & ? & -2.5 & ? \\ ? & 2 & -2 & ? & ? \\ -2.25 & -2.25 & 2.75 & 1.75 & ? \\ -1.25 & -1.25 & 3.75 & -1.25 & ? \end{matrix}\right] Y=2.52.5?2.251.252.5?22.251.252.5?22.753.752.52.5?1.751.25?????

我们就可以根据新得到的评分矩阵计算参数向量 θ ( j ) \theta^{(j)} θ(j) 和特征向量 x ( i ) x^{(i)} x(i),之后在利用学习到的向量对未知变量预测时,我们就需要加上每个电影对应的均值,即用户 j j j 对电影 i i i 的预测结果表示为:
( θ ( j ) ) T x ( i ) + μ i (\theta^{(j)})^Tx^{(i)}+\mu_i (θ(j))Tx(i)+μi

那么最终对用户 E 预测的结果就变成了所有电影获得的评分均值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值