看到推荐系统的时候,我是很兴奋的,由于我不少同窗都是走这个方向的,然而,我却对这个方向一点都不了解 。。。。。。git
16.1 问题形式化
在不少企业中,推荐系统是一个很重要的营销手段。咱们直接进入主题吧!!github
咱们从一个例子开始定义推荐系统的问题。算法
假使咱们是一个电影供应商,咱们有5部电影和 4 个用户,咱们要求用户为电影打分。函数
前三部电影是爱情片,后两部则是动做片,咱们能够看出Alice和Bob彷佛更倾向与爱情片,而Carol和Dave彷佛更倾向与动做片。而且没有一个用户给全部的电影都打过度。咱们但愿构建一个算法来预测他们每一个人可能会给他们没看过的电影打多少分,并以此做为推荐的依据。学习
下面引入一些标记:优化
表明用户的数量url
表明电影的数量.net
若是用户
给电影
评过度则
get
若是用户
给电影
的评分产品
表明用户
评过度的电影的总数
16.2 基于内容的推荐系统
在一个基于内容的推荐系统算法中,咱们假设对于咱们但愿推荐的东西有一些数据,这些数据是有关这些东西的特征。
在咱们的例子中,咱们能够假设每部电影都有两个特征,如表明电影的浪漫程度,
表明电影的动做程度。
则每部电影都有一个特征向量,如是第一部电影的特征向量为
下面咱们要基于这些特征来构建一个推荐系统算法。假设咱们采用线性回归模型,咱们能够针对每个用户都训练一个线性回归模型,如
是第一个用户的模型的参数。因而,咱们有:
用户
的参数向量
电影
的特征向量
对于用户和电影
,咱们预测评分为:
代价函数:
针对用户,该线性回归模型的代价为预测偏差的平方和,加上正则化项:
若是咱们要用梯度降低法来求解最优解,咱们计算代价函数的偏导数后获得梯度降低的更新公式为:
16.3 协同过滤
在讲公式以前,我查了一下百度百科,百度百科对于协同过滤的解释以下:
接下来,咱们继续跟着吴恩达老师学习协同过滤。
在以前的基于内容的推荐系统中,对于每一部电影,咱们都掌握了可用的特征,使用这些特征训练出了每个用户的参数。相反地,若是咱们拥有用户的参数,咱们能够学习得出电影的特征。
可是若是咱们既没有用户的参数,也没有电影的特征,这两种方法都不可行了。协同过滤算法能够同时学习这二者。
咱们的优化目标便改成同时针对和
进行。
对代价函数求偏导数的结果以下:
注:在协同过滤从算法中,咱们一般不使用方差项,若是须要的话,算法会自动学得。
协同过滤算法使用步骤以下:
一、初始
为一些随机小值
二、使用梯度降低算法最小化代价函数
三、在训练完算法后,咱们预测
为用户
给电影
的评分。
最后得到特征矩阵。
经过这个学习过程得到的特征矩阵包含了有关电影的重要数据,这些数据不老是人能读懂的,可是咱们能够用这些数据做为给用户推荐电影的依据。
例如,若是一位用户正在观看电影,,咱们能够寻找另外一部电影
,依据两部电影的特征向量之间的距离
的大小。
16.4 协同过滤算法
协同过滤优化目标:
用语言来总结一下,若是你有特征x,你能够用来最小化问题来估计,若是你有
,你能够用来估计x,,咱们如今就是要不停得重复计算,先用x解出
再用
解出x。
如今咱们有一种方法,协同过滤,能够不断地计算x和,同时获得二者,咱们要作的是将这两个优化目标函数结合为一个优化目标函数J(上图),就能够协同计算二者了。
16.5 向量化:低秩矩阵分解
举个例子:
1.当给出一件产品时,你可否找到与之相关的其它产品。
2.一位用户最近看上一件产品,有没有其它相关的产品,你能够推荐给他。
我将要作的是:实现一种选择的方法,写出协同过滤算法的预测状况。
咱们有关于五部电影的数据集,我将要作的是,将这些用户的电影评分,进行分组并存到一个矩阵中。
咱们有五部电影,以及四位用户,那么这个矩阵就是一个5行4列的矩阵,它将这些电影的用户评分数据都存在矩阵里:
推出评分:
找到相关影片:
如今既然你已经对特征参数向量进行了学习,那么咱们就会有一个很方便的方法来度量两部电影之间的类似性。例如说:电影有一个特征向量
,你是否能找到一部不一样的电影
,保证两部电影的特征向量之间的距离
和
很小,那就能颇有力地代表电影
和电影
在某种程度上有类似,至少在某种意义上,某些人喜欢电影
,或许更有可能也对电影
感兴趣。总结一下,当用户在看某部电影
的时候,若是你想找5部与电影很是类似的电影,为了能给用户推荐5部新电影,你须要作的是找出电影
,在这些不一样的电影中与咱们要找的电影
的距离最小,这样你就能给你的用户推荐几部不一样的电影了。
经过这个方法,但愿你能知道,如何进行一个向量化的计算来对全部的用户和全部的电影进行评分计算。同时但愿你也能掌握,经过学习特征参数,来找到相关电影和产品的方法。
参考:https://baike.baidu.com/item/%E5%8D%8F%E5%90%8C%E8%BF%87%E6%BB%A4/4732213?fr=aladdin