推荐系统 --协同过滤

目录

 

推荐系统算法总结:

协同过滤:

UserCF

ItemCF

基于模型(model_based)的协同过滤:

混合过滤


 

推荐系统算法总结:

  1. 协同过滤推荐:常见的技术基于用户的协同过滤,基于物品的协同过滤,基于模型的协同过滤;(必须掌握)
  2. 基于内容的推荐:推过自然语言等相关的NLP知识,进行数据挖掘,找出相似物品,从而实现推荐。代表算法:基于序列的推荐算法(加分项)
  3. 基于知识的推荐系统:基于开发人员定义的用户需求物品特征之间的映射关系来做推荐,结合用户需要比较相似的物品推荐给用户,这个过程比较类似搜索系统(可选了解)
  4. 基于人口信息的统计推荐:类似usercf,区别是计算用户相似度的时候使用的是用户本身的特征属性来计算(可选了解)
  5. 混合推荐:将多个推荐算法进行融合,原理和机器学习中的集成算法一样

协同过滤:

应用最广泛的其实还是协同过滤算法;在协同过滤算法中,最常见的两种算法分别是:基于用户的协同过滤(UserCF)和基于物品的系统过滤(ItemCF)

推荐系统中比较经典,并且使用广泛的一种算法;

包含两个部分:线上实时协同,线下离线的过滤;

协同: 找到用户可能喜欢的商品作为推荐列表,过滤一些不太可能的推荐商品数据&评分高 但是已经买过

分为3种:

  1. 基于用户的系统过滤UserCF
  2. 基于物品的协同过滤 ItemCF
  3. 基于模型的协同过滤 modelCF

UserCF

核心思想:

对于当前用户u而言,根据用户u和其它用户的历史行为数据/用户-物品评分信息,找出和用户u最相似的K个近邻用户,然后将这K个近邻用户喜好的物品推荐给用户u。

用户相似度度量方式

本质的思想其实都是一样的;对于用户u和用户v而言,用户u和用户v之间的相似度其实是受用户u和用户v共同评价过的商品分数影响的。

“找出和用户u最相似的K个近邻用户,然后将这K个近邻用户喜好的物品推荐给用户u”这个过程其实是反过来计算的;

用户u对于未产生行为物品i的喜好程度/评分的计算过程

获取所有评论过物品i的其它用户,然后再这些其它用户中计算和当前用户u最相似的K个用户,然后使用这K个用户对物品i的评分计算得到用户u对于物品i的评分(评分计算公式:加权平均求和、基于均值计算的加权平均求和、基于偏置项计算的加权平均求和) ===> 利用的是相似用户喜好的物品是类似的这种意思

迭代第一步,计算出用户u对于所有物品的喜好程度/评分。

获取用户u对于所有物品评分中最高的N个评分物品作为最终的推荐列表

ItemCF

  1. 核心思想:对于当前用户u而言,根据用户u历史的偏好信息/偏好的物品列表,找出和列表中物品最相似的K个近邻物品,然后将这K个近邻物品推荐给用户u。
  2. 相对于UserCF而言,唯一的区别在于:在ItemCF中计算的是物品之间的相似度,推荐的原理是基于用户历史喜好什么物品,那么未来可能会喜好和这个物品类似的其它物品,从而将相似物品作为推荐列表
  3. 物品相似度度量方式:本质的思想其实都是一样的;对于物品i和物品j而言,物品i和物品j之间的相似度其实是受物品i和物品j被共同评价过的用户评分数影响的。

“根据用户u历史的偏好信息/偏好的物品列表,找出和列表中物品最相似的K个近邻物品,然后将这K个近邻物品推荐给用户u”这个过程其实是反过来计算的;

根据用户u历史的偏好信息/偏好的物品列表,对物品列表中的每个物品做一下操作;

用户u对于未产生行为物品i的喜好程度/评分的计算过程:

  1. 获取用户u评估过的其它物品j;
  2. 然后计算这些物品与物品i之间的相似度,获取和物品i最相似的K个物品;
  3. 然后使用用户u对于这K个物品的评分计算用户u对于物品i的评分。(评分计算公式:加权平均求和、基于均值计算的加权平均求和、基于偏置项计算的加权平均求和) ===>
  4. 利用:如果物品i和物品j比较相似,并且用户u喜好物品j的情况下,可以认为用户u也会喜好物品i
  5. 迭代第二步,计算出用户u对于所有物品的喜好程度/评分。
  6. 获取用户u对于所有物品评分中最高的N个评分物品作为最终的推荐列表
  1. 评分矩阵的初始化

用户id和物品id一般我们可以直接用数据库中获取即可;

  1. 但是对于评分这个信息,一般情况下,比较可靠的一种方式是通过问卷调查或者用户的主动评分 -> 显示评分
  2. 但是一般情况下,显示评分数据都比较少,所以我们一般需要通过其它方式来主动的获取评分数据,这种方式得到的评分叫做隐式评分,一般隐式评分的得到是需要根据业务规则对用户行为信息做一个量化的转换,eg: 单曲循环=5, 分享=4, 收藏=3, 主动播放=2 , 听完=1, 跳过=-1 , 拉黑=-5

基于模型(model_based)的协同过滤:

利用机器学习的思路建立推荐系统的模型

  • 利用关联规则做协同过滤:

找出N项频繁项集。认为用户购买频繁项集中的一个商品u的时候,同时购买其他商品的概率是最大的,那么用户浏览某个商品u的时候,我们就可以将这个商品的对应的关联的其他商品(N项集中的其他商品)推荐给当前用户,这个就是累死亚马逊或者当当上的一起购买的展示信息

基于隐语义模型/矩阵分解做协同过滤

将原始的评分矩阵进行分解,从而得到最终的预测模型

  • 基于聚类算法做协同过滤

思想和UserCF/ItemCF类似,我们可以按照用户/物品的特性基于一定的距离公式进行聚类。如果基于用户聚类,可以按照一定的距离度量公式分为不同的人群,将相同人群中评分比较高的物品推荐给当前群体的其他用户。

  • 使用分类算法做协同过滤

以用户id和物品id作为特征属性矩阵(一般会加入物品的相同特性的特征属性),然后将用户对于物品的评分区间化(将用户评分按照高低,分成几个区间)作为y值,转换为分类算法;一般情况下使用二分类比较多,logistic回归比较多

  • 使用回归算法做协同过滤

直接构建一个回归算法模型,来训练出一个能够得到目标用户对于某个物品评分的这样一个模型

  • 使用深度学习的思想做协同过滤

核心:将原来一个隐藏模型的形式 转换为 多隐藏模型 来推荐

混合过滤

多种推荐算法模型 产生的推荐列表 进行融合的一种方式

假设现在有三个推荐模型,对于同一个用户u,现成产生的推荐列表分别是:

model1: item1:4.5, item2:4.3, item4:4, item6:3.8, item8:3.8
model2: item2:4.8, item6:4.1, item3:4, item1:3.8, item9:3.6
model3: item1:4.9, item4:4.3, item8:3.6, item2:3.2, item10:3.1

对于model1~3,可认为都是在实际评分值附近,可以将model1~3结果作为特征矩阵X实际的评分作为Y,训练出一个X—> Y 的映射函数,从而可以得到最终的推荐模型,可以认为最终的推荐模型就是普通的回归算法,一般为线性回归

也就是这里需要将model1~3的结果作为X,实际值作为Y进行训练model4,model4输出一个评分函数,这个评分按照从大到小进行排序,作为最终的推荐结果

猜你喜欢

转载自blog.csdn.net/weixin_41521681/article/details/86542303