吴恩达机器学习—推荐系统

问题规划

15572624-8dcddc3945b7a32e.png
引例—电影推荐

假设已有的数据如上所示,洋红色线内的数据表示缺失数据,那么我们如何根据已有的评分数据来预测这些缺失的数据呢?

基于特征的推荐算法

15572624-2396d044166238d2.png
基于内容的推荐系统

已知数据如上,有四个人对于不同电影的评分,我们还有分别表示电影包含浪漫成分和动作片成分的多少。那么每一个电影都可以用一个向量来表示,如第一个电影可以表示为,其中第一个元素为常数。那么对于每一个用户j,我们可以用一个学习算法学习参数,然后根据公式预测用户j对电影i的评分。现在问题就变为如何学习到用户的参数向量。

15572624-8600d7910102a99d.png
基于内容的推荐问题

问题的正规表示方式如上所示,我们可以建立一个类似于线性回归的模型进行用户参数向量的预测,表示用户的参数向量,表示电影的特征向量,现在已经有了该用户的历史评价数据,那么可以通过最小化上式计算用户的参数向量,即使得参数与特征的乘积作为电影预测的评分减去用户对电影实际的评分,当两者最接近的时候求得的用户参数向量就是我们要求的向量。同时可以加入正则项进行调整。

15572624-26423c08c238d759.png
目标最优化

我们可以通过最小化方差得到某一个用户的参数向量,也可以最小化所有用户的和来得到所有用户的参数向量。

15572624-0b51ec0e10e3626b.png
梯度下降法求最优

同样可以利用梯度下降法求最优参数。

以上是基于内容的推荐算法,即已经有了表示电影特征的向量,但是在实际中可能没有这些信息,那么要如何进行推荐呢?

协同过滤

之前的数据已经有信息表明,该电影包含浪漫成分,包含多少动作片成本,但是在实际中我们不可能花钱让每一个人看完这部电影然后给出这些信息,而且有时候你可能需要的不止这两个特征。

15572624-306e93b6012223b7.png
求解电影的特征向量

假设我们现在已经有了每个用的参数向量和每个用户对电影的评分,要求得电影的特征向量,如对于用户一来说,根据他的参数向量可知他比较喜欢浪漫电影,而他对电影一的评分为5分,那么我们可以推断电影一包含1的浪漫成分,包含0的动作成分,那么就可以得到电影一的特征向量为[1,1,0]。这一思想的正规表示如下:

15572624-cd99f7e3daea1b71.png
最优化过程

再给定用户参数和评分的情况下,学习电影特征,通过最小化第一个式子,每一个用户的参数向量与电影特征的内积表示某个用户对该电影的预测评分,而我们还有每个人对该电影的实际评分,使两者平方和最小,则可以求得某一个电影的特征向量。正则化约束了特征值的大小。要求得所有电影的特征向量,则要使所有人对所有电影的预测评分与实际评分误差平方和最小。

15572624-177f049a2cc0a672.png
协同过滤的思想

现在我们已经知道如果根据评分和电影特征求得用户参数向量,也知道如何根据用户的参数向量和评分来预测电影的特征向量。将两者结合起来就是协同过滤的基本思想:首先初始化用户的参数,然后根据参数和评分计算电影的特征,得到特征以后在进行用户参数向量的预测,如此迭代下去,直至收敛。之所以称之为协同过滤,是因为这一系统结合了每一个用户的行为,协同所有的用户信息在一起,每个用户都在帮助系统进行更好的学习。

这一过程必须在每个用户都对多个电影进行评分,而且每个电影都被多个用户评分的情况下才能有效。

协同过滤算法

15572624-970e7075c7240eee.png
协同过滤算法

将用户参数求解和电影特征向量求解结合起来进行最优化,可以避免反复迭代从而达到最优,具体的优化模型如上所示,将两个最优化目标结合在一起,此时特征向量和用户参数向量的维度都是n维,因为系统会自动学习特征,就不用人为设置硬特征了。

15572624-2addad205869c039.png
协同过滤算法流程

首先将用户参数向量和电影特征向量初始化为较小的值,然后最小化包含的损失函数,利用梯度下降法能求得每一个用户的参数向量和每个电影的特征向量。最后,给定一个用户即其参数向量和电影的特征向量,就能进行评分预测了。

矢量化:低轶矩阵分解

协同过滤算法还能实现其他功能,比如,给定特定的商品,你可以找到与之相关的其他商品。比如用户一直在寻找某个产品,那么有没有一些相关的产品可以推荐给用户?

15572624-96486b3ed35512c8.png
每个用户对每个电影的评分

每个用户对每个电影的评分可以表示为一个矩阵y。

15572624-155fa254d35de486.png
低轶矩阵分解

所有电影的特征向量可以表示为一个矩阵X,所有用户的参数向量同样可以表示为一个矩阵,这样Y就可以用这两个矩阵的乘积表示。这一过程称为低轶矩阵分解

15572624-f13a6a11e0cb9d10.png
相似电影推荐

那么我们如何发现并推荐相关电影呢?根据协同过滤算法,我们已经学习到了不同电影的特征向量,这些特征有时是难以可视化和难以理解的,但是他们确实是有意义的,能捕捉不同电影的特征。通过计算两个电影特征向量之间的模,即距离,我们可以找到和这个电影最相似的电影,如果我们要找到5个与某一电影最相近的电影,那么只要找到和该电影特征向量距离最小的前五个即可。

实施细节:均值规范化

15572624-92e919b550c8b94d.png
没有评分数据的用户

如果对于某一个用户,如这里的Eve,没有她的评分数据,如果对数据进行协同过滤,求出的她的参数向量肯定是零向量,因为在进行最小化的时候,损失函数简化为求正则项的最小化,则求出的参数一定是零。此时预测该用户对电影的评分,得到的结果肯定也是0,这是无意义的。

15572624-f629d905043687ab.png
均值归一化

为了使用户的预测评分有意义,采用均值归一化,首先求出每个电影的评分的均值,然后将每个人对该电影的评分减去均值,这样就实现了均值归一化,如上图所示。然后根据最优化求出用户参数和电影特征向量之后,在进行预测的时候,在每个电影的预测评分上加上该电影评分均值从而得到最终结果。

猜你喜欢

转载自blog.csdn.net/weixin_33806509/article/details/86971614