推荐系统
1 概述
常见的推荐系统有三种主要的应用常景:
- 个性化推荐:常以“推荐”、“猜你喜欢”、“发现”等形式出现,一般放在首页位置
- 推荐:常以“相关推荐”、“看了还看”等形式出现,一般放在内容详情页
- 热门推荐:基于各种数据进行计算,得到的排行榜,支持全局排行以及分类排行等,位置不限
推荐系统的主要工作是:
- 首先它基于用户的兴趣,根据用户的历史行为做兴趣的挖掘,把物品和用户的个性化偏好进行匹配。
- 然后通过推荐算法或者技术把信息进行过滤,解决用户的过载问题。 当用户有新的行为发生时,比如点击或者搜索之后,能及时进一步捕捉用户的兴趣。
- 选择合适的场景,个性化或者相关的、热门的,来给用户进行推荐。
示例
假使我们是一个电影供应商,我们有 5 部电影和 4 个用户,我们要求用户为电影打分
nu代表用户的数量;
nm代表电影的数量;
r(i,j)=1代表用户j给电影i评过分;
y(i,j)代表用户j对电影i所给出的评分。
2 基于内容的推荐算法
假设我们采用线性回归模型,我们可以针对每一个用户都训练一个线性回归模型,预测该用户对某电影的打分情况
单个用户代价函数,代价函数橘色部分防止过拟合
所有用户的代价函数
上面基于内容的过滤算法是通过电影的特征,使用特征来训练出每个用户的参数。相反,如果使用用户的参数,也可以学习得出电影的特征
3 协同过滤算法
协同滤波算法指的是当我们执行算法时,要观察大量的用户,观察这些用户的实际行为来协调地得到对个用户对电影更佳的评分值。因为如果每个用户都对一部分电影做出了评价,那么每个用户都在帮助算法学习出更合适的特征,然后这些学习出的特征又可以被用来更好地预测其他用户的评分。协同的意思是每位用户都在帮助算法更好地进行特征学习,这就是协调滤波。
3.1 基本原理
如果没有用户的参数和电影的特征,协同过滤算法便可以同时学习这两者
使用梯度下降算法最小化代价函数
3.2 二进制标签
预测用户是否喜欢某个电影,1、0、?分别表示用户喜欢、不喜欢、电影还未向用户展示
线性---->二进制(线性回归转为逻辑回归)
损失函数
3.3 均值归一化
对于一个新用户,若按之前的训练结果,新用户的w和b都为0,使得预测结果都为0
对于评分矩阵,取均值,用原始评分矩阵–均值,得到新的评分矩阵,用新的评分矩阵训练
预测值,wx+b+u(均值)
对于新用户,所预测的评分为u
对于没有评级的电影,对列进行归一化,预测该电影的打分值
3.4 协同过滤Tensorflow实现
常规训练
协同过滤
优化两组参数
3.5 相关特征
相似的电影有相似的特征向量
3.6 限制
cold start problem:对于一个新电影,很少有用户评价;或者一个新用户评价过很少的电影。用协同过滤不是很准确,尽管归一化有很大提升。
没有使用一些有关电影或用户的附加信息:如对于一个电影:题材、演员、制作方;对于一个用户:年龄性别位置偏好。
4 基于内容过滤
协同过滤:基于用户评分,用户评分的相似性
内容过滤:基于用户和电影的特点
第一步:构建每个用户和电影的特征向量,用户和电影的向量大小不同
第二步:通过Xiu计算Viu,Xju计算Vju,注意Viu与Vju大小相同,采用深度学习神经网络进行计算
找到相似电影
第三步:Viu与Vju点乘求用户j与电影ide匹配程度,决定是否向该用户推荐i电影
5 从大型目录中选择
如果用基于内容过滤的方法,要从大量电影中选择,需要每个电影与用户进行一次match,这在计算上是比较麻烦的。
解决方法:检索和排序
第一步:检索
生成合理的电影列表,去重并删去已经看过的
检索更多的电影数目会得到较好的推荐性能,但同时速度较慢。
建议:离线实验,看检索数量多少比较合适
第二步:排序
用训练好的模型计算匹配度然后排序
代码实现