推荐系统

主流的推荐算法
协同过滤、隐语义模型、关联规则;基于人口统计学的推荐、基于物品内容的推荐

一、协同过滤
二、隐语义模型
理解:根据隐含特征将用户与物品联系起来。根据用户的当前偏好信息,得到用户的兴趣偏好,将该类兴趣对应的物品推荐给当前用户。

协同过滤算法

-1. 原理:利用相似的用户或者相似的物品来产生推荐列表
    基于相似用户来产生推荐列表 --> UserCF
        原理:基于相似用户来产生推荐列表,将相似用户喜好的商品推荐给当前用户
          一句话来讲:如果两个用户相似,那么就可以将其中一个用户喜好的商品推荐给另外一个用户。
    基于相似物品来产生推荐列表 --> ItemCF
        原理:基于物品的相似度信息,将物品推荐给用户,从而产生推荐列表。
          一句话来讲:如果两个物品相似,那么如果某个用户喜好其中一个物品,那么可以认为另外一个物品也可能会被这个用户喜好。

-2. 协同过滤和KNN的区别:
    --1. 输入的数据不一样
      KNN中输入的是样本的特征属性矩阵
      协同过滤中输入的是用户物品评分矩阵
    --2. 相似度的计算方式不太一样
      KNN中计算的是样本之间的相似度,是基于特征属性向量计算,实际上就是计算两个样本的特征向量的相似度
      协同过滤中计算两个用户的相似度,是将这两个用户共同评论的物品评分组合到一起作为当前用户的特征向量,然后计算这两个向量之间的相似度
      协同过滤中计算两个物品的相似度,是将这同时评论这两个物品的用户评分评分组合到一起作为当前物品的特征向量,然后计算这两个向量之间的相似度
    --3. 预测结果的产生方式不太一样
      KNN中是将相似样本的目标属性的Y值直接融合
      协同过滤算法中需要基于相似用户或者相似物品的评分来做一个融合

-3. 相似度的计算方式:
    总结:
      使用两个用户的共同评论的商品评分作为这两个用户的特征向量,然后计算着两个特征向量的相似度作为这两个用户的相似度。
      使用同时评论过两个物品的用户评分作为特征向量,然后计算着两个特征向量的相似度作为这两个物品的相似度。

u1 i1 3
u1 i2 -1
u1 i3 -1
u1 i4 2
u2 i1 5
u2 i2 1
u2 i3 -5
u2 i5 5
u2 i8 2
u3 i1 -5
u3 i2 3
u3 i3 3
u3 i4 3
u3 i6 1
u4 i1 1
u4 i6 2
计算u1和u2的相似度:
---1. 获取这两个用户同时评论的商品列表:[i1, i2, i3]
---2. 将评分做成向量:
u1: [3,-1,-1]
u2: [5,1,-5]
(3-5)^2 + (-1-1)^2 + (-1+5)^2
--3. 计算[3,-1,-1]和[5,1,-5]相似度
计算u1和u3的相似度:
---1. 获取这两个用户同时评论的商品列表:[i1, i2, i3, i4]
---2. 将评分做成向量:
u1: [3,-1,-1,2]
u3: [-5,3,3,3]
--3. 计算[3,-1,-1,2]和[-5,3,3,3]相似度
计算i1和i2的相似度:
---1. 获取同时评论这两个物品的用户列表:[u1, u2, u3]
---2. 将评分做成向量:
i1: [3,5,-5]
i2: [-1,1,3]
--3. 计算[3,5,-5]和[-1,1,3]相似度
========================================================
ItemCF变种算法:
步骤:
1. 离线构建好物品的相似度矩阵,并将矩阵输出保存
2. 在线模块加载这个相似度矩阵
3. 针对当前用户的访问列表/偏好列表,根据相似度矩阵获取和这列物品最相似的其它物品
4. 计算当前用户对于这些其它物品的评分值,评分值的计算根据当前的用户访问列表/偏好列表(以相似度作为权重计算加权和)
5. 获取评分最高的物品作为推荐结果
eg:
a. 当前的偏好列表是: 5, 2->4.5, 5->4>
b. 当前偏好物品的相似物品列表为:
1 -> 2:5.0, 4:4.8, 6:4.7, 9:4.7
2 -> 1:5.0, 3:5.0, 5:4.5, 7:4.4
5 -> 3:4.7, 1:4.5, 8:4.5, 9:4.5
c. 计算当前用户对于所有相似物品的评分:
u1 -> 1: 4.26 --> 已经访问过
u1 -> 2: 5.00 --> 已经访问过
u1 -> 3: 4.26
u1 -> 4: 4.80
u1 -> 5: 4.50 --> 已经访问过
u1 -> 6: 4.70
u1 -> 7: 4.40
u1 -> 8: 4.50
u1 -> 9: 4.51
d. 在没有访问过的商品中获取评分最高的3个商品作为推荐列表
最终的推荐就是: (4:4.8, 6:4.7, 9:4.51)
==================================================================================
冷启动
问题:
-1. 当用户第一次登陆系统的时候,如何给用户产生推荐列表??? --> 用户的冷启动
-2. 当物品第一次录入系统的时候,如果将物品推荐给用户??? --> 物品的冷启动
用户冷启动:
背景:
在UserCF推荐算法中,新用户由于不存在评分物品的情况,所以没法计算用户的相似度,也就没法产生推荐列表
解决方案:
-1. 最常见的:TopN热门推荐、TopN新品推荐
-2. 利用ItemCF变种算法,实时的根据用户的访问情况产生推荐列表,要求用户至少有一次访问
-3. 利用用户的其它特征属性计算相似度来产生推荐列表
物品冷启动:
背景:
在ItemCF推荐算法中,新物品是没法计算相似度的,所以不能产生推荐列表
解决方案:
-1. 最常见的:TopN新品推荐
-2. 利用物品的其它特征属性计算相似度来产生推荐列表

离线训练、在线加载
稀疏数据和冷启动都涉及到数据量的问题
越大的公司用的算法越简单,因为数据量大。
用户行为比较丰富的时候,推荐效果好。

用户--物品 评分矩阵

隐因子模型就是SVD和其他一些矩阵分解。
协同过滤属于knn,隐因子属于主题模型(文本中用的比较多)
关联规则算法, 一般用的关联规则算法就是fd_tree
https://www.cnblogs.com/ECJTUACM-873284962/p/8729010.html

你可能感兴趣的:(推荐系统)