1. 基于内容的推荐系统
(1)推荐系统的应用很广泛:
1)电子商务:根据客户购买和浏览商品推荐相关商品
2)电影和视频推荐:根据视频浏览记录,喜好推荐
3)音乐电台的推荐
4)网页及新闻:推荐根据网页浏览记录,推荐相关新闻和网页
5)社交网络:推荐好友,信息流的会话推荐
6)广告推荐等
(2)电影推荐举例
电影资讯网站,用户对于电影的打分(1 - 5 分),代表用户没有评价过该电影,数据,对于每部电影都给出了两个评价指数,构成了电影的二维特征向量 x :x1=电影的浪漫指数,x2=电影的动作指数,详情如下:
movie | Ac | Bo | Ca | Da | romance(x1) | action(x2) |
---|---|---|---|---|---|---|
Love | 5 | 5 | 0 | 0 | 0.9 | 0 |
Romance | 5 | ? | ? | 0 | 1.0 | 0.01 |
Cute love | ? | 4 | 0 | ? | 0.99 | 0 |
Nonstop car | 0 | 0 | 5 | 4 | 0.1 | 1.0 |
Swords vs karate | 0 | 0 | 5 | ? | 0 | 0.9 |
假设用户 i 对于每个指数的偏好程度由向量 θ(i)所衡量,则估计该用户对电影 j 的打分为:
y
(
i
,
j
)
=
(
θ
(
j
)
)
T
x
(
i
)
y^{(i,j)}=(θ^{(j)})^Tx^{(i)}
y(i,j)=(θ(j))Tx(i)
另外,引入 r(i,j) 表示第 i 个用户是否对第 j 部电影进行了打分,打分了为1,未打分为0。
(3)优化目标函数
对用户 j 打分状况作出最精确的预测,优化函数为: 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 (θ^{(j)}) =\frac{1}{2}\sum_{i:r(i,j)=1}((θ^{(j)})^Tx^{(i)}−y^{(i,j)})^2+\fracλ2\sum_{k=1}^n(θ^{(j)}_k)^2 min(θ(j))=21i:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λk=1∑n(θk(j))2那么对于所用用户 1,2,…,nu ,需要: 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 min (θ^{(1)},θ^{(2)},……,θ^{(n_u)}) =\frac{1}{2}\sum_{j=1}^{n_u}\sum_{i:r(i,j)=1}((θ^{(j)})^Tx^{(i)}−y^{(i,j)})^2+\fracλ2\sum_{j=1}^{n_u}\sum_{k=1}^n(θ^{(j)}_k)^2 min(θ(1),θ(2),……,θ(nu))=21j=1∑nui:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λj=1∑nuk=1∑n(θk(j))2则得到代价函数 J ( θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) ) J(θ^{(1)},θ^{(2)},...,θ^{(n_u)}) J(θ(1),θ(2),...,θ(nu)) 为: J = 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=\frac{1}{2}\sum_{j=1}^{n_u}\sum_{i:r(i,j)=1}((θ^{(j)})^Tx^{(i)}−y^{(i,j)})^2+\fracλ2\sum_{j=1}^{n_u}\sum_{k=1}^n(θ^{(j)}_k)^2 J=21j=1∑nui:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λj=1∑nuk=1∑n(θk(j))2
(4)梯度下降
θ
0
j
=
θ
0
j
−
α
∑
i
:
r
(
i
,
j
)
=
1
(
(
θ
(
j
)
)
T
x
(
i
)
−
y
(
i
,
j
)
)
x
0
(
i
)
θ^{j}_0 = θ^{j}_0 - α\sum_{i:r(i,j)=1}((θ^{(j)})^Tx^{(i)}−y^{(i,j)})x^{(i)}_0
θ0j=θ0j−αi:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))x0(i)
θ
k
j
=
θ
k
j
−
α
(
∑
i
:
r
(
i
,
j
)
=
1
(
(
θ
(
j
)
)
T
x
(
i
)
−
y
(
i
,
j
)
)
x
k
(
i
)
+
λ
θ
k
j
)
,
k
≠
0
θ^{j}_k = θ^{j}_k - α(\sum_{i:r(i,j)=1}((θ^{(j)})^Tx^{(i)}−y^{(i,j)})x^{(i)}_k+λθ^{j}_k)\quad\quad,\quad\quad k \neq 0
θkj=θkj−α(i:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))xk(i)+λθkj),k̸=0
以上是基于内容的推荐系统,它是基于线性回归的推荐系统,根据商品内容来判断用户可能对某个商品的偏好程度。
2. 协同过滤
在现实中,不能得到每部电影所具有的一些指数。因此,引入协同过滤,协同过滤能同时学习用户的参数和电影的特征。
(1)目标优化
假设知道用户对于不同种类电影的喜好(
θ
(
j
)
θ^{(j)}
θ(j))以及对各个电影的评分, 就大致可以得到各个电影的特征向量(
x
(
i
)
x^{(i)}
x(i)),方法为:
m
i
n
(
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)}) = \frac12\sum_{j:r(i,j)=1}((θ^{(j)})^Tx^{(i)}−y^{(i,j)})^2+\fracλ2\sum_{k=1}^{n}(x^{(i)}_k)^2
min(x(i))=21j:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λk=1∑n(xk(i))2给定
θ
(
1
)
,
θ
(
2
)
,
…
…
,
θ
(
n
u
)
求
x
(
1
)
,
x
(
2
)
,
…
…
,
x
(
n
m
)
θ^{(1)},θ^{(2)},……,θ^{(n_u)}求x^{(1)},x^{(2)},……,x^{(n_m)}
θ(1),θ(2),……,θ(nu)求x(1),x(2),……,x(nm):
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)}) = \frac12\sum_{i=1}^{n_m}\sum_{j:r(i,j)=1}((θ^{(j)})^Tx^{(i)}−y^{(i,j)})^2+\fracλ2\sum_{i=1}^{n_m}\sum_{k=1}^{n}(x^{(i)}_k)^2
min(x(1),x(2),……,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
给
定
x
(
1
)
,
x
(
2
)
,
…
…
,
x
(
n
m
)
求
θ
(
1
)
,
θ
(
2
)
,
…
…
,
θ
(
n
u
)
:
给定x^{(1)},x^{(2)},……,x^{(n_m)}求θ^{(1)},θ^{(2)},……,θ^{(n_u)}:
给定x(1),x(2),……,x(nm)求θ(1),θ(2),……,θ(nu):
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
min (θ^{(1)},θ^{(2)},……,θ^{(n_u)}) =\frac{1}{2}\sum_{j=1}^{n_u}\sum_{i:r(i,j)=1}((θ^{(j)})^Tx^{(i)}−y^{(i,j)})^2+\fracλ2\sum_{j=1}^{n_u}\sum_{k=1}^n(θ^{(j)}_k)^2
min(θ(1),θ(2),……,θ(nu))=21j=1∑nui:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λj=1∑nuk=1∑n(θk(j))2循环θ——>x——>θ——>……的过程
(2)协同过滤算法
1)给定
x
(
1
)
,
x
(
2
)
,
…
,
x
(
n
m
)
求
θ
(
1
)
,
θ
(
2
)
,
…
,
θ
(
n
u
)
x^{(1)},x^{(2)},…,x^{(n_m)}求θ^{(1)},θ^{(2)},…,θ^{(n_u)}
x(1),x(2),…,x(nm)求θ(1),θ(2),…,θ(nu)
2)给定
θ
(
1
)
,
θ
(
2
)
,
…
,
θ
(
n
u
)
求
x
(
1
)
,
x
(
2
)
,
…
,
x
(
n
m
)
θ^{(1)},θ^{(2)},…,θ^{(n_u)}求x^{(1)},x^{(2)},…,x^{(n_m)}
θ(1),θ(2),…,θ(nu)求x(1),x(2),…,x(nm)
3)把两个结合起来,综合的优化函数,最小化
x
(
1
)
,
x
(
2
)
,
…
,
x
(
n
m
)
和
θ
(
1
)
,
θ
(
2
)
,
…
,
θ
(
n
u
)
x^{(1)},x^{(2)},…,x^{(n_m)}和θ^{(1)},θ^{(2)},…,θ^{(n_u)}
x(1),x(2),…,x(nm)和θ(1),θ(2),…,θ(nu)
J
(
x
(
1
)
,
x
(
2
)
,
…
,
x
(
n
m
)
,
θ
(
1
)
,
θ
(
2
)
,
…
,
θ
(
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
J(x^{(1)},x^{(2)},…,x^{(n_m)},θ^{(1)},θ^{(2)},…,θ^{(n_u)}) = \frac12\sum_{(i:j):r(i,j)=1}((θ^{(j)})^Tx^{(i)}−y^{(i,j)})^2+\fracλ2\sum_{i=1}^{n_m}\sum_{k=1}^{n}(x^{(i)}_k)^2+\fracλ2\sum_{j=1}^{n_u}\sum_{k=1}^n(θ^{(j)}_k)^2
J(x(1),x(2),…,x(nm),θ(1),θ(2),…,θ(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
算法实现:
1)用很小的数随机初始化
x
(
1
)
,
x
(
2
)
,
…
,
x
(
n
m
)
和
θ
(
1
)
,
θ
(
2
)
,
…
,
θ
(
n
u
)
x^{(1)},x^{(2)},…,x^{(n_m)}和θ^{(1)},θ^{(2)},…,θ^{(n_u)}
x(1),x(2),…,x(nm)和θ(1),θ(2),…,θ(nu)
2)用梯度下降求解
J
(
x
(
1
)
,
x
(
2
)
,
…
,
x
(
n
m
)
,
θ
(
1
)
,
θ
(
2
)
,
…
,
θ
(
n
u
)
)
J(x^{(1)},x^{(2)},…,x^{(n_m)},θ^{(1)},θ^{(2)},…,θ^{(n_u)})
J(x(1),x(2),…,x(nm),θ(1),θ(2),…,θ(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
≠
0
x^{(i)}_k = x^{(i)}_k - α(\sum_{j:r(i,j)=1}((θ^{(j)})^Tx^{(i)}−y^{(i,j)})θ^{(j)}_k+λx^{(i)}_k)\quad\quad,\quad\quad k \neq 0
xk(i)=xk(i)−α(j:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))θk(j)+λxk(i)),k̸=0
θ
k
(
j
)
=
θ
k
(
j
)
−
α
(
∑
i
:
r
(
i
,
j
)
=
1
(
(
θ
(
j
)
)
T
x
(
i
)
−
y
(
i
,
j
)
)
x
k
(
i
)
+
λ
θ
k
(
j
)
)
,
k
≠
0
θ^{(j)}_k = θ^{(j)}_k - α(\sum_{i:r(i,j)=1}((θ^{(j)})^Tx^{(i)}−y^{(i,j)})x^{(i)}_k+λθ^{(j)}_k)\quad\quad,\quad\quad k \neq 0
θk(j)=θk(j)−α(i:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))xk(i)+λθk(j)),k̸=03)通过用户的参数
θ
θ
θ和求出的电影特征
x
x
x预测电影的得分:
y
(
i
,
j
)
=
(
θ
(
j
)
)
T
x
(
i
)
y^{(i,j)}=(θ^{(j)})^Tx^{(i)}
y(i,j)=(θ(j))Tx(i)
3. 矢量化:低轶矩阵分解
将例子中用户对电影的评分表格转化为矢量,则表示为:
Y
=
(
5
5
0
0
5
?
?
0
?
4
0
?
0
0
5
4
0
0
5
0
)
,
其
中
n
m
=
5
,
n
u
=
4
,
y
(
i
,
j
)
为
一
个
元
素
Y=\begin{pmatrix} 5 & 5&0&0 \\5 &?&?&0 \\? & 4&0&? \\0& 0&5&4 \\0 & 0&5&0 \\ \end{pmatrix} ,其中n_m=5,n_u=4, y^{(i,j)}为一个元素
Y=⎝⎜⎜⎜⎜⎛55?005?4000?05500?40⎠⎟⎟⎟⎟⎞,其中nm=5,nu=4,y(i,j)为一个元素预测分数为:
(
(
θ
(
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
)
)
=
X
Θ
T
\begin{pmatrix}( θ^{(1)})^Tx^{(1)} &( θ^{(2)})^Tx^{(1)} &……&( θ^{(n_u)})^Tx^{(1)} \\( θ^{(1)})^Tx^{(2)} &( θ^{(2)})^Tx^{(2)} &……&( θ^{(n_u)})^Tx^{(2)} \\……&……&……&……\\( θ^{(1)})^Tx^{(n_m)} &( θ^{(2)})^Tx^{(n_m)} &……&( θ^{(n_u)})^Tx^{(n_m)} \\ \end{pmatrix}=X Θ^T
⎝⎜⎜⎛(θ(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)⎠⎟⎟⎞=XΘT
X
=
(
(
x
(
1
)
)
T
(
x
(
2
)
)
T
…
…
(
x
(
n
m
)
)
T
)
Θ
=
(
(
θ
(
1
)
)
T
(
θ
(
2
)
)
T
…
…
(
θ
(
n
u
)
)
T
)
X=\begin{pmatrix}\\ (x^{(1)})^T\\ (x^{(2)})^T\\ ……\\ (x^{(n_m)})^T\\ \end{pmatrix} \quad \quad \quadΘ=\begin{pmatrix}\\(θ^{(1)})^T\\ (θ^{(2)})^T\\ ……\\ (θ^{(n_u)})^T\\ \end{pmatrix}
X=⎝⎜⎜⎛(x(1))T(x(2))T……(x(nm))T⎠⎟⎟⎞Θ=⎝⎜⎜⎛(θ(1))T(θ(2))T……(θ(nu))T⎠⎟⎟⎞
X
X
X 的每一行描述了一部电影的内容,
Θ
T
Θ^T
ΘT 的每一列描述了用户对于电影内容偏好程度,亦即,我们将原来稀疏的矩阵分解为了
X
X
X 和
Θ
Θ
Θ 。
用这个方法求取
X
X
X 和
Θ
Θ
Θ ,获得推荐系统需要的参数,称之为低秩矩阵分解,该方法不仅能在编程时直接通过向量化的手法获得参数,还通过矩阵分解节省了内存空间。
注:在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵
4. 均值规范化
假定现在新注册了一个用户 Eve(5),他还没有对任何电影作出评价,则有 Y = ( 5 5 0 0 ? 5 ? ? 0 ? ? 4 0 ? ? 0 0 5 4 ? 0 0 5 0 ? ) Y=\begin{pmatrix} 5 & 5&0&0&? \\5 &?&?&0&? \\? & 4&0&?&? \\0& 0&5&4&? \\0 & 0&5&0&? \\ \end{pmatrix} Y=⎝⎜⎜⎜⎜⎛55?005?4000?05500?40?????⎠⎟⎟⎟⎟⎞则 Eve(5) 对于电影内容的偏好应当被参数 θ(5) 所评估,最小化代价函数过程: J ( x ( 1 ) , x ( 2 ) , … , x ( n m ) , θ ( 1 ) , θ ( 2 ) , … , θ ( 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 J(x^{(1)},x^{(2)},…,x^{(n_m)},θ^{(1)},θ^{(2)},…,θ^{(n_u)}) = \frac12\sum_{(i:j):r(i,j)=1}((θ^{(j)})^Tx^{(i)}−y^{(i,j)})^2+\fracλ2\sum_{i=1}^{n_m}\sum_{k=1}^{n}(x^{(i)}_k)^2+\fracλ2\sum_{j=1}^{n_u}\sum_{k=1}^n(θ^{(j)}_k)^2 J(x(1),x(2),…,x(nm),θ(1),θ(2),…,θ(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由于该用户没有对任何电影作出评价, θ(5) 能影响上式的项只有: λ 2 ∑ j = 1 n u ∑ k = 1 n ( θ k ( j ) ) 2 \fracλ2\sum_{j=1}^{n_u}\sum_{k=1}^n(θ^{(j)}_k)^2 2λj=1∑nuk=1∑n(θk(j))2如果令 θ(5)=均为0,则得到对任何电影的评价将会被预测为0,这不符合现实情况,所以直接这么处理不合适,为了这个解决这个问题,需要先求取各个电影的平均得分 μ μ μ: μ T = ( 2.5 2.5 2 2.25 1.25 ) μ^T=\begin{pmatrix} 2.5&2.5&2&2.25&1.25 \\ \end{pmatrix} μT=(2.52.522.251.25)并求取 Y − μ Y−μ Y−μ ,对 Y Y 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{pmatrix} 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{pmatrix} Y−μ=⎝⎜⎜⎜⎜⎛2.52.5?−2.25−1.252.5?2−2.25−1.25−2.5?−22.753.75−2.5−2.5?1.75−1.25?????⎠⎟⎟⎟⎟⎞对于用户 j ,他对电影 i 的评分就为: y ( i , j ) = ( θ ( i ) ) T x ( j ) + μ i y^{(i,j)}=(θ^{(i)})^Tx^{(j)}+μ_i y(i,j)=(θ(i))Tx(j)+μi。所以 Eve(5)的评分为: μ i μ_i μi