16 推荐系统
内容:
16.1 基于内容的推荐系统
16.2 协同过滤
16.3 低秩矩阵分解
16.4 均值归一化
16.1 基于内容的推荐系统
-
引入(例子)
以不同用户对电影的评分为例
对于不同的电影,用户会有不同的喜好。希望构建一个算法来预测他们每个人可能会给他们没看过的电影打多少分。
下面引入一些标记
在我们的例子中,我们可以假设每部电影都有两个特征,如𝑥1代表电影的浪漫程度,𝑥2 代表电影的动作程度。
则每部电影都有一个特征向量,如𝑥(1)是第一部电影的特征向量为[0.9 0]。
下面我们要基于这些特征来构建一个推荐系统算法。 假设我们采用线性回归模型,我们可以针对每一个用户都训练一个线性回归模型,如𝜃(1)是第一个用户的模型的参数。 于是: -
模型
对一个用户来说,代价函数:
针对用户 𝑗,该线性回归模型的代价为预测误差的平方和,加上正则化项。
其中 𝑖:𝑟(𝑖,𝑗)表示我们只计算那些用户 𝑗 评过分的电影。在一般的线性回归模型中,误差项和正则项应该都是乘以1/2𝑚,在这里我们将𝑚去掉。并且我们不对方差项𝜃0进行正则化处理。
对所有用户来说,代价函数:
梯度下降法更新公式:
注意要根据 k 值使用公式
16.2 协同过滤
- 回顾
在之前的基于内容的推荐系统中,对于每一部电影,我们都掌握了可用的特征,使用这些特征训练出了每一个用户的参数。相反地,如果我们拥有用户的参数,我们可以学习得出电影的特征。 但是如果我们既没有用户的参数,也没有电影的特征,这两种方法都不可行了。协同过滤算法可以同时学习这两者。 - 协同过滤算法
优化目标:
同时对𝑥和𝜃进行优化
对代价函数求偏导数的结果:
注:在协同过滤从算法中,我们通常不使用方差项,如果需要的话,算法会自动学得。
协同过滤算法使用步骤如下:
1.初始 𝑥(1),𝑥(1),...𝑥(𝑛𝑚), 𝜃(1),𝜃(2),...,𝜃(𝑛𝑢)为一些随机小值
2.使用梯度下降算法最小化代价函数
3.在训练完算法后,我们预测(𝜃(𝑗))𝑇𝑥(𝑖)为用户 𝑗 给电影 𝑖 的评分
16.3 向量化:低秩矩阵分解
- 低秩矩阵分解的作用
(1)当给出一件产品时,你能否找到与之相关的其它产品。
(2)一位用户最近看上一件产品,有没有其它相关的产品,你可以推荐给他。 - 如何衡量相似性
以电影为例
电影 𝑖 有一个特征向量𝑥(𝑖),你是否能找到一部不同的电
影 𝑗,保证两部电影的特征向量之间的距离𝑥(𝑖)和𝑥(𝑗)很小,那就能很有力地表明电影𝑖和电影 𝑗 在某种程度上有相似,至少在某种意义上,某些人喜欢电影 𝑖,或许更有可能也对电影 𝑗 感兴趣 -
原理
我们有五部电影,以及四位用户,那么 这个矩阵 𝑌 就是一个 5 行 4 列的矩阵,它将这些电影的用户评分数据都存在矩阵里:
推出评分:
找到相关影片:
16.4 均值归一化
- 要解决的问题
如果一个用户从来没有给电影打过分,如何推荐?
如果使用原来的算法的话计算出的所有的y都是0,怎么办?
直观思路就是计算这个电影的平均分,分高的就推荐。下面给出专业方法 -
原理
我们首先需要对结果 𝑌矩阵进行均值归一化处理,将每一个用户对某一部电影的评分减去所有用户对该电影评分的平均值
然后我们利用这个新的 𝑌 矩阵来训练算法。 如果我们要用新训练出的算法来预测评分,则需要将平均值重新加回去,预测(𝜃(𝑗))𝑇𝑥(𝑖) + 𝜇𝑖,对于 Eve,我们的新模型会认为她给每部电影的评分都是该电影的平均分。