推荐系统Recommender Systems
问题规划Problem formulation
引入:推荐系统(Recommender Systems)是机器学习的一个非常常见的实际应用,也是学习特征选择的一个例子(即判断选择哪些特征,涉及到机器学习的一些重要思想)。下面展示推荐系统的构成。
下面展示一个预测电影评分问题的例子。
假设网站能允许用户对电影打分,于是有下图所示的电影评分数据集,包含四个用户对五部电影的评分。其中,
?
?
?表示未评分。
定义一些常用的符号
n
u
,
n
m
,
r
(
i
,
j
)
,
y
(
i
,
j
)
n_u, n_m, r(i,j), y^{(i,j)}
nu,nm,r(i,j),y(i,j)。我们希望开发一个系统,能自动预测用户对未评分电影的评分,并据此给用户推荐新电影。
基于内容的推荐算法 Content-based recommendations
学习目标:学习基于内容的推荐算法(Content-based recommendations)。
还是使用之前的数据集。假设每一部电影都有一些特征(这里取两个特征
x
1
,
x
2
x_1, x_2
x1,x2,
n
=
2
n=2
n=2)。如果把评分问题看做多元线性回归问题,我们可以预测每个用户对未评分电影的评分为
(
θ
(
j
)
)
T
x
(
i
)
(\theta^{(j)})^T x^{(i)}
(θ(j))Tx(i)。此时,我们相当于为不同用户分别构建了多元线性回归副本。
综上,得到每个用户对没评分电影的预测评分如图。为了得到
θ
(
j
)
\theta^{(j)}
θ(j),也是需要最小化代价函数。
在推荐系统中,为了简化公式,可以去掉代价函数中的
m
(
j
)
m^{(j)}
m(j)(这对
θ
(
j
)
\theta^{(j)}
θ(j)的求导其实没有影响)。
综合所有用户,得到总体代价函数如图。
综上,得到最终的代价函数和梯度下降求导
θ
\theta
θ的公式。本质上,这跟线性回归是相同的。
总之,基于内容的推荐算法假设变量(也就是电影的各个特征)是已有的,再结合用户已有的评分数据进行预测。
协同过滤 Collaborative filtering
引入:基于内容的推荐算法假设变量(也就是电影的各个特征)是已有的,再结合用户已有的评分数据进行预测。但实际上,很多产品信息的特征并不是已知的。下面介绍一种新的推荐算法——协同过滤 (Collaborative filtering)。
协同过滤 (Collaborative filtering)能够实现特征学习(features learning),也就是自行学习需要使用的特征。
假设我们拥有一个数据集。其中,电影的特征值是未知的。
此时,可以把假设改为:已知用户对不同题材电影的喜爱程度。理论上来说,据此可以推测出
x
1
,
x
2
x_1, x_2
x1,x2的值。
将上述问题标准化到任意特征
x
(
i
)
x^{(i)}
x(i)。假设已知
θ
\theta
θ(用户对不同类型电影的喜好程度)求
x
x
x(不同电影各类特征值),那么代价函数如下图。跟之前一样,得到
x
x
x后就能预测出用户对未看过电影的评分。
总之,基于内容的推荐算法是给定
x
x
x求
θ
\theta
θ,协同过滤则是给定
θ
\theta
θ求
x
x
x。当然,这并不是协同过滤算法的全部,下部分将改进这一算法从而使其更加高效。
总之,协同过滤算法指的是:执行算法时需要观察大量的用户的行为,从而协同实现更加准确的用户电影评分值预测。此时每个评分过的用户都在帮助算法学习得到更适合的特征。也就是说,用户通过评分可以帮助系统得到更佳的特征,这些优秀的特征又可以用于更好地预测其他用户的评分。于是得到“协同”的另一层含义:每个用户都在帮助算法得到更佳的特征。
协同过滤算法 Collaborative filtering algorithm
引入:之前提到过使用已知电影特征值计算参数 θ \theta θ、以及已知用户参数 θ \theta θ学习得到电影特征,下面将结合这两种思想得到协同过滤算法(Collaborative filtering algorithm)。
对于下图的第一二个公式,存在实现同时得到最佳
θ
、
x
\theta、x
θ、x的优化方法。(上文中,为了得到最佳的
θ
、
x
\theta、x
θ、x,需要不断重复
x
−
>
θ
−
>
x
…
x ->\theta ->x…
x−>θ−>x…的过程。)
即将这两个公式结合得到第三个公式,得到关于
θ
,
x
\theta, x
θ,x的综合代价函数
J
J
J。其中,不需要再设置
θ
0
,
x
0
\theta_0, x_0
θ0,x0。因为此时是在学习所有的特征,如果确实有需要设定
θ
0
,
x
0
\theta_0, x_0
θ0,x0分别为0、1,代价函数的优化结果会自动实现它。
综上,得到协同过滤算法。
矢量化:低秩矩阵分解 Vectorization: Low rank matrix factorization
学习目标:学习协同算法的向量化实现,并介绍该算法可以实现的一些功能。
还是之前的案例,将用户对电影的评分用矩阵
Y
Y
Y表示。
将
Y
Y
Y用向量表示得到
Y
=
X
Θ
Y=X \Theta
Y=XΘ,这个过程又称低秩矩阵分解(Low rank matrix factorization)。因为
X
Θ
X \Theta
XΘ存在一个性质:低秩矩阵。
下面介绍利用上述方法找到相关电影。
实施细节:均值规范化 Implementational detail: Mean normalization
引入:均值规范化(Mean normalization)有时能使得协同过滤算法运行更好。
协同过滤算法会如何处理从未打分过的用户呢?
均值规范化能解决这一问题。
它首先对
Y
Y
Y进行均值规范化,然后通过最小化代价函数得到零向量
θ
\theta
θ(或
x
x
x)。但是在预测电影评分时,需要加上均值
u
i
u_i
ui(用户对电影的平均评分)。此时,系统给新用户对新电影的评分预测为电影评分的平均值。
注意:除了对行进行均值规范化,也可以尝试对列使用均值规范化。