推荐引擎的几种算法总结(转)

标签: 推荐引擎 算法 | 发表时间:2013-09-10 17:46 | 作者:
出处:http://eric-gcm.iteye.com

1、Item based collective filtering 
这个算法是cf中的一种,也是当今很多大型网站都在采用的核心算法之一。 
对于商城网站(以Amazon为代表,当然也包括京东那种具有搞笑特色的推荐系统在内),影视类推荐,图书类推荐,音乐类推荐系统来说,item的增长速度远不如user的增长速度,而且item之间的相似性远不如user之间的相似性那么敏感,所以可以在离线系统中将item的相似度矩阵计算好,以供线上可以近乎即时地进行推荐。因为这种方法靠的是item之间的相关性进行推荐,所以推荐的item一般都和喜欢的item内容或者特性高度相似,很难推荐出用户潜在喜欢的item,多样性也比较差。 

2、user based collective filtering 
这个是cf中的另外一种,它的主要特色是可以发现和用户具有同样taste的人,有句俗话叫做观其友知其人,大概也是这个道理吧。 
找到用户的相似用户,通过相似用户喜欢的item推荐给该用户。因为用户的相似用户群还是比较敏感的,所以要频繁地计算出用户的相似用户矩阵,这样的话运算量会非常大。而且这个算法往往推荐出来的item很多都是大家都喜欢的比较hot的item,有的时候它提供的结果并不是个性化,反而成了大众化的推荐了。用这种算法的web应用一般都是item更新频繁,比如提供资讯类服务的应用(以“指阅”为代表的),或者笑话类推荐(以“冷笑话精选”为代表的)。当然这种算法的一个中间产物-----用户相似度矩阵是一个很有用的东西,社交类的网站可以利用这个中间产物来为用户提供相同品位的好友推荐。 

3、content based 
基于内容的推荐,很大程度上是在进行文本挖掘。web应用提供的内容或者爬取的内容在推给用户之前可以做一些挖掘,比如资讯类的应用,将抓取到的资讯,通过文本分析那一套算法提取出每篇资讯的关键词,以及统计频次和逆向文档频率来聚类或者笨一点地话计算出资讯的相似度矩阵,即共同的key words越多,两篇资讯的相似度越高。当你的用户很少很少,你的显式反馈数据非常非常少的时候,你可以根据用户的浏览或者搜索等等各种行为,来给用户进行推荐。再猥琐一点的话,你可以在用户刚刚注册好你的应用的时候,给他一些提问,比如让他输入一些感兴趣的话题啊,或者对以前看过的电影打分什么的。(当然这些电影都是你从各个簇中随机选取的,要足够多样性)这个算法它好就好在,不需要拿到用户--项目的评分矩阵,只需要知道用户喜欢什么,就可以很快速地推荐给用户十分相关的item。这个算法需要每天都要根据你抓取的资讯,不断地计算item之间的相似性。这个算法有个好处在于可以从容应对上面的两个算法其实都很难应对的问题,就是如果你想推出一个新的item,因为没有一个人有对这个new item的评分,所以上述的两个算法不可能推荐新的东西给你,但你可以用基于内容的算法将新的item计算出它属于哪个类,然后时不时地推出你的新item,这点对于商城尤其重要。 

4、slope one 
推荐系统的最最本质的事情就是把user-item rating矩阵中的空白填好,看穿这个本质以后,你可能会觉得问题一下子简单多了,填格子啊?填格子谁不会啊。因此很多高效加搞笑的算法就出来了。slope one就是其中,说实话,这个算法我自己没有写过,但是看到这个算法怎么实现的,我就觉得应该很好做,而且算起来会很快,但结果肯定不会特别理想。 

Slope One的基本概念很简单, 例子1, 用户X, Y和A都对Item1打了分. 同时用户X,Y还对Item2打了分, 用户A对Item2可能会打多少分呢? 
User Rating to Item 1 Rating to Item 2 
X 5 3 
Y 4 3 
A 4 ? 

根据SlopeOne算法, 应该是:4 - ((5-3) + (4-3))/2 = 2.5. 

当然这个只是个算例简单地说明下原理,当user和item都很多的时候,你可以用加权的办法来做。 
为什么我会感觉这个算法的效果会不理想呢? 
因为,这个算法总是把你的口味和大众的平均口味作对等,推荐出来的东西很难是非常个性化的。很容易让很多用户的推荐结果趋向一致,也就是大数的平均值,也即大众的平均口味。 

5、svd 
svd的全称是:Singular Value Decomposition,翻译过来是奇异值分解,是一种矩阵分解的方法。其实,这个方法是提取一般实矩阵“特征值”的算法,(这里特征值加引号是因为,特征值是针对方阵来定义的,而一般的m*n的实矩阵是没有特征值的。)其实,矩阵就是一个线性变换的表示方法,因为一个向量乘一个矩阵的结果是一个向量,第一个向量通过线性变换来变成第二个向量。线性变换有许多变换方向,比如你可以对一个图像矩阵做伸缩同时也做平移。那么特征值和特征向量又是什么?一个特征向量就是表示其中的一个变换方向,而对应的特征值则表示这个变换方向对于整个线性变换有多么重要。 
书归正传,那么奇异值又是什么?我觉得奇异值就是特征值从方阵往一般实矩阵的一个推广。你将一个m*n的实矩阵和它的转置相乘,就会得到一个方阵,然后对这个方阵做特征值分解,得到的特征值就是所谓的奇异值的平方。我的意思是说,某种意义上,可以讲奇异值和特征值理解为一回事。 
那么拿到奇异值又会有什么用呢?拿到奇异值后,我们就可以抓到主要的成分,丢掉次要和非常次要的成分进行分析。也就是说,我们可以对原来的庞大的常常又非常稀疏的矩阵进行降维和分解,而分解后得到的矩阵都是稠密矩阵。最终我们会得到一个表示user特性的矩阵和一个表示item特性的矩阵。拿到这些数据之后,我们就可以进行推荐了,而且也可以很容易地进行聚类分析。 
这个算法的好处在于,可以解决rating矩阵的稀疏性问题,同时可以降低矩阵的维度,提高运算速度。但它的缺点是付出的空间代价太大。在做svd分解时,你需要先把一个大的rating矩阵分解成三个大的矩阵,这三个矩阵需要存在计算机内存中,然后才能进行降维。 
其实,svd这个方法的思路和PCA(主成分分析法)很像,抓住主要矛盾,忽略次要矛盾。分解降维后的矩阵非常约等于原来的矩阵。 

6、聚类算法 
这里用到的聚类算法,是用来降低维度以及为并行计算作准备的。 
拿到rating矩阵之后,可以通过这些评分将用户自然地聚成几簇,然后用上述的算法对各个簇做推荐算法并行计算,充分地利用好所有计算资源。 
当然你也可以在svd分解之后,拿到user和item矩阵之后,对这两个矩阵分别作聚类分析,你可以得到user的簇以及item的簇。这样的结果会非常有意义,你可以作好友推荐,相似item推荐等等。 
在基于内容的算法中,因为很多资讯之间并不是那么的相关,把他们都相互计算相似度,会得到很多的0,所以没有必要。因此可以在计算之前,对整个item做个聚类,然后分别对各簇来做相似度计算。 
聚类算法中,我用过性能最好的也是最简单的就是k-means。 

7、组合算法 
任何一个算法都有它独特的优势和固有的缺陷,因此单用一个算法的web应用很少,往往是将各种算法组合起来用。 
一种方式是:将多种算法计算出来的结果,加权之后排序推荐给用户。 
一种方式是:将多种算法计算出来的结果,各取前几个推荐给用户,这样做的好处是结果很丰富多彩。 
一种方式是:用svd算法填充后的矩阵作为输入,用普通cf做计算来输出,然后排序推荐。这种叫做层次推荐,可以得到两种方法的好处。 
一种方式是:对新用户做基于内容的推荐,因为新用户没有任何评分数据,对老用户用cf来做。 
。。。。 
组合的方式太多了。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [推荐引擎 算法] 推荐:

推荐引擎的几种算法总结(转)

- -
这个算法是cf中的一种,也是当今很多大型网站都在采用的核心算法之一. 对于商城网站(以Amazon为代表,当然也包括京东那种具有搞笑特色的推荐系统在内),影视类推荐,图书类推荐,音乐类推荐系统来说,item的增长速度远不如user的增长速度,而且item之间的相似性远不如user之间的相似性那么敏感,所以可以在离线系统中将item的相似度矩阵计算好,以供线上可以近乎即时地进行推荐.

大数据-推荐引擎

- - 人月神话的BLOG
推荐引擎在当前电商平台用的相当多,本文简单理解下常见的几张推荐方式. 首先说明下大数据用户画像可以用于针对性营销和单品推荐,但是即使没做用户画像也可以进行商品推荐. 推荐引擎是不是为不同的用户推荐不同的数据根据这个指标,推荐引擎可以分为基于大众行为的推荐引擎和个性化推荐引擎. 大众行为的推荐引擎,对每个用户都给出同样的推荐,这些推荐可以是静态的由系统管理员人工设定的,或者基于系统所有用户的反馈统计计算出的当下比较流行的物品.

初识推荐机制、推荐引擎

- 山河之外 - 互联网的那点事...
随着互联网的发展 估计大多数的产品都会遇到推荐机制的策划,作为互联网产品人员也需要研究一下推荐机制的核心算法,这篇文章是我看到的言简意赅讲了一些基础的推荐机制的文章,转过来分享给大家. 如今已经进入了一个数据爆炸的时代,随着 Web 2.0 的发展, Web 已经变成数据分享的平台,那么,如何让人们在海量的数据中想要找到他们需要的信息将变得越来越难.

从Web 2.0到推荐引擎2.0

- Race forward! - 学而时嘻之
(《新知客》,2010年9月). 互联网应用的新概念似乎总是层出不穷,然而相对于2005年前后中国一下子冒出来的一大批 web 2.0 网站和最近几年出现的“云计算”,此时此刻的互联网业界似乎有点沉闷. 人们开始谈论,互联网下一个有趣的事情是什么. 百姓网 CEO 王建硕,最近在《中国企业家》杂志发表文章《2011年注定是中国互联网第三春》,提出一个五年周期理论,认为每隔五年左右就会有一批人出来创业,就会有一批风险投资周转完毕转而支持新的项目,这样经过这两年的沉闷,2011年必将有新东西爆发.

协同过滤和推荐引擎

- - 刘思喆@贝吉塔行星
推荐系统在个性化领域有着广泛的应用,从技术上讲涉及概率、抽样、最优化、机器学习、数据挖掘、搜索引擎、自然语言处理等多个领域. 东西太多,我也不准备写连载,今天仅从基本算法这个很小的切入点来聊聊推荐引擎的原理. 推荐引擎(系统)从不同的角度看有不同的划分,比如:. 按照数据的分类:协同过滤、内容过滤、社会化过滤.

推荐引擎:信息逆流

- - 《商业价值》杂志
信息时代用户链接内容的方式将再次产生深刻变化,而这一变化的驱动者,正是推荐引擎技术. 如果回到20世纪80年代,面对一台当时的电脑,你很可能会不知所措. 原因很简单,当时要访问电脑内的内容——不管是软件或者游戏,你起码必须掌握基本的Dos命令. 换句话说,当时用户与内容链接的方式,是输入大量电脑“听得懂”的命令,再让电脑将其执行出来.

Spotify推荐引擎Discover Weekly的故事

- - Solidot
Spotify的软件工程师Edward Newett说,赋权自下而上的创新,奇迹将会发生. 他在上周举行的@Scale 会议上分享了开发Discover Weekly推荐引擎的故事. Discover Weekly设计帮助用户发现他们从未听过的新音乐,于一年前上线,至今已积累了4000多万的用户. Newett最初的工作是开发个性化网页,其中包含了向用户推荐他们可能感兴趣的专辑的系统.

探索推荐引擎内部的秘密:推荐引擎初探

- adow - 互联网的那点事...
“探索推荐引擎内部的秘密”系列将带领读者从浅入深的学习探索推荐引擎的机制,实现方法,其中还涉及一些基本的优化方法,例如聚类和分类的应用. 同时在理论讲解的基础上,还会结合 Apache Mahout 介绍如何在大规模数据上实现各种推荐策略,进行策略优化,构建高效的推荐引擎的方法. 本文作为这个系列的第一篇文章,将深入介绍推荐引擎的工作原理,和其中涉及的各种推荐机制,以及它们各自的优缺点和适用场景,帮助用户清楚的了解和快速构建适合自己的推荐引擎.

探索推荐引擎内部的秘密: 第 1 部分:推荐引擎初探

- JingSQ - IBM developerWorks 中国 : 文档库
随着 Web 技术的发展,使得内容的创建和分享变得越来越容易. 每天都有大量的图片、博客、视频发布到网上. 信息的极度爆炸使得人们找到他们需要的信息将变得越来越难. 传统的搜索技术是一个相对简单的帮助人们找到信息的工具,也广泛的被人们所使用,但搜索引擎并不能完全满足用户对信息发现的需求,原因一是用户很难用恰当的关键词描述自己的需求,二是基于关键词的信息检索在很多情况下是不够的.

推荐《探索推荐引擎的秘密》系列

- linyehui - Tinyfool的Blog
最近推荐引擎成为显学,主要原因应该是电子商务的蓬勃发展. 头些日子和图灵的两位老师吃饭,我甚至了解到因为推荐引擎以及机器学习领域的日渐火爆,图灵出的线性代数最近销量都很好,更别提大家现在到处都可以看到这个领域相关的招聘. 我最近的创业项目iApp4Me其实也是一个推荐引擎的应用,我关注这个领域有很长一段时间了.