16-2 基于内容的推荐算法

免订阅阅读:https://blog.gabrielme.xyz/ML-16-2/

1. 问题提出

对于下图的数据集,用户数量 n u = 4 n_u = 4 nu=4 ,电影数量 n m = 5 n_m=5 nm=5

MovieAlice (1)Bob (2)Carol (3)Dave (4)
Love at last5500
Romance forever5??0
Cute Puppies of love?40?
Nonstop car chases0054
Swords vs. karate005?

如何怎样预测位置的值?

2. 解决思路

假设对于每一部电影,都有一个对应的特征集合, x 1 x_1 x1 表示一部电影为爱情片的程度, x 2 x_2 x2 表示一部电影为动作片的程度。

MovieAlice (1)Bob (2)Carol (3)Dave (4) x 1 x_1 x1
(romance)
x 2 x_2 x2
(action)
Love at last55000.90
Romance forever5??01.00.01
Cute Puppies of love?40?0.990
Nonstop car chases00540.11.0
Swords vs. karate005?00.9

每个电影都可以用一个特征向量来表示。可以得到第 i i i 部电影的特征向量 x ( i ) = [ 1 x 1 ( i ) x 2 ( i ) ] x^{(i)}=\left[\begin{array}{l}1 \\ x_1^{(i)} \\ x_2^{(i)}\end{array}\right] x(i)=1x1(i)x2(i),其中 x 0 ( i ) = 1 x^{(i)}_0=1 x0(i)=1 为截距特征。 对于每个用户 j j j 学习一个参数 θ ( j ) ∈ R 3 \theta^{(j)}\in \mathbb{R}^3 θ(j)R3 ,用来预测用户 j j j 对电影 i i i 的打分为 ( θ ( j ) ) T x ( i ) (\theta^{(j)})^Tx^{(i)} (θ(j))Tx(i)

例如, x 3 = [ 1 0.99 0 ] x^{3}=\left[\begin{array}{l}{1} \\ 0.99 \\ 0 \end{array}\right] x3=10.990 ,假设通过计算得到的 θ ( 1 ) = [ 0 5 0 ] \theta^{(1)}=\left[\begin{array}{l}0 \\ 5 \\ 0 \end{array}\right] θ(1)=050 ,那么预测的用户 Alice 对 Cute puppies of love 电影的打分为 ( θ ( 1 ) ) T x ( 3 ) = 4.95 (\theta^{(1)})^Tx^{(3)}=4.95 (θ(1))Tx(3)=4.95

3. 问题公式化

  • n n n 电影的特征数量
  • 如果用户 j j j 给电影 i i i 打过分, r ( i , j ) = 1 r(i,j)=1 r(i,j)=1 ,否则 r ( i , j ) = 0 r(i,j)=0 r(i,j)=0
  • y ( i , j ) y^{(i,j)} y(i,j) 用户 j j j 给电影 i i i 的打分
  • θ ( j ) \theta^{(j)} θ(j) 用户 j j j 的参数向量, θ ( j ) ∈ R n + 1 \theta^{(j)}\in \mathbb{R}^{n+1} θ(j)Rn+1
  • x ( i ) x^{(i)} x(i) 电影 i i i 的特征向量
  • 对于用户 j j j 和电影 i i i ,预测的打分为 ( θ ( j ) ) T x ( i ) (\theta^{(j)})^Tx^{(i)} (θ(j))Tx(i)
  • m ( j ) m^{(j)} m(j) 用户 j j j 评价的电影数量

优化目标

学习 θ ( j ) \theta^{(j)} θ(j)
min ⁡ θ ( 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}\left((\theta^{(j)})^Tx^{(i)}-y^{(i,j)}\right)^2+\frac{\lambda}{2m^{(j)}}\sum_{k=1}^{n}\left(\theta^{(j)}_k\right)^2} θ(j)min2m(j)1i:r(i,j)=1((θ(j))Tx(i)y(i,j))2+2m(j)λk=1n(θk(j))2
其中, λ 2 m ( j ) ∑ k = 1 n ( θ k ( j ) ) 2 \frac{\lambda}{2m^{(j)}}\sum_{k=1}^{n}\left(\theta^{(j)}_k\right)^2 2m(j)λk=1n(θk(j))2 为正则化项(正则化讲解详见7-2 正则化)。

由于 m ( j ) m^{(j)} m(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^{(j)}_k\right)^2} θ(j)min21i:r(i,j)=1((θ(j))Tx(i)y(i,j))2+2λk=1n(θk(j))2
学习 θ ( 1 ) , θ ( 2 ) , … , θ ( n u ) \theta^{(1)}, \theta^{(2)}, \ldots, \theta^{\left(n_{u}\right)} θ(1),θ(2),,θ(nu) :
min ⁡ θ ( 1 ) , … , θ ( n u ) J ( θ ( 1 ) , θ ( 2 ) , … , θ ( n u ) ) \min _{\theta^{(1)}, \ldots, \theta^{\left(n_{u}\right)}}J\left(\theta^{(1)}, \theta^{(2)}, \ldots, \theta^{\left(n_{u}\right)}\right) θ(1),,θ(nu)minJ(θ(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)}, \ldots, \theta^{\left(n_{u}\right)}} \frac{1}{2} \sum_{j=1}^{n_{u}} \sum_{i: r(i, j)=1}\left(\left(\theta^{(j)}\right)^{T} x^{(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 ) (  for  k = 0 ) θ k ( j ) : = θ k ( j ) − α ( ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) x k ( i ) + λ θ k ( j ) ) (  for  k ≠ 0 ) \begin{aligned} &\theta_{k}^{(j)}:=\theta_{k}^{(j)}-\alpha \sum_{i: r(i, j)=1}\left(\left(\theta^{(j)}\right)^{T} x^{(i)}-y^{(i, j)}\right) x_{k}^{(i)}(\text { for } k=0) \\ &\theta_{k}^{(j)}:=\theta_{k}^{(j)}-\alpha\left(\sum_{i: r(i, j)=1}\left(\left(\theta^{(j)}\right)^{T} x^{(i)}-y^{(i, j)}\right) x_{k}^{(i)}+\lambda \theta_{k}^{(j)}\right)(\text { for } k \neq 0) \end{aligned} θ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))Tx(i)y(i,j))xk(i)+λθk(j)( for k=0)
其中, ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) x k ( i ) + λ θ k ( j ) \sum_{i: r(i, j)=1}\left(\left(\theta^{(j)}\right)^{T} x^{(i)}-y^{(i, j)}\right) x_{k}^{(i)}+\lambda \theta_{k}^{(j)} i:r(i,j)=1((θ(j))Tx(i)y(i,j))xk(i)+λθk(j) 可以表示为 ∂ ∂ θ k ( j ) J ( θ ( 1 ) , θ ( 2 ) , … , θ ( n u ) ) \frac{\partial}{\partial \theta_{k}^{(j)}}J\left(\theta^{(1)}, \theta^{(2)}, \ldots, \theta^{\left(n_{u}\right)}\right) θk(j)J(θ(1),θ(2),,θ(nu))

文章内容整理自吴恩达机器学习视频教程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叼辣条闯天涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值