《推荐系统》读书笔记——协同过滤推荐

协同过滤推荐的主要思想:利用已有用户群过去的行为或意见预测当前用户最可能喜欢哪些东西或对哪些东西感兴趣。

此类的系统在在线零售系统中成为对用户需求个性化定制内容的工具。

纯粹的协同过滤方法的输入数据只有给定的用户—物品评分矩阵,输出数据一般有以下几种类型:

1. 表示当前用户对物品喜欢或者不喜欢程度的预测数值,
2. n项推荐物品的列表。当然,这个TOP-N列表不会包含用户已经买过的物品。

推荐方法:

基于用户的最近邻推荐

这是一种早期的推荐系统,它的主要思想:首先,给定一个评分数据集和当前用户的id作为输入,找出与当前用户过去有相似偏好的其他用户,这些用户有时也被称为对等用户或最近邻;然后对当前用户没有见过的每个物品p,利用其近邻对p的评分计算预测值。这种方法的假设是:

1. 如果用户过去有相同的偏好,则他们未来也有相似的偏好
2. 用户偏好不会随着时间变化而变化。

书中以Alice购物为例,利用Pearson系数来评估用户的相似性(如何计算,我会在单独一篇博文中讲述)。

在实际应用中,由于评分数据集非常大,我们需要考虑计算的复杂度。

此外,评分矩阵通常十分稀疏,每个用户只对所有有效的物品的小部分进行评分。

最后,我们给新用户推荐什么,如何处理没有评分的新物品。这些问题都要深入讨论。

其他用于评估用户相似度的方法:改进余弦相似度,spearman相关系数和均方差。

然而实验分析显示,对于基于用户的推荐系统,pearson的相关系数比其他的方法更为优秀。不过,后来发现的基于物品的推荐技术,利用余弦相似度方法比pearson系数推荐效果更好。

事实上,基于近邻的预测方法在遇到当前用户只有非常少的共同的物品评分时会出错,导致不准的预测。

于是,有专家学者就提出了重要性赋权的方法——基于线性化简相似度权值的方法。尽管简单,但是在评分物品少于50个的时候,准确预测的效率提升非常显著。但是还有问题需要解决:赋权方案和启发式决定阈值在现实中是否有效;评分数据集更小时,我们不能期望找到很多有50个共同评分物品的用户。

能通过精细调整预测权重来提高准确度的方法是样本拓展。它指的是强调那些接近1和-1的值,对原始数值乘以一个常量p来调整近邻的权值。

选择近邻
为了减小计算量并且保证计算预测值,我们只包括了那些与当前用户有正向关联的用户。
降低近邻集合规模的方法通常是为用户相似度定义一个具体的最小阈值,或者将规模大小限制为一个固定值,而且只考虑k个近邻。

但是这两种方法有潜在的问题:如果阈值过高,那么规模就会小很多,意味着很多商品无法预测。相反,阈值过低,那么规模就不会显著降低。

k取多少,是个问题,MOVIE LENS上的测试显示,在大多数情况下,20到50个近邻似乎比较合理。

基于物品的最近邻推荐

在电子商务网站,大多采用的是基于物品的推荐。

这种推荐,比较适合做线下的预处理。因此,即使评分数据矩阵非常大,也能做到实时计算的推荐。

基于物品的推荐算法的思想是:利用物品之间的相似度来计算预测值。

还是以Alice购物为例,书中介绍的是利用余弦相似度来进行物品的相似度的计算。(如何利用余弦相似度来计算,我也会另开一篇来进行介绍说明)

不管是基于物品还是基于用户,当数量达到一定程度的时候,计算的实时性是达不到的。需要对数据进行预处理。

为了保证性能与精度,通常采用离线预计算数据。

思想:实现构造一个物品相似度矩阵,描述物品两两之间的相似度。运行时,通过确定与物品p最相似的物品并计算用户u对这些邻近物品的加权总和来得到用户u对物品的评分。近邻数量受限于当前用户评过分的物品个数。

除开这种模型上的预处理之外,还可以仅利用评分矩阵中的某一部分数据来降低复杂度。一种基本技术是二次抽样,这种技术可以随机选取数据的子集,或者忽略那些仅有少量评分或非常热门物品的用户记录。

一般地,可以利用这些技术来加速计算,但是由于用到的信息少了,系统做出的精准预判的能力可能会下降。

基于协同过滤的评分方法

显式收集用户的观点:通常是5分或者7分制。通过记录用户的打分,来收集用户的评分数据集。

隐式收集用户的观点:跟踪用户的浏览记录,收集用户的浏览日志,对用户的浏览日志进行分析,推荐可能效果更为显著。

数据稀疏与冷启动的问题

实际应用中,可能获取的用户评分数据十分少,因此。评分矩阵就是一个稀疏矩阵。这种情况下的挑战就是利用较少的数据来获得精准的预测。直接做法,利用用户的附加信息(年龄,性别,教育程度兴趣等)来辅助分类用户,这是借助外界的信息。

解决数据稀疏与冷启动的问题的一种方法——基于图的方法(后面单独拿出来讲解)
主要思想:利用假定用户品味的传递性,并且是不变的(书中没有提到),并由此增强额外的信息矩阵。

矩阵因子分解

Netflix的竞赛表明高等矩阵因子分解方法对提高推荐系统的预测准确率有很大的帮助。
简单来说,推荐系统使用矩阵因子分解方法来从评分模式抽取一组潜在的因子,并通过这些因子向量来描述用户和物品。在电影领域,这些自动识别的因子,很有可能对应一部电影的常见标签,也有可能是无法解释的。当当前用户和物品在这些因子相似时,就会推荐物品。

在信息检索领域,SVD被用于发现文档中的潜在因子;这种潜在语义分析技术也被成为潜在语义索引。

关联规则挖掘(后面单独拿出来详细介绍)

关联规则挖掘是一种在大规模交易中识别类似规则关系的技术。

典型案例:啤酒与尿布。

就是通过一系列购物篮分析,分析出购物篮里面的可能同时购买的商品。

推荐系统,也可以根据这个来做一个类似商品的推荐。如捆绑销售。

在实际生活中,如果去一趟超市,可能发现商品并不是按照这种购物篮的方式捆绑,而是可能约有可能一起买的商品,反而相隔了一定的距离,这也是超市为了让人待在超市里更久,增加销量。

基于概率分析的推荐方法

还有一种预测用户会对某个物品进行评分的方法是利用概率论已有的形式体系。

用概率方法实现协同过滤,最初简单的实现是将预测问题看作分类问题,通常可以描述为“将一个对象分配给几个事先定义好的类别”的任务。

如邮件的推荐(将其划分为正常邮件和垃圾邮件),里面用到的贝叶斯分类器,可以将经过训练的数据来拟合邮件分类,来判断一封邮件是否是正常邮件。