文章目录
第14章:推荐系统
14.1 基于内容的推荐算法
在推荐系统中,主要有两种方法,基于内容的推荐算法和协同过滤算法,此文章采用电影推荐作为例子,初始作如下定义:
- 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 的评分
- m ( j ) m^{(j)} m(j) — 用户 j j j 评价了的电影数量
- θ ( j ) \theta^{(j)} θ(j) — 拟合用户 j j j 评价电影的曲线参数
- n n n — 电影的特征数量
推荐系统的目标,就是通过用户已经评价的电影和电影的特征,预测用户未评价的电影的评分,由此进行推荐。
给出如下例子,基于内容的推荐算法已知每部电影的特征值:
对于用户
j
j
j ,每一部的电影的特征为
x
x
x ,用户的评分为
y
y
y ,用数据集
{
x
(
1
)
,
y
(
1
)
}
,
.
.
.
,
{
x
(
n
m
)
,
y
(
n
m
)
}
\{x^{(1)},y^{(1)}\},...,\{x^{(n_{m})},y^{(n_{m})}\}
{x(1),y(1)},...,{x(nm),y(nm)} ,进行拟合,得到参数
θ
(
j
)
\theta^{(j)}
θ(j) ,对于需要预测的电影
x
p
r
e
d
x_{pred}
xpred ,由
θ
T
x
p
r
e
d
\theta^{T}x_{pred}
θTxpred 得到评分,可根据预测的评分进行推荐。
单个用户的代价函数为: J ( θ ( j ) ) = 1 2 ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ k = 1 n ( θ k ( j ) ) 2 \large J(\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 J(θ(j))=21i:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λk=1∑n(θk(j))2多个用户的代价函数为: J ( θ ( 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 \large J(\theta^{(1)},...,\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),...,θ(nu))=21j=1∑nui:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λj=1∑nuk=1∑n(θ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 ) \large \theta_{k}^{(j)} := \theta_{k}^{(j)}-\alpha\sum_{i:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})x_{k}^{(i)}\ (if\ k=0) θk(j):=θk(j)−αi:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))xk(i) (if 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 ) \large \theta_{k}^{(j)} := \theta_{k}^{(j)}-\alpha(\sum_{i:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})x_{k}^{(i)}+\lambda\theta_{k}^{(j)})\ (if\ k\neq 0) θk(j):=θk(j)−α(i:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))xk(i)+λθk(j)) (if k=0)注:此时的 θ \theta θ 和 x x x 都增加了偏置 θ 0 \theta_{0} θ0 和 x 0 x_{0} x0 。
14.2 计算电影特征
要求已知用户的参数 θ ( j ) \theta^{(j)} θ(j) ,根据每个用户对电影的评价 ( θ ( j ) ) T x (\theta^{(j)})^{T}x (θ(j))Tx,拟合出电影 x x x 的特征值。
单部电影的代价函数表示为: J ( 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 \large J(x^{(i)})=\frac{1}{2}\sum_{j:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{k=1}^{n}(x_{k}^{(i)})^2 J(x(i))=21j:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λk=1∑n(xk(i))2多部电影的代价函数表示为: J ( 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 \large J(x^{(1)},...,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 J(x(1),...,x(nm))=21i=1∑nmj:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λi=1∑nmk=1∑n(xk(i))2
所以,结合基于内容的推荐算法,我们可首先假设 θ \theta θ ,然后拟合 x x x ,再优化 θ \theta θ, → x → θ → . . . \rightarrow x\rightarrow \theta\rightarrow ... →x→θ→...
14.3 基于梯度下降的协同过滤算法(Collaborative filtering)
基于内容的推荐算法通过 x x x 求解 θ \theta θ ,计算电影特征通过 θ \theta θ 求解 x x x ,如此往复计算复杂度大,可将两个代价函数合并: 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 ∑ i = 1 n m ∑ k = 1 n ( x k ( i ) ) 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n ( θ k ( j ) ) 2 \large J(x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)})=\frac{1}{2}\sum_{(i,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+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}(\theta_{k}^{(j)})^2 J(x(1),...,x(nm),θ(1),...,θ(nu))=21(i,j):r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λi=1∑nmk=1∑n(xk(i))2+2λj=1∑nuk=1∑n(θk(j))2通过初始化 x x x 和 θ \theta θ 为较小的值,通过梯度下降降低代价函数: θ k ( j ) : = θ k ( j ) − α ( ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) x k ( i ) + λ θ k ( j ) ) \large \theta_{k}^{(j)} := \theta_{k}^{(j)}-\alpha(\sum_{i:r(i,j)=1}((\theta^{(j)})^{T}x^{(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 ( i ) : = x k ( i ) − α ( ∑ j : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) θ k ( j ) + λ x k ( i ) ) \large x_{k}^{(i)} := x_{k}^{(i)}-\alpha(\sum_{j:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})\theta_{k}^{(j)}+\lambda x_{k}^{(i)}) xk(i):=xk(i)−α(j:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))θk(j)+λxk(i))注:此时的 θ \theta θ 和 x x x 都不需要偏置 θ 0 \theta_{0} θ0 和 x 0 x_{0} x0 。
14.4 低秩矩阵分解(Low rank matrix factorization)
如果对预测评分过程向量化,将评分表示为矩阵 Y Y Y ,每一行为电影,每一列为用户,则 Y = [ θ ( 1 ) x ( 1 ) . . . θ ( n u ) x ( 1 ) . . . . . . θ ( 1 ) x ( n m ) . . . θ ( n u ) x ( n m ) ] Y=\begin{bmatrix} \theta^{(1)}x^{(1)} &... &\theta^{(n_u)}x^{(1)} \\ ... & &... \\ \theta^{(1)}x^{(n_m)} & ... & \theta^{(n_u)}x^{(n_m)} \end{bmatrix} Y=⎣⎡θ(1)x(1)...θ(1)x(nm)......θ(nu)x(1)...θ(nu)x(nm)⎦⎤, X = [ ( x ( 1 ) ) T . . . ( x ( n m ) ) T ] X=\begin{bmatrix} (x^{(1)})^T\\ ...\\ (x^{(n_m)})^T \end{bmatrix} X=⎣⎡(x(1))T...(x(nm))T⎦⎤, Θ = [ ( θ ( 1 ) ) T . . . ( θ ( n u ) ) T ] \Theta =\begin{bmatrix} (\theta^{(1)})^T\\ ...\\ (\theta^{(n_u)})^T \end{bmatrix} Θ=⎣⎡(θ(1))T...(θ(nu))T⎦⎤,则有 X ⋅ Θ T = Y X \cdot \Theta^T=Y X⋅ΘT=Y
根据电影 i i i 推荐相似的电影 j j j 给用户,可取使得 ∥ x ( i ) − x ( j ) ∥ 2 \left\|x^{(i)}-x^{(j)}\right\|^{2} ∥∥x(i)−x(j)∥∥2 距离最小的 j j j。
14.5 均值归一化
若一个用户对任何一部电影都未评分,我们首先需要对
Y
Y
Y矩阵进行均值归一化处理,将每一个用户对某一部电影的评分减去所有用户对该电影评分的平均值:
然后我们利用这个新的
Y
Y
Y 矩阵来训练算法。
如果我们要用新训练出的算法来预测评分,则需要将平均值重新加回去。预测
(
θ
(
j
)
)
T
x
(
i
)
+
μ
i
(\theta^{(j)})^{T}x^{(i)}+\mu_i
(θ(j))Tx(i)+μi,对于未对任何一部电影评分的用户,我们的新模型会认为她给每部电影的评分都是该电影的平均分。