- 基于内容过滤
- 从信息检索,和文本检索发展而来
- 基于商品描述及用户喜好描述,为用户推荐商品
- 协同过滤
- 基于用户行为为用户推荐感兴趣的商品
- 行为可以是过往的交易行为和商品评分,这种方式不需要显性的属性信息
- 混合推荐
基于内容过滤存在的问题
- 需了解商品内容
- 需要人工或自动标注信息
- 商品内容不能反映所有特点
- 冷启动问题
- 需要花时间学习哪些内容或feature 对用户而言是重要的
- 如果用户兴趣点改变了呢
- Lack of serendipity(缺少意外新发现 EE问题)
- 基于内容的推荐(Content-based) V.S. 协同过滤(Collaborative Filtering)
推荐方法 | 优点 | 缺点 |
---|---|---|
基于内容推荐 | 推荐结果直观,容易解释 不需要领域知识 | 新用户问题; 复杂属性不好处理; 要有足够数据构造分类器; |
协同过滤推荐 | 新异兴趣发现、不需要领域知识; 随着时间推移性能提高; 推荐个性化、自动化程度高; 能处理复杂的非结构化对象; | 稀疏问题; 可扩展性问题; 新用户问题; 依赖历史数据集; 系统开始时推荐质量差; |
基于协同过滤的推荐算法
- 协同过滤算法
- 基于用户行为的推荐
- 行为可以是过往的交易行为和商品评分,这种方式不需要显性的属性信息
- 协同过滤分类
- K近邻(neighborhood )方法
- 借助商品的关系或者用户的关系
- K近邻(neighborhood )方法
- 基于模型的方法
- 用隐含变量刻画商品
协同过滤算法之K邻近方法
K邻近方法 基于假设 : “跟你喜好相似的人喜欢的东西你也很有可能喜欢” 或“跟你喜欢的物品类似的物品你也很有可能喜欢 ”
-
分类
- User-based 方法
- 基于user的协同过滤,通过不同用户对item的评分来评测用户之间的相似性,基于用户之间的相似性做出推荐
- Item-based方法
- 基于item的协同过滤,通过用户对不同item的评分来评测item之间的相似性,基于item之间的相似性做出推荐
- User-based 方法
-
基于用户(User-based)
- 查找用户相似度 如何预测用户1对于商品4的喜好程度?
- 找到和用户1相似的用户且购买过商品4(基于购买记录)即为用户n
- 根据用户n对商品4的评价,以相似度为权重回填结果
- 针对所有用户组合,重复上述步骤,直到所有空格都被填满
- 查找用户相似度 如何预测用户1对于商品4的喜好程度?
-
找到相似的Item (Item-based)
- 用户1对于商品4的喜好程度?
- 从用户1历史记录中,计算商品n和商品4的相似度(以其他用户的历史记录)
- 将用户1对于商品n的评价,以商品相似度为权重回填
- 针对所有商品组合,重复上述步骤直到所有空格都被填满
相似度计算(Similarity Calculation)
基于模型的方法
-
思想
- 通过机器学习算法,在数据中找出模式,并将用户与物品间的互动方式模式化
- 基于模型的协同过滤方式是构建协同过滤更高级的算法
-
近邻模型的问题
- 物品之间存在相关性, 信息量并不随着向量维度增加而线性增加
- 矩阵元素稀疏, 计算结果不稳定,增减一个向量维度, 导致近邻结果差异很大的情况存在
-
算法分类
- 基于图的模型
- 基于矩阵分解的方法
-
基于图的模型
- 基于邻域的模型看做基于图的模型的简单形式
- 原理
- 将用户的行为数据表示为二分图
- 基于二分图为用户进行推荐
- 根据两个顶点之间的路径数、路径长度和经过的顶点数来评价两个顶点的相关性
-
基于矩阵分解的模型
-
原理
根据用户与物品的潜在表现,我们就可以预测用户对未评分的物品的喜爱程度
把原来的大矩阵, 近似分解成两个小矩阵的乘积, 在实际推荐计算时不再使用大矩阵, 而是使用分解得到的两个小矩阵
用户-物品评分矩阵A是M X N维, 即一共有M个用户, n个物品 我们选一个很小的数 K (K<< M, K<<N)
-
通过计算得到两个矩阵U V U是M K矩阵 , 矩阵V是 N K
类似这样的计算过程就是矩阵分解
-
基于矩阵分解的方法
- ALS交替最小二乘
- ALS-WR(加权正则化交替最小二乘法): alternating-least-squares with weighted-λ –regularization
- 将用户(user)对商品(item)的评分矩阵分解为两个矩阵:一个是用户对商品隐含特征的偏好矩阵,另一个是商品所包含的隐含特征的矩阵。在这个矩阵分解的过程中,评分缺失项得到了填充,也就是说我们可以基于这个填充的评分来给用户最商品推荐了。
- SVD奇异值分解矩阵
- ALS交替最小二乘
-
-
ALS方法
- ALS的矩阵分解算法常应用于推荐系统中,将用户(user)对商品(item)的评分矩阵,分解为用户对商品隐含特征的偏好矩阵,和商品在隐含特征上的映射矩阵。
- 与传统的矩阵分解SVD方法来分解矩阵R(R∈ℝm×n)不同的是,ALS(alternating least squares)希望找到两个低维矩阵,以 R̃ =XY 来逼近矩阵R,其中 ,X∈ℝm×d,Y∈ℝd×n,这样,将问题的复杂度由O(mn)转换为O((m+n)d)。
- 计算X和Y过程:首先用一个小于1的随机数初始化Y,并根据公式求X,此时就可以得到初始的XY矩阵了,根据平方差和得到的X,重新计算并覆盖Y,计算差平方和,反复进行以上两步的计算,直到差平方和小于一个预设的数,或者迭代次数满足要求则停止
基于用户的协同过滤实现 (User CF)
-
基于用户的协同过滤实现
- 第一步: 找出和目标用户兴趣类似的用户集合
- 第二步: 找到集合中用户喜欢的,且目标用户没有听说过的物品推荐给目标用户
-
基于用户协同过滤 第一步:
- 设N(u)是用户u有过正反馈的物品集合,则Jaccard公式:
如果用户数目很多,如何优化? 答:首先计算出N(u)^ N(v) != 0 的用户对(u,v),然后再对这种情况除以分母sqrt(N(u)*N(v))
-
基于用户协同过滤 第二步
得到用户之间的兴趣相似度后,UserCF算法会给用户推荐和他兴趣最相似的K个用户喜欢的物品。
S(u, K)包含和用户u兴趣最接近的K个用户,N(i)是对物品i有过行为的用户集合,Wuv是用户u和用户v的兴趣相似度,rvi代表用户v对物品i的兴趣,因为使用的是单一行为的隐反馈数据,所以所有的rvi=1
-
选取K=3,用户A对物品c、e没有过行为,因此可以把这两个物品推荐给用户A。根据UserCF算法,用户A对物品c、e的兴趣是:
p(A,c) = = 0.7416
p(A,e) = = 0.7416
基于物品的协同过滤实现
-
基于物品的协同过滤实现步骤
- Step 1:计算物品之间的相似度
- Step 2:根据物品的相似度和用户的历史行为,为用户生成推荐列表