推荐系统
上期内容
问题举例
假设我们有5部电影和4个用户,我们要求用户为电影打分,得到:
movie | A | B | C | D |
---|---|---|---|---|
Love at last | 5 | 5 | 0 | 0 |
Romance forever | 5 | ? | ? | 0 |
Cute puppies of love | ? | 4 | 0 | ? |
Nonstop car chases | 0 | 0 | 5 | 4 |
Swords vs. karate | 0 | 0 | 5 | ? |
可以看出,A、B两人更倾向于前三部那种爱情片,C、D两人更倾向于后两部动作片。
为了方便接下来对于算法的介绍,这里引入一些符号:
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
mj代表用户
j
j
j评过分的电影数;
基于内容的推荐系统
movie | A | B | C | D | x1 | x2 |
---|---|---|---|---|---|---|
Love at last | 5 | 5 | 0 | 0 | 0.9 | 0 |
Romance forever | 5 | ? | ? | 0 | 1.0 | 0.01 |
Cute puppies of love | ? | 4 | 0 | ? | 0.99 | 0 |
Nonstop car chases | 0 | 0 | 5 | 4 | 0.1 | 1.0 |
Swords vs. karate | 0 | 0 | 5 | ? | 0 | 0.9 |
其中, x 1 x_1 x1、 x 2 x_2 x2代表电影的两个特征,分别是:romance和action。
基于电影特征推荐
我们用
θ
j
\theta_j
θj表示用户
j
j
j的参数向量;
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)。针对用户
j
j
j,该线性回归模型的代价函数可以表示如下:
m
i
n
θ
j
1
2
∑
i
:
r
(
i
,
j
)
=
1
(
(
θ
(
j
)
)
T
x
(
i
)
−
y
(
i
,
j
)
)
2
+
λ
2
(
θ
k
(
j
)
)
2
min_{\theta_j}\ \frac12\sum_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}(\theta_k^{(j)})^2
minθj 21i:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λ(θk(j))2
其中,
i
:
r
(
i
,
j
)
i:r(i,j)
i:r(i,j)表示我们只计算用户
j
j
j评过分的电影。为了学习所有的用户,我们将所有用户的代价函数求和:
m
i
n
(
θ
(
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)}},...,\theta^{(n_u)})}\ \frac12\sum^{n_u}_{j=1}\sum_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum^{n_u}_{j=1}\sum^n_{k=1}(\theta_k^{(j)})^2
min(θ(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
)
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\neq0
θk(j):=θk(j)−α(i:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))xk(i)+λθk(j)) for k=0
基于用户参数推荐
相反地,当我们拥有用户的参数时,我们可以学习得出电影的特征:
m
i
n
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)},...,x^{(n_m)}}\ \frac12\sum^{n_m}_{i=1}\sum_{j:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum^{n_m}_{i=1}\sum^n_{k=1}(x_k^{(i)})^2
minx(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
协同过滤
在搭建一个推荐系统时,如果我们既没有用户参数,也没有电影的特征时,可以通过协同过滤算法来同时学习这两者。代价函数改为:
J
(
x
(
1
)
,
.
.
.
,
x
(
n
m
)
,
θ
(
1
)
,
.
.
.
,
θ
(
n
u
)
)
=
1
2
∑
(
r
:
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^{(n_m)},\theta^{(1)},...,\theta^{(n_u)})=\frac12\sum_{(r:j):r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum^{n_m}_{i=1}\sum^n_{k=1}(x_k^{(i)})^2+\frac{\lambda}{2}\sum^{n_u}_{j=1}\sum^n_{k=1}(\theta_k^{(j)})^2
J(x(1),...,x(nm),θ(1),...,θ(nu))=21(r: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
k
(
i
)
:
=
x
k
(
i
)
−
α
(
∑
j
:
r
(
i
,
j
)
=
1
(
(
θ
(
j
)
)
T
x
(
i
)
−
y
(
i
,
j
)
)
θ
k
(
j
)
+
λ
x
k
(
i
)
)
x_k^{(i)}:=x_k^{(i)}-\alpha(\sum_{j:r(i,j)=1}((\theta^{(j)})^Tx^{(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))
θ
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 X X、 Θ \Theta Θ为一些随机小值
- 使用梯度下降算法最小化代价函数
- 训练完后,使用 ( θ ( j ) ) T x ( i ) (\theta^{(j)})^Tx^{(i)} (θ(j))Tx(i)为用户 j j j给电影 i i i评分
均值归一化
如果我们新增一名新用户E,并且E未曾对任何电影进行评分,那我们的推荐过程可以如下进行:
- 对已有用户评分结果进行均值归一化处理
- 系统将会认为E对电影的评分是该电影的平均分
- 接下来的步骤同上述推荐算法