推荐系统二遍学习&总结
读书笔记
《推荐系统·原理与实践》
作者: Charu C. Aggarwal
出版社: 机械工业出版社
出版年: 2018-7-24
概述&杂项
推荐系统的目标
-
预测模型
对用户-物品组合的评分值进行预测。用户-物品矩阵,补全缺失的部分,这里也被称为矩阵补全问题。
-
排名模型
向用户推荐topK物品或为某物品确定前k个感兴趣的用户。不过排名模型可以由第一个模型得到之后进行排序得到。
各种模型:
处理两种数据:1.物品-用户之间的相互关系,比如购买或评分行为;2.用户和物品的属性信息。
用到前一种方法叫作协同过滤法,用到后一种方法叫作基于内容的推荐方法。基于内容的推荐方法一般着重于个体而不是大众的信息,但大多数情况下依然会用到评分矩阵。再基于知识的推荐系统中,推荐内容是基于用户提出的明确的说明。基于知识推荐并非根据评分信息或购买数据,而是利用外部知识库和约束为用户服务。
一些推荐系统结合这些不同的方面构建出混合系统。混合系统可以综合各种推荐系统的长处。
-
协同过滤模型
(基本思想-由已知评分估算未知评分)
-
基于记忆的方法(近邻思想)
基于用户-找到相似的用户对某个物品的评分,加权得到此用户对某个用户的评分。
基于物品-找到相似的物品用户的评分进而得到用户对此物品的评分
优点是容易实现,缺点是可能很难(不能)找到相似的用户对某物品的评分或者相似的物品某用户的评分,不过可以只找topk。
-
基于模型的方法
机器学习&数据挖掘,如决策树、潜在因子模型等。
近邻思想,启发式,不适用于所有场景,不过有的时候可以形式化为回归模型。Netflix大赛:潜在因子模型。有的时候,基于记忆和基于模型方法的结合体能提供非常准确的结果。
与缺失值分析密切相关,可以被看作是在大且稀疏的数据矩阵上问题的特例。
-
-
基于内容的推荐
对于每一个用户,训练文件对应于他所购买或者已评分物品的描述。
不足:1)基于关键词。仅仅提供显而易见的推荐。例如:如果用户没有消费过具有某一关键词的物品,则该物品不会被推荐。
2)有效提供对新物品的推荐,却不能有效对新用户提供推荐。
两种方法相比各有侧重。
-
基于知识的推荐系统
知识图谱&知识库。便于检索。
方法 | 概念上的目标 | 输入 |
---|---|---|
协同 | 基于协同方法根据我的同组群体的行为和评分做出推荐 | 用户评分+社区评分 |
基于内容 | 基于我过去的评分和行为根据我所喜欢的内容(属性)做出推荐 | 用户评分+物体属性 |
基于知识 | 基于我对某种内容(属性)的精确要求做推荐 | 用户要求+物体属性+领域知识 |
基于知识:如选房推荐系统,会输入很多对房子的限制(如地点、大小等)
比较:协同过滤依赖于社区。基于内容方法依赖于文本描述和用户自己的评分。基于知识系统依赖于知识库环境下与用户的交互。
-
高级&挑战
-
基于上下文推荐:
考虑时间、地理位置(如节日、地域、社交信息)对用户的影响。
-
时间敏感的推荐系统:
流行度会随着时间变化而变化。夏季和冬季的不同。
基于位置、社交信息等的推荐
社会性标签反馈。
多标准推荐系统(两个用户对一部电影有相似评分,但是喜爱的地方分别是音乐和情节,这种情况的区分)multi-criteria
-
推荐算法顶尖参赛作品:the ensemble || bellkor's pragmatic chaos
CF
基于近邻的协同过滤
(即常见常用的协同过滤)
基于用户协同过滤-聚类方法确定类别
降维方法能够同时提高近邻方法的质量和效率。潜在因子模型-即使两位用户共同评价过的物品很少,也能够计算其低维潜在向量之间的距离。
1)降维是将行或列(用户或物品)的维度,压缩为潜在因子。
2)对行空间和列空间的潜在表示是同时确定的。在不使用基于近邻的方法时,这种潜在表示被用于重建整个评分矩阵。
PCA与SVD用于降维。
基于模型的协同过滤
传统的机器学习模型可以被泛化为协同过滤场景。
机器学习分类模型,一个m×n的矩阵,前(n-1)列为特征向量(自变量),最后一列(第n列)为类变量(因变量,即分类问题中分类结果,回归问题中回归结果) 可以被当做不全矩阵缺失项。
协同过滤也可以被看作补全矩阵缺失项。但是没有明显的自变量和因变量分界。
-
决策和回归树
1、评分矩阵非常稀疏,大多数项未知。2、协同过滤中自变量和因变量没有明显的分界。
可以利用降维模型对每一个物品建立决策树。
-
基于规则的协同过滤
支持度&置信度
当使用一元评分矩阵来提供推荐时,关联规则非常有用。
用于web中,用户鼠标点击操作的稀疏事务数据。
基于用户或物品的朴素贝叶斯方法进行的协同过滤
-
许多其他的分类(或回归)方法可以被扩展来解决协同过滤问题。
最主要的挑战是原始数据是不完整的。
一些降维的方法可以用来创建完整的数据低维表示。这样一来,我们就可以把数据的低维表示看作是特征变量,每个需要被填充的列都看作是类变量。那么就可以应用任意一个已知的分类方法。这样做的主要问题是会丧失可解释性。降维之后表示的是原始列的线性组合,很难对预测结果做出解释。
为了在原始的特征空间上进行分析,一个可行的方法是在迭代过程中使用分类算法作为元算法。换言之,可以用现成的分类算法作为黑盒来基于评分已知的物品预测评分未知的物品。
:arrow_up_small:如基于神经网络,如何实现cf推荐呢?
CF推荐本质是填充确实值,如之前所说,一般可以把它泛化为分类回归问题。
对于分类回归问题,缺失的是右下角数据。
对于推荐问题,缺失的数据可能分布在矩阵各个部分。
一种解决思路(神经网络),均值中心化数据后,先填缺失部分为0,按列预测的话,就在填补缺失数据后,已知列预测每一个未知列。 也有用已知用户(填补缺失列)预测未知用户(每一行),一种改进方法是,选择缺失数较少的用户行来进行预测。