16.推荐系统

16 推荐系统

16.1 问题形式化

在机器学习领域,对于一些问题存在一些算法, 能试图自动地替你学习到一组优良的特征。通过推荐系统(recommender systems),将领略一小部分特征学习的思想。

假使有 5 部电影,3部爱情片、2部动作片。 4 个用户为其中的部分电影打了分。现在希望构建一个算法,预测每个人可能给没看过的电影打多少分,以此作为推荐的依据。

image-20250218221557210

下面引入一些标记:

$n_u$:代表用户的数量
$n_m$:代表电影的数量
$r(i,j)$:如果用户 j 给电影 i 评过分则 $r(i,j) = 1$
$y(i,j)$:代表用户 j 给电影 i 的评分 (注:这里 i 和 j 不要搞反)
$m_j$:代表用户 j 评过分的电影的总数

16.2 基于内容的推荐系统

(1)定义

在一个基于内容的推荐系统算法中,假设对于我们希望推荐的东西有一些数据,是这些东西的特征。
现在假设每部电影都有两个特征, $x_1$ 代表电影的浪漫程度,$x_2$ 代表电影的动作程度。

则每部电影都有一个特征向量,如 $x^{(1)}$是第一部电影的特征向量,为[1; 0.9; 0]。
下面我们采用线性回归模型,针对每一个用户都训练一个线性回归模型,如$\theta^{(1)}$ 是第一个用户的模型的参数。 于是有:
$\theta^{(j)}$ 用户 j 的参数向量
$x^{(i)}$ 电影 i 的特征向量
对于用户 j 和电影 i,我们预测其评分为:$(θ^{(j)})^Tx^{(i)}$

image-20250218222539890

(2)代价函数

对于单个用户 j,类比之前学习的线性回归和正则化,我们可以写出下面的代价函数,但这里我们去掉了$m^{(j)}$项(常数项不影响最终的参数$\theta^{(j)}$),且不对方差项$\theta_0$进行正则化处理。

image-20250218223307103

上面的代价函数只是针对一个用户的,为了学习所有用户,我们将所有用户的代价函数求和:

image-20250218223452211

如果我们要用梯度下降法来求解最优解,我们计算代价函数的偏导数后得到梯度下降的更新公式为:

image-20250218223727853

16.3 协同过滤

在之前的基于内容的推荐系统中,使用电影的特征,训练出了每一个用户的参数。相反地,如果拥有用户的参数,可以学习得出电影的特征。

image-20250218224911944 image-20250218225200066

但是如果既没有用户的参数,也没有电影的特征,这两种方法都不可行了。可以使用协同过滤算法,同时学习这两者。

优化目标便改为同时针对$x$和$\theta$进行。是一个:预测$\theta$,再反过来预测$x$, 再预测$\theta$,再预测$x$的迭代过程。

image-20250218225439596

16.4 协同过滤算法

通过分析前两节中的代价函数,我们可以发现粉色框表示对所有有评分的<电影-用户>对进行误差计算,我们可以将两个式子合并成最下面的一个式子,即为协同过滤算法的代价函数:

注:在协同过滤从算法中,通常不使用方差项,如果需要的话,算法会自动学得。

image-20250218230542742

算法流程:

1.初始化 $x$ 和 $\theta$ 为一些随机小值
2.使用梯度下降算法最小化代价函数 $J$,代价函数$J$的偏导数如下图
3.在训练完算法后,通过计算 $\theta^Tx$ 预测用户 j 给电影 i 的评分
通过这个学习过程获得的特征矩阵包含了有关电影的重要数据,这些数据不总是人能读懂的,但是可以用这些数据作为给用户推荐电影的依据。

image-20250218230841728

16.5 向量化:低秩矩阵分解

协同过滤算法的向量化实现
举例:
1)给出一件产品,能否找到与之相关的其它产品。
2)一位用户最近看上一件产品,有没有其它相关的产品可以推荐给他。

现在有5部电影,4位用户,矩阵 Y 就是一个 5 行 4 列的矩阵,存储每个用户对每个电影的评分数据:

image-20250219194055498

通过使用 $\theta$ 和 $x$​ 计算,可以预测出每个用户对每个电影打的分数:现在将所有 $x$ 都集中在一个大的矩阵$X$中,每一部电影是一行;将所有 $\theta$ 集中在一个大的$\Theta$中,每个用户是一行。则$X\Theta^T$矩阵中<i, j>元素即代表用户j对电影i评分的预测。

因为$X\Theta^T$矩阵,在数学上具有低秩属性。因此这个算法也被称为低秩矩阵分解 low rank matrix factorization。

image-20250219193550185

现在已经学习到了特征参数向量,那么可以使用这些向量做一些别的事情,比如度量两部电影之间的相似性。例如,如果一位用户正在观看电影 $x^{(i)}$ ,可以根据两部电影的特征向量之间的距离 $||x^{(i)}-x^{(j)}||$,寻找另一部相似电影 $x^{(j)}$:

image-20250219193928552

16.6 推行工作上的细节:均值归一化 Mean Normalization

现在新增一个用户 Eve,她没有为任何电影评分,那么我们以什么为依据为 Eve 推荐电影呢?

如果根据之前的模型,因为她没有打分,代价函数第一项为0。算法目标变为最小化最后一项,最后得到 $\theta^{(5)}$ 中的元素都是0。现在拿着 $\theta^{(5)}$ 预测出的评分都是0。这没有什么意义,因此需要做一些处理。

image-20250219195157732

首先需要对结果 Y 矩阵进行均值归一化处理,将每一个用户对某一部电影的评分(即整个评分矩阵)减去所有用户对该电影评分的平均值$u$,得到的新矩阵作为$Y$

然后利用这个新的 Y 矩阵来训练算法。 最后在预测评分时,需要在预测值的基础上加回平均值,即预测值等于 $(\theta^{(j)})^T(x^{(i)})+u_i$ 。因此对于 Eve,新模型预测出的她的打分都是该电影的平均分。

image-20250219195818876

16.推荐系统
http://example.com/2025/02/16/16 推荐系统/
作者
Dongxuan Liu
发布于
2025年2月16日
许可协议