第十六章 推荐系统(Recommender Systems)

2019-04-29  本文已影响0人  Colleen_oh

看到推荐系统的时候,我是很兴奋的,因为我很多同学都是走这个方向的,然而,我却对这个方向一点都不了解 。。。。。。

16.1 问题形式化

在很多企业中,推荐系统是一个很重要的营销手段。我们直接进入主题吧!!

我们从一个例子开始定义推荐系统的问题。

假使我们是一个电影供应商,我们有5部电影和 4 个用户,我们要求用户为电影打分。

前三部电影是爱情片,后两部则是动作片,我们可以看出AliceBob似乎更倾向与爱情片,而CarolDave似乎更倾向与动作片。并且没有一个用户给所有的电影都打过分。我们希望构建一个算法来预测他们每个人可能会给他们没看过的电影打多少分,并以此作为推荐的依据。

下面引入一些标记:

n_u代表用户的数量

n_m代表电影的数量

r(i,j) 如果用户j给电影i评过分则r(i,j)=1

y^{(i,j)} 如果用户j给电影i的评分

m_j 代表用户j评过分的电影的总数



16.2 基于内容的推荐系统

在一个基于内容的推荐系统算法中,我们假设对于我们希望推荐的东西有一些数据,这些数据是有关这些东西的特征。

在我们的例子中,我们可以假设每部电影都有两个特征,如x_1代表电影的浪漫程度,x_2代表电影的动作程度。

则每部电影都有一个特征向量,如x^{(1)}是第一部电影的特征向量为[0.9,0]下面我们要基于这些特征来构建一个推荐系统算法。假设我们采用线性回归模型,我们可以针对每一个用户都训练一个线性回归模型,如\theta ^{(1)}是第一个用户的模型的参数。于是,我们有:

\theta ^{(j)}用户j的参数向量

x ^{(j)}电影i的特征向量

对于用户j和电影i,我们预测评分为:(\theta ^{(j)})^Tx^{(i)}

代价函数:

针对用户j,该线性回归模型的代价为预测误差的平方和,加上正则化项:

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


16.3 协同过滤

在讲公式之前,我查了一下百度百科,百度百科对于协同过滤的解释如下:

接下来,我们继续跟着吴恩达老师学习协同过滤。

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

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

我们的优化目标便改为同时针对x\theta 进行。

对代价函数求偏导数的结果如下:

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

协同过滤算法使用步骤如下:

1、初始x^{(1)},x^{(2)},...,x^{(n_m)},\theta ^{(1)},\theta ^{(2)},...,\theta ^{(n_u)}为一些随机小值

2、使用梯度下降算法最小化代价函数

3、在训练完算法后,我们预测(\theta ^{(j)})^Tx^{(i)}为用户j给电影i的评分。

最后获得特征矩阵。

通过这个学习过程获得的特征矩阵包含了有关电影的重要数据,这些数据不总是人能读懂的,但是我们可以用这些数据作为给用户推荐电影的依据。

例如,如果一位用户正在观看电影x^{(i)},,我们可以寻找另一部电影x^{(j)},依据两部电影的特征向量之间的距离||x^{(i)}-x^{(j)}||的大小。


16.4 协同过滤算法

协同过滤优化目标:

用语言来总结一下,如果你有特征x,你可以用来最小化问题来估计\theta ,如果你有\theta ,你可以用来估计x,,我们现在就是要不停得重复计算,先用x解出\theta 再用\theta 解出x。

现在我们有一种方法,协同过滤,可以不断地计算x和\theta ,同时得到两者,我们要做的是将这两个优化目标函数结合为一个优化目标函数J(上图),就可以协同计算两者了。


16.5 向量化:低秩矩阵分解

举个例子:

1.当给出一件产品时,你能否找到与之相关的其它产品。

2.一位用户最近看上一件产品,有没有其它相关的产品,你可以推荐给他。

我将要做的是:实现一种选择的方法,写出协同过滤算法的预测情况。

我们有关于五部电影的数据集,我将要做的是,将这些用户的电影评分,进行分组并存到一个矩阵中。

我们有五部电影,以及四位用户,那么这个矩阵Y就是一个5行4列的矩阵,它将这些电影的用户评分数据都存在矩阵里:

推出评分:

找到相关影片:

现在既然你已经对特征参数向量进行了学习,那么我们就会有一个很方便的方法来度量两部电影之间的相似性。例如说:电影i有一个特征向量x^{(i)},你是否能找到一部不同的电影j,保证两部电影的特征向量之间的距离x^{(i)}x^{(j)}很小,那就能很有力地表明电影i和电影j在某种程度上有相似,至少在某种意义上,某些人喜欢电影i,或许更有可能也对电影j感兴趣。总结一下,当用户在看某部电影i的时候,如果你想找5部与电影非常相似的电影,为了能给用户推荐5部新电影,你需要做的是找出电影j,在这些不同的电影中与我们要找的电影i的距离最小,这样你就能给你的用户推荐几部不同的电影了。

通过这个方法,希望你能知道,如何进行一个向量化的计算来对所有的用户和所有的电影进行评分计算。同时希望你也能掌握,通过学习特征参数,来找到相关电影和产品的方法。


参考:https://baike.baidu.com/item/%E5%8D%8F%E5%90%8C%E8%BF%87%E6%BB%A4/4732213?fr=aladdin

https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes

上一篇下一篇

猜你喜欢

热点阅读