机器学习10-推荐系统

基于内容的推荐算法

符号定义

  • n u n_u nu:用户的数量
  • n m n_m nm:电影的数量
  • r ( i , j ) = 1 r(i,j) = 1 r(i,j)=1:表示用户 j 有对 电影 i 做出评价
  • y ( i , j ) y^{(i,j)} y(i,j):当 r ( i , j ) = 1 r(i,j) = 1 r(i,j)=1 时,用户 j 对电影 i 的评分
  • m ( j ) m^{(j)} m(j):用户 j 评价过的电影数目

如下图, n u = 4 , n m = 5 n_u = 4,n_m = 5 nu=4,nm=5

在这里插入图片描述

假设每一部电影都有一个特征集 x,上图用 x 1 , x 2 x_1,x_2 x1,x2 表示, x 1 x_1 x1 衡量一部电影为爱情片的程度, x 2 x_2 x2 衡量一部电影为动作片的程度,此外,用 x 0 = 1 x_0 = 1 x0=1 表示截距项,则 x ( 1 ) = [ 1 0.9 0 ] x^{(1)} = \begin{bmatrix} 1\\ 0.9\\ 0\\ \end{bmatrix} x(1)=10.90

我们可以把每一个用户的预测评价值当做线性回归问题。对于每个用户 j,需要学习参数 θ ( j ) ∈ R n + 1 \theta^{(j)} \in \Bbb R^{n+1} θ(j)Rn+1,n 为特征数量,之后便可用 ( θ ( j ) ) T x ( i ) (\theta^{(j)})^Tx^{(i)} (θ(j))Tx(i) 预测用户 j 电影 i 的评分。

例如,预测用户 1 对电影 3 的评分,假设学习到 θ ( 1 ) = [ 0 5 0 ] \theta^{(1)} = \begin{bmatrix} 0\\5\\0 \end{bmatrix} θ(1)=050 x ( 3 ) = [ 1 0.99 0 ] x^{(3)} = \begin{bmatrix} 1\\0.99\\0 \end{bmatrix} x(3)=10.990,则有 ( θ ( 1 ) ) T x ( 3 ) = 0.99 × 5 = 4.95 (\theta^{(1)})^Tx^{(3)} = 0.99 \times 5 = 4.95 (θ(1))Tx(3)=0.99×5=4.95

参数 θ \theta θ 可通过最小化一下式子求得:

m i n θ ( j ) 1 2 m ( j ) ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T ( x ( i ) ) − y ( i , j ) ) 2 + λ 2 m ( j ) ∑ k = 1 n ( θ k ( j ) ) 2 min_{\theta^{(j)}} \frac{1}{2m^{(j)}}\sum_{i:r(i,j)=1}((\theta^{(j)})^T(x^{(i)}) - y^{(i,j)})^2 + \frac{\lambda}{2m^{(j)}}\sum_{k=1}^n(\theta_k^{(j)})^2 minθ(j)2m(j)1i:r(i,j)=1((θ(j))T(x(i))y(i,j))2+2m(j)λk=1n(θk(j))2

其中, ∑ i : r ( i , j ) = 1 \sum_{i:r(i,j) =1} i:r(i,j)=1 表示用户 j 对所有电影的评分总和,为了使式子更简单,可以去掉 m ( j ) m^{(j)} m(j) m ( j ) m^{(j)} m(j) 是常数,去掉之后 θ \theta θ 的值不变)

m i n θ ( 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}((\theta^{(j)})^T(x^{(i)}) - y^{(i,j)})^2 + \frac{\lambda}{2}\sum_{k=1}^n(\theta_k^{(j)})^2 minθ(j)21i:r(i,j)=1((θ(j))T(x(i))y(i,j))2+2λk=1n(θk(j))2

对所有 θ \theta θ

J ( θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) ) = m i n θ ( 1 ) , θ ( 2 ) , . . . , θ ( 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 J(\theta^{(1)},\theta^{(2)},...,\theta^{(n_u)}) = min_{\theta^{(1)},\theta^{(2)},...,\theta^{(n_u)}} \frac{1}{2}\sum_{j=1}^{n_u} \sum_{i:r(i,j)=1}((\theta^{(j)})^T(x^{(i)}) - y^{(i,j)})^2 + \frac{\lambda}{2}\sum_{j=1}^{n_u} \sum_{k=1}^n(\theta_k^{(j)})^2 J(θ(1),θ(2),...,θ(nu))=minθ(1),θ(2),...,θ(nu)21j=1nui:r(i,j)=1((θ(j))T(x(i))y(i,j))2+2λj=1nuk=1n(θk(j))2

若使用梯度下降算法更新 θ \theta θ

θ k ( j ) : = θ k ( j ) − α ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) x k ( i )    ( f o r   k = 0 ) \theta_k^{(j)} := \theta_k^{(j)} - \alpha\sum_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)} - y^{(i,j)})x_k^{(i)}~~(for ~ k = 0) θk(j):=θk(j)αi:r(i,j)=1((θ(j))Tx(i)y(i,j))xk(i)  (for k=0)

θ k ( j ) : = θ k ( j ) − α ( ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) x k ( i ) + λ θ k ( j ) )    ( f o r   k ≠ 0 ) \theta_k^{(j)} := \theta_k^{(j)} - \alpha(\sum_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)} - y^{(i,j)})x_k^{(i)} + \lambda\theta_k^{(j)})~~(for ~ k \neq 0) θk(j):=θk(j)α(i:r(i,j)=1((θ(j))Tx(i)y(i,j))xk(i)+λθk(j))  (for k=0)


协同过滤

基于内容的推荐算法要求取得每部电影的特征值,然而这是很难的。对此,有另外一种算法无需取得特征值,而只要根据用户的爱好矩阵 θ \theta θ 便可预测出用户对电影的评分。

给定 θ ( 1 ) , . . . , θ ( n u ) \theta^{(1)},...,\theta^{(n_u)} θ(1),...,θ(nu),则该算法的优化目标为:

m i n x ( 1 ) , x ( 2 ) , . . . , 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)},x^{(2)},...,x^{(n_m)}} \frac{1}{2}\sum_{i=1}^{n_m} \sum_{j:r(i,j)=1}((\theta^{(j)})^T(x^{(i)}) - y^{(i,j)})^2 + \frac{\lambda}{2}\sum_{i=1}^{n_m} \sum_{k=1}^n(x_k^{(i)})^2 minx(1),x(2),...,x(nm)21i=1nmj:r(i,j)=1((θ(j))T(x(i))y(i,j))2+2λi=1nmk=1n(xk(i))2

然后便可根据 ( θ ( j ) ) T x ( i ) (\theta^{(j)})^Tx^{(i)} (θ(j))Tx(i) 预测用户 j 电影 i 的评分。

因此在预测用户 j 电影 i 的评分时,我们可以结合两种算法,轮流计算 x 与 θ \theta θ


协同过滤算法

在前面的内容中,需要不断迭代计算出 θ \theta θ 与 x 的值,而事实上,有一种更高效的方法可以同时计算出 x 与 θ \theta θ 的值,即同时最小化 θ ( 1 ) , . . . θ ( n u ) , x ( 1 ) , . . . , x ( n m ) \theta^{(1)},...\theta^{(n_u)},x^{(1)},...,x^{(n_m)} θ(1),...θ(nu),x(1),...,x(nm)

m i n θ ( 1 ) , . . . θ ( n u ) , x ( 1 ) , . . . , x ( n m ) J ( θ ( 1 ) , . . . θ ( n u ) , x ( 1 ) , . . . , x ( n m ) ) = 1 2 ∑ ( i , j ) : r ( i , j ) = 1 ( ( θ ( j ) ) T ( x ( i ) ) − y ( i , j ) ) 2 + λ 2 ∑ j = 1 n m ∑ k = 1 n ( x k ( i ) ) 2 + λ 2 ∑ i = 1 n u ∑ k = 1 n ( θ k ( i ) ) 2 min_{\theta^{(1)},...\theta^{(n_u)},x^{(1)},...,x^{(n_m)}}J(\theta^{(1)},...\theta^{(n_u)},x^{(1)},...,x^{(n_m)}) = \frac{1}{2}\sum_{(i,j):r(i,j)=1}((\theta^{(j)})^T(x^{(i)}) - y^{(i,j)})^2 + \frac{\lambda}{2}\sum_{j=1}^{n_m} \sum_{k=1}^n(x_k^{(i)})^2 + \frac{\lambda}{2}\sum_{i=1}^{n_u} \sum_{k=1}^n(\theta_k^{(i)})^2 minθ(1),...θ(nu),x(1),...,x(nm)J(θ(1),...θ(nu),x(1),...,x(nm))=21(i,j):r(i,j)=1((θ(j))T(x(i))y(i,j))2+2λj=1nmk=1n(xk(i))2+2λi=1nuk=1n(θk(i))2

协同过滤算法步骤:

  • θ ( 1 ) , . . . θ ( n u ) , x ( 1 ) , . . . , x ( n m ) \theta^{(1)},...\theta^{(n_u)},x^{(1)},...,x^{(n_m)} θ(1),...θ(nu),x(1),...,x(nm) 随机初始化为比较小的值
  • 使用梯度下降算法(或其他算法)最小化 m i n θ ( 1 ) , . . . θ ( n u ) , x ( 1 ) , . . . , x ( n m ) J ( θ ( 1 ) , . . . θ ( n u ) , x ( 1 ) , . . . , x ( n m ) ) min_{\theta^{(1)},...\theta^{(n_u)},x^{(1)},...,x^{(n_m)}}J(\theta^{(1)},...\theta^{(n_u)},x^{(1)},...,x^{(n_m)}) minθ(1),...θ(nu),x(1),...,x(nm)J(θ(1),...θ(nu),x(1),...,x(nm)),即对 j = 1 , . . . , n u , i = 1 , . . . , n m j = 1,...,n_u, i = 1,...,n_m j=1,...,nu,i=1,...,nm:
    θ k ( j ) : = θ k ( j ) − α ( ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) x k ( i ) + λ θ k ( j ) ) \theta_k^{(j)} := \theta_k^{(j)} - \alpha(\sum_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)} - y^{(i,j)})x_k^{(i)} + \lambda\theta_k^{(j)}) θk(j):=θk(j)α(i:r(i,j)=1((θ(j))Tx(i)y(i,j))xk(i)+λθk(j))
    x k ( j ) : = x k ( j ) − α ( ∑ j : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) θ k ( i ) + λ x k ( j ) ) x_k^{(j)} := x_k^{(j)} - \alpha(\sum_{j:r(i,j)=1}((\theta^{(j)})^Tx^{(i)} - y^{(i,j)})\theta_k^{(i)} + \lambda x_k^{(j)}) xk(j):=xk(j)α(j:r(i,j)=1((θ(j))Tx(i)y(i,j))θk(i)+λxk(j))
    (这里不取 x 0 , θ 0 x_0,\theta_0 x0,θ0)
  • 预测评分 ( θ ( j ) ) T x ( i ) (\theta^{(j)})^Tx^{(i)} (θ(j))Tx(i)

均值规范化

假设有一个没有对任何电影评分的用户,算法该如何预测其对电影的评分?

在这里插入图片描述

若使用前面提到的算法,则对于该用户,其优化目标变为 m i n θ ( j ) λ 2 ∑ j = 1 n u ∑ k = 1 n ( θ k ( j ) ) 2 min_\theta^{(j)}\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^n(\theta_k^{(j)})^2 minθ(j)2λj=1nuk=1n(θk(j))2
无疑,算法会给出 θ ( 5 ) = [ 0 0 ] \theta^{(5)} = \begin{bmatrix} 0\\0 \end{bmatrix} θ(5)=[00]

因此,对于用户Eve,预测评分全为 0,这并没有实际意义

均值归一化可以解决这个问题

将所有的评分矩阵化,得到 Y = [ 5    5    0    0    ? 5    ?    ?    0    ? ?    4    0    ?    ? 0    0    5    4    ? 0    0    5    0    ? ] Y = \begin{bmatrix} 5~~5~~0~~0~~?\\ 5~~?~~?~~0~~?\\ ?~~4~~0~~?~~?\\ 0~~0~~5~~4~~?\\ 0~~0~~5~~0~~?\\ \end{bmatrix} Y=5  5  0  0  ?5  ?  ?  0  ??  4  0  ?  ?0  0  5  4  ?0  0  5  0  ?

对 Y 求均值,得到 μ = [ 2.5 2.5 2 2.25 1.25 ] \mu = \begin{bmatrix} 2.5\\ 2.5\\ 2\\ 2.25\\ 1.25 \end{bmatrix} μ=2.52.522.251.25

令 Y 中每个值减去均值,得 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 = \begin{bmatrix} 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{bmatrix} 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 作为用户评分矩阵, 用 ( θ ( j ) ) T x ( i ) + μ i (\theta^{(j)})^Tx^{(i)} + \mu_i (θ(j))Tx(i)+μi 预测新的得分(因为前面减去了均值 μ i \mu_i μi

则对于没有给电影评过分的用户 Eve,可得到其预测得分为 [ 2.5 2.5 2 2.25 1.25 ] \begin{bmatrix} 2.5\\ 2.5\\ 2\\ 2.25\\ 1.25 \end{bmatrix} 2.52.522.251.25

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值