《推荐系统》--协同过滤推荐

《Recommender System An Introduction》,第二章,协同过滤推荐。

定义

协同过滤推荐方法的主要思想是,利用已有用户群过去的行为或意见预测当前用户最可能喜欢哪些东西或对哪些东西感兴趣。此类型的推荐系统当前在业界广泛使用。

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

(1)表示当前用户对物品喜欢或不喜欢程度的预测数值;

(2)n项推荐物品的列表。

基于用户的最近邻推荐

主要思想

这是一种早期方法,user-based nearest neighbor recommendation 。其主要思想简述如下:

首先,给定一个评分数据集和当前(活跃)用户的ID作为输入,找出与当前用户过去有相似偏好的其他用户,这些用户有时也被成为对等用户或最近邻;

然后,对当前用户没有见过的每个产品p,利用其近邻对p的评分计算预测值。

这种方法的假设是:(1)如果用户过去有相似的偏好,那么他们未来也会有相似的偏好;(2)用户偏好不会随时间而变化。

计算步骤

假设我们要对用户a进行推荐,计算步骤大致如下:

(1)首先,我们要计算用户a和所有其他用户的相似度;计算这个相似度时,可用算法很多,比如,改进余弦相似度、Spearman秩相关系数、均方差等,实验分析显示,对于基于用户的推荐系统来说,Pearson相关系数比其他算法更胜一筹;Pearson算法计算相似度时,其值在-1和1之间;

(2)选择近邻;我们只会选择和当前用户有正向关联的用户,降低近邻集合规模的通常方法是为用户相似度定义一个具体的最小阀值,或者将规模大小限制为一个固定值,而且只考虑k个最近邻。这两种选择近邻方法的潜在问题:

a、第一种:如果相似度阀值过高,近邻规模就会很小,这就意味着很多物品没法预测(降低覆盖率);相反,如果阀值太低,近邻规模就不会显著降低。

b、第二种:k值(近邻规模)的选择不会影响覆盖率。但是如何发现一个好k值呢?当近邻个数k太高,太多只有有限相似度的近邻会给预测带来额外的“噪声”;当k太小,预测质量也可能收到负面影响。研究发现,在大多数实际情况下,20-50个近邻似乎比较合理。

(3)预测评分;考虑最相思的k个近邻与用户a评价评分的偏差,预测用户a对所有物品的评分。

(4)优化;更好的相似度和赋权体系。

a、很多领域,有一些广受喜爱的物品,让两个用户对用争议的物品达成共识,会比对广受欢迎的物品达成共识更有价值,但Pearson这样的相似度方法无法将这种情况考虑在内。于是有人提出对物品的评分进行变换,降低对广受欢迎物品有同样看法的相对重要性,即“反用户频率(iuf)”。也有人通过“方差权重因子”解决了同样的问题,该方法提高了高方差评分值物品,也就是具有争议的物品的作用。

b、两位用户仅同时对很少的物品评分(也可能只是碰巧意见相同),或者他们是否对很多物品都意见一致。事实上,基于近邻评分的预测方法,在遇到当前用户只为非常少的共同物品评分时会出错,导致不准的预测。为此,有人提出另外一种赋权因子,即“重要性赋权”。

c、还有通过精细调整预测权重来提供推荐准确度的方法,“样本扩展”。指的是强调那些接近+1和-1的值,对于原始数值乘以一个常量来调整近邻的权值。

注:

(1)关于皮尔逊相关系数等计算公式、计算用户a对物品的评分的数学公式,都是固定而通用的,也有很多算法框架预先帮我们实现好了,这里就不对算法进行描述了。

(2)实际的生产中,优化部分考虑较少,先实现最基本的功能为主。

基于物品的最近邻推荐

主要思想

在大型电子商务网站中,用户数量巨大,物品数量较小,因此,经常采用一种不同的技术:基于物品的推荐。计算量小,在评分矩阵非常大的情况下,也能做到实时计算推荐。

基于物品算法的主要思想是利用物品间相似度,而不是用户间相似度来计算预测值。

计算步骤

基于物品的最近邻推荐,计算步骤大致如下;

(1)计算物品间的相似度,通常采用余弦相似度或者改进余弦相似度算法;在一些只具备了最基本的推荐系统,没有个性化推荐的电商推荐系统中,到这一步就完成了推荐的计算,根据物品的相似度推荐出物品,对所有的用户都是同样的推荐结果;

(2)选择近邻;

(3)预测用户对物品的评分;

(4)优化:考虑到内存要求,N个物品的相似度矩阵理论上会有N^2项,但实际项数会极低,而且还可以采取进一步的方法降低复杂度。

相对于用户相似度而言,物品相似度更稳定,这种预处理计算不会过于影响预测准确度。

关于评分

显示评分:用户之间反馈对物品的喜好;

隐式评分:通过网站日志收集用户的行为,比如电子商务网站的View/Cart/Collect/Buy等;

数据稀疏和冷启动问题

实际生产中,由于用户一般只会评价(或购买)少量商品,评分矩阵一般都非常稀疏。

这种情况下的挑战是用相对较少的有效评分得到准确的预测。直接做法就是利用用户的附加信息,比如性别、年龄、教育、兴趣等,因此相似用户集合不只是根据评分,也会根据外部信息,貌似不再是“纯粹”的协同方法了。尽管如此,在刚上线推荐服务的扩张阶段,这种技术对于获取协同方法所需的大量关键用户还是很有帮助的。

为了解决冷启动和数据稀疏问题,有人提出了基于图的方法,其主要思想是利用假定用户品味的“传递性”,并由此增强额外信息矩阵。这里就不详细学习了,实际的生产中,对于冷启动问题,可以采用其他的推荐方法来补充数据,比如基于内容的推荐。

更多推荐方法

(1)矩阵因子分解。关键词:降维、奇异值分解(SVD)、潜在语义索引(LSI)、主成分分析(Eigentaste)。

(2)关联规则挖掘。是一种在大规模交易中识别类似规则关系模式的通用技术。这种技术的典型应用是从超市里经常同时购买的商品中发掘成对或成组的商品。一个典型的规则是“如果用户买了婴儿食品,那他/她买尿布的可能性会是70%”。知道了这种关系,就可以利用这一知识进行推销和交叉销售,也可以用来设计商店的布局。

(3)基于概率分析的推荐方法。贝叶斯算法、聚类。

(4)Slope One预测方案。推荐质量不同,算法本身的复杂度也有差别。最早的基于记忆算法在实现方面相对直接,但其他方法却要以来复杂的预处理和模型更新技术。许多方法虽然可以用数学软件库,但还是需要一些深度的数学技巧(所用方法计算发杂,算法必须被优化时尤其需要这些技巧),这也许会限制这些方法的实际使用,尤其对小规模企业。Slope One预测方案是一种相对简单的推荐技术,虽然非常简单,但也能得到适当的推荐质量。其思想很简单,基于作者所谓的“热门度差异”,也就是对用户来说物品相互之间的评分差异。

(5)Google新闻个性化推荐引擎。关键词:概率潜在语义索引(PLSI)、MinHash、伴随浏览量。如果我们有一组大规模数据集且数据频繁变化,在算法、设计及并行方面需要很大力气才有可能应用现有技术和实时推荐。纯基于记忆的方法不能直接使用,对于基于模型额方法来说,必须解决模型的连续更新问题。

讨论和小结

(1)协同过滤是当今最流行的推荐系统。其流行的最重要原因是:有实际环境作为改进的基准,而且用于分析生成推荐的数据结构(用户物品评分矩阵),非常简单。其他算法,就不会这么简单,比如通过会话交互的推荐应用会在会谈中询问用户的偏好,并且还会融入一些额外的领域知识。

(2)从使用角度来看,基于物品的协同过滤能处理非常大规模的评分数据,并能生成质量良好的推荐。

(3)协同过滤不可能应用于每个领域:例如一个没有购买历史的汽车销售系统,或需要更多用户偏好细节的系统。同样,协同过滤技术要求用户社区处于某个特定规模,这意味着即使在书籍和电影领率,如果没有足够的用户或评分数据,也无法应用这些技术。

(4)当然,能够克服这些缺陷的推荐方法必然要付出代价,比如基于内容的推荐就需要进一步的开发和维护。

时间: 2024-10-10 06:02:42

《推荐系统》--协同过滤推荐的相关文章

【读书笔记】《推荐系统(recommender systems An introduction)》第二章 协同过滤推荐

输入:"用户-物品"评分矩阵 输出:(1)用户对某个物品喜欢程度的评分:(2)对于用户,n个推荐的物品列表 1. 基于用户的最近邻推荐(user-based cf) 算法基本假设:(1)如果用户过去有相似的偏好,那么他们未来也会有相似的偏好:(2)用户的偏好不随时间变化而变化 用户相似度计算:user-based cf中pearson相关系数比较好:item-based cf中余弦相似度比较好.学术界在相似度方面有较为深入的研究,例如:很多领域都存在一些所有人都喜欢的物品(热门物品),

基于用户的协同过滤推荐算法原理和实现

在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单.该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens 用于新闻过滤.一直到2000年,该算法都是推荐系统领域最著名的算法. 本文简单介绍基于用户的协同过滤算法思想以及原理,最后基于该算法实现园友的推荐,即根据你关注的人,为你推荐博客园中其他你有可能感兴趣的人. 基本思想 俗话说"物以类聚.人以群分",拿看电影这个例子来说,如果你喜欢<蝙蝠侠>.<碟中谍>.&l

Slope One 协同过滤 推荐算法

Slope one  是一个简单,效率较高的协同过滤推荐算法. Slope One 算法是由 Daniel Lemire 教授在 2005 年提出.距今已经10年.   基于如下五点被设计出来: 1. 算法容易实现和维护 2. 对新的评分应该立即给予响应 3. 查询速度要快(虽然可能以牺牲存储量为代价) 4. 对新的用户也要能给出有效的推荐 5. 精度上要有竞争力 slope one用于推荐,其特点是算法逻辑简单,实现容易,算法复杂度低. 像是刚接触推荐系统的朋友可以先采用这种算法来快速实现推荐

一个简单的协同过滤推荐算法

1.推荐系统简介 个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品. 2.推荐系统分类 2.1基于内容的推荐(Content-based Recommendation) 基于内容的推荐系统的核心思想是挖掘被推荐对象的信息.基于内容的推荐算法的前提假设是:如果用户喜欢物品a,那么用户也应该会喜欢与a类似的物品.由于笔者的目的是侧重于介绍协同过滤推荐算法,所以对基于内容的推荐算法举个简单的例子一带而过: 假设一首歌有:名称.歌手.风格.作曲人这4个属性.如果用户Alice对

协同过滤推荐(第1周)

说明:文章为初学者看推荐系统(蒋凡),结合网上资料做的笔记,不保证其正确性~ 一.首先当前的主流推荐方法有: 1.  协同过滤推荐: 2.  基于内容的推荐: 3.  基于知识的推荐: 4.  混合推荐: (注:学习过程不必特意将他们区分开,由他们的推荐公式知道他们的缺陷,混合使用) 1.  协同过滤(CF collaborative Filtering): 1-1:基于用户的最近邻推荐: 1)  (我理解的定义)从"协同过滤"四字知道其指的是:因为想到推荐,我们都是想到问用户喜欢什么

SimRank协同过滤推荐算法

在协同过滤推荐算法总结中,我们讲到了用图模型做协同过滤的方法,包括SimRank系列算法和马尔科夫链系列算法.现在我们就对SimRank算法在推荐系统的应用做一个总结. 1. SimRank推荐算法的图论基础 SimRank是基于图论的,如果用于推荐算法,则它假设用户和物品在空间中形成了一张图.而这张图是一个二部图.所谓二部图就是图中的节点可以分成两个子集,而图中任意一条边的两个端点分别来源于这两个子集.一个二部图的例子如下图.从图中也可以看出,二部图的子集内部没有边连接.对于我们的推荐算法中的

矩阵分解在协同过滤推荐算法中的应用

在协同过滤推荐算法总结中,我们讲到了用矩阵分解做协同过滤是广泛使用的方法,这里就对矩阵分解在协同过滤推荐算法中的应用做一个总结.(过年前最后一篇!祝大家新年快乐!明年的目标是写120篇机器学习,深度学习和NLP相关的文章) 1. 矩阵分解用于推荐算法要解决的问题 在推荐系统中,我们常常遇到的问题是这样的,我们有很多用户和物品,也有少部分用户对少部分物品的评分,我们希望预测目标用户对其他未评分物品的评分,进而将评分高的物品推荐给目标用户.比如下面的用户物品评分表: 用户\物品 物品1 物品2 物品

协同过滤推荐算法简述

协同过滤推荐算法是一种主流的.目前广泛应用在工业界的推荐算法. 一般,协同过滤推荐分为三种类型. 1.基于用户(user-based)的协同过滤 基于用户的协同过滤算法,主要考虑的是用户和用户之间的相似度,只要找出与目标用户相似度高的其他用户,根据相似用户喜欢的物品,预测目标用户对对应物品的评分,就可以找到评分最高的若干个物品推荐给用户. 2.基于项目(item-based)的协同过滤 基于项目的协同过滤算法,类似于基于用户的协同过滤,只是这往往是根据用户的行为判断物品的相似度(并不是根据物品的

协同过滤推荐

协同过滤推荐 基于用户的最近邻推荐 思想:给定一个评分数据集以及当前(活跃)用户ID作为输入,找出与当前用户过去有相似偏好的其他用户,这些用户有时被称为对等用户或者最近邻:然后,对当前用户没见过的每个商品p,利用其近邻对p的评分计算预测值. 潜在假设:(1)如果用户过去有相似的偏好,那么他们未来也会有相似的偏好(2)用户偏好不会随时间而变化 如何确定相似用户集,推荐系统中通用的方法是Person相关系数. Person相关系数取值+1(强正相关) 更好的相似度和赋权体系,改进余弦相似度.Spea