推荐系统(Recommendation system )介绍

 

前言

   随着电子商务的发展,网络购物成为一种趋势,当你打开某个购物网站好比淘宝、京东的时候,会看到不少给你推荐的产品,你是否以为这些推荐的产品都是你似曾相识或者正好须要的呢。这个就是如今电子商务里面的推荐系统,向客户提供商品建议和信息,模拟销售人员完成导购的过程。html

 

 

介绍

推荐系统简介算法

什么是推荐系统呢?维基百科这样解释道:推荐系统属于资讯过滤的一种应用。推荐系统可以将可能受喜爱的资讯或实物(例如:电影、电视节目、音乐、书籍、新闻、图片、网页)推荐给使用者。数据库

 推荐系统首先收集用户的历史行为数据,而后经过预处理的方法获得用户-评价矩阵,再利用机器学习领域中相关推荐技术造成对用户的个性化推荐。有的推荐系统还搜集用户对推荐结果的反馈,并根据实际的反馈信息实时调整推荐策略,产生更符合用户需求的推荐结果。网络

 

推荐系统的做用:机器学习

  1. 将网站的浏览者转为购买者或者潜在购买者(购物车);
  2. 提升购物网站的交叉销售能力和成交转化率;
  3. 提升客户对网站的忠诚度和帮助用户迅速找到产品。

 

推荐系统的表现形式:ide

  1. Browsing:客户提出对特定商品的查询要求,推荐系统根据查询要求返回高质量的推荐;
  2. Similar Item:推荐系统根据客户购物篮中的商品和客户可能感兴趣的商品推荐相似的商品;
  3. Email:推荐系统经过电子邮件的方式通知客户可能感兴趣的商品信息;
  4. Text Comments:推荐系统向客户提供其余客户对相应产品的评论信息;
  5. Average Rating:推荐系统向客户提供其余客户对相应产品的等级评价 ;
  6. Top-N:推荐系统根据客户的喜爱向客户推荐最可能吸引客户的N件产品 ;
  7. Ordered Search Results:推荐系统列出全部的搜索结果,并将搜索结果按照客户的兴趣降序排列。

 

推荐技术分类:函数

  1. 基于用户统计信息的推荐;
  2. 基于其余客户对该产品的平均评价,这种推荐系统独立于客户,全部的客户获得的推荐都是相同的(Non-Personalized Recommendation);
  3. 基于产品的属性特征(Attributed-Based Recommendation);
  4. 根据客户感兴趣的产品推荐相关的产品(Item-to-Item Correlation);
  5. 协同过滤,推荐系统根据客户与其余已经购买了商品的客户之间的相关性进行推荐(People-to-People Correlation)。

 

推荐系统的数据分类:oop

  1. explicit(显式):能准确的反应用户对物品的真实喜爱,但须要用户付出额外的代价。如:用户收藏、用户评价。
  2. Implicit(隐式):经过一些分析和处理,才能反映用户的喜爱。如:用户浏览、用户页面停留时间、访问次数。

 

 

推荐系统算法介绍:学习

   谈到推荐系统,固然离不开它的核心 —— 推荐算法。推荐算法最先在1992年就提出来了,可是发展起来是最近这些年的事情,由于互联网的爆发,有了更大的数据量能够供咱们使用,推荐算法才有了很大的用武之地。优化

 

   下面咱们分别来介绍几种经常使用的推荐算法:

基于用户统计信息的推荐:

描述

这是最为简单的一种推荐算法,它只是简单的根据系统用户的基本信息发现用户的相关程度,而后将类似用户喜好的其余物品推荐给当前用户。

 

 

系统首先根据用户的类型,好比按照年龄、性别、兴趣爱好等信息进行分类。根据用户的这些特色计算形似度和匹配度。如图,发现用户A和B的性别同样,年龄段类似,因而推荐A喜欢的商品给C。

优势:

  a 不须要历史数据,没有冷启动问题;

  b 不依赖于物品的属性,所以其余领域的问题均可无缝接入。

不足:

  算法比较粗糙,效果很难使人满意,只适合简单的推荐。

 

基于内容的推荐(Content-based Recommendation)

描述:

  基于内容的推荐是创建在产品的信息上做出推荐的,而不须要依据用户对项目的评价意见,更多地须要用机 器学习的方法从关于内容的特征描述的事例中获得用户的兴趣资料。

 

   系统首先对商品书籍的属性进行建模,图中用类型做为属性。在实际应用中,只根据类型显然过于粗糙,还须要考虑其余信息。经过类似度计算,发现书籍A和C类似度较高,由于他们都属于武侠小说类。系统还会发现用户A喜欢书籍A,由此得出结论,用户A极可能对书籍C也感兴趣。因而将书籍C推荐给A。

示例:

  下面是亚马逊中国的一个例子,未登陆用户浏览了关于Hadoop的书籍,因而在首页会出现以下相关产品的推荐:

 

 

优势:

  1. 对用户兴趣能够很好的建模,并经过对商品和用户添加标签,能够得到更好的精确度;
  2. 能为具备特殊兴趣爱好的用户进行推荐。

不足:

  1. a.  物品的属性有限,难以区分商品信息的品质;
  2. b.  物品类似度的衡量标准只考虑到了物品自己,有必定的片面性;

c . 不能为用户发现新的感兴趣的产品。

 

协同过滤推荐(Collaborative Filtering Recommendation)

背景:

   协同过滤的场景是这样的:要为某用户推荐他真正感兴趣的内容/商品,首先要找到与此用户有类似兴趣的其余用户,而后将他们感兴趣的内容推荐给该用户。协同过滤就是利用这个思想,基于其余用户对某一个内容的评价来向目标客户进行推荐。

   基于协同过滤的推荐系统能够说是从用户的角度来进行相应的自动的推荐,即用户得到的推荐是系统从购买模式或浏览行为等隐式得到的。

比较:

   这里你是否以为协同过滤推荐和基于用户统计信息的推荐以及基于内容的推荐有不少类似之处呢?下面咱们先来比较一下协同过滤推荐和上述两种推荐的区别。

ü  协同过滤推荐 VS 基于用户统计信息推荐

基于用户的协同过滤推荐机制和基于用户统计信息推荐机制都是计算用户的类似度,并基于“邻居”用户群计算推荐,但它们所不一样的是如何计算用户的类似度,基 于用户统计信息只考虑用户自己的特征,而基于用户的协同过滤机制是在用户的历史偏好的数据上计算用户的类似度,它的基本假设是,喜欢相似物品的用户 可能有相同或者类似的兴趣爱好。

 

ü  系统过滤推荐 VS 基于内容的推荐

基于项目的协同过滤推荐和基于内容的推荐其实都是基于物品类似度预测推荐,只是类似度计算的方法不同,前者是从用户历史的偏好推断,然后者是基于物品自己的属性特征信息。

描述:

协同过滤算法,顾名思义就是指用户能够齐心合力,经过不断的和网站互动,是本身的推荐列表可以不断过滤掉本身不感兴趣的物品,从而愈来愈知足本身的需求。

协同过滤算法主要有两种,一种是基于用户的协同过滤算法(UserCF),另外一种是基于物品的协同过滤算法(ItemCF)。

基于用户的协同过滤算法:

  • 介绍:

经过计算用户对商品评分之间的类似性,搜索目标用户的最近邻居,而后根据最近邻居的评分向目标用户产生推荐。 

  1. 类似度计算

经常使用的类似度计算方法有欧式距离、余弦距离算法、杰卡德类似性算法,这里主要介绍余弦距离算法。

余弦距离更多的是从方向上区分差别,而对绝对的数值不敏感,更多的用于使用用户对内容评分来区分兴趣的类似度和差别,同时修正了用户间可能存在的度量标准不统一的问题(由于余弦距离对绝对数值不敏感)。

几何中夹角余弦可用来衡量两个向量方向的差别,机器学习中借用这一律念来衡量样本向量之间的差别。

(1)在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:

 

(2)对于两个n维a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可使用相似于夹角余弦的概念来衡量它们间的类似程度。

 

  • 定义:

推荐系统中的数据源D=(U,I,R),其中U = {User1,User2,User3,…,Useri}是用户的基本集合,I = {Item1,Item2,…,Itemj}是项目集合;i*j阶矩阵R是基本用户对各项目的评分矩阵,第m行第n列的元素Rmn表明用户m对项目n的评分。

 

  • 余弦类似性

应用到推荐系统的场景是这样的:两个项目i和j被看成两个n维的向量a和b。每一个用户的评分均可以看做为n维空间上的向量,若是用户对产品没有进行评分,则将用户对该项目的评分设为0。用户间的类似性经过向量间的余弦夹角度量:

    

其中,分子为两个用户评分向量的内积,分母为两个用户向量模的乘积。

这里对余弦类似性做一下简单的回忆:

咱们能够把它们想象成空间中的两条线段,都是从原点([0, 0, ...])出发,指向不一样的方向。两条线段之间造成一个夹角,若是夹角为0度,意味着方向相同、线段重合;若是夹角为90度,意味着造成直角,方向彻底不类似;若是夹角为180度,意味着方向正好相反。所以,咱们能够经过夹角的大小,来判断向量的类似程度。夹角越小,就表明越类似。

  • 修正余弦类似性

余弦类似性未考虑到用户评分尺度问题,如在评分区间[1,5]的状况下,对用户甲来讲评分3以上就是本身喜欢的,而对于用户乙,评分4以上才是本身喜欢的。经过减去用户对项目的平均评分,修正的余弦类似性度量方法改善了以上问题。

用户a和b共同评分过的项目集合用来表示, =    (和分别表示用户a和用户b评分过的项目的集合,结果是它们的交集)。所以,用户a和b的类似性:

 

 

表示用户a对项目d的评分, 和分别表示用户a和用户b对全部商品的平均评分。

 

  • 相关类似性

  找出用户a和b共同评分过的项目集合, =    ,则用户a和b之间的类似性可经过皮尔森相关系数度量。

 

表示用户a对项目d的评分, 和分别表示用户a和用户b对商品的平均评分。

 

  1. 查找最近邻居

经过上面对目标用户类似度的计算,咱们能够找到与目标用户最类似的N个邻居的集合。

  • 选择类似度大于设定阈值的用户;
  • 选择类似度最大的前 N个用户;
  • 选择类似度大于预约阈值的 N个用户。 
  1. 产生推荐商品

 

其中sim(i,j)表示用户i与用户j之间的类似性,表示最近邻居用户j对项目d的评分,和分别表示用户i和用户j的平均评分,实质是在用户的最近邻居集NESi中查找用户,并将目标用户与查找到的用户的类似度的值做为权值,而后将邻居用户对该项目的评分与此邻居用户的全部评分的差值进行加权平均。 

经过上述方法预测出目标用户对未评价项目的评分,而后选择预测评分最高的TOP-N项推荐给目标用户。

根据前面用户计算的类似度和寻找最近邻居来计算推荐度,这里举例图示说明。

 

 

示例1:

下面是新浪网新闻热点推荐,用户在新浪网浏览了一系列的财经类新闻,根据用户类似性,即两个用户有相同的爱好作出的推荐。

 

 

基于项目的协同过滤算法:

基于项目协同过滤在于透过计算项目之间的类似性来代替使用者之间的类似性。所创建的一个基本的假设:”可以引发使用者兴趣的项目,一定与其以前评分高的项目类似”。

基于项目的协同过滤算法的关键步骤仍然是计算项目之间的类似性并选出最类似的项目,这一点与基于用户的协同过滤相似。

计算两个项目i和j之间类似性的基本思想是首先将对两个项目共同评分的用户提取出来,并将每一个项目得到的评分看做是n维用户空间的向量,再经过类似性度量公式计算二者之间的类似性。

    分离出类似的项目以后,下一步就要为目标项目预测评分,经过计算用户u对与项目i类似的项目集合的总评价分值来计算用户u对项目i的预期。

 

这里咱们主要来关注一下基于用户的协同过滤和基于项目的协同过滤算法的区别:

a)         基于用户的协同过滤是推荐用户所在兴趣小组中的热点,更注重社会化;好比:如上面示例1所示,新浪网给目标客户推荐其余有相同或类似兴趣爱好的人关注的新闻,这样就保证了新闻门户网站须要的时效性,给用户最新最及时最感兴趣的新闻信息。

b)         基于项目的协同过滤算法则是根据用户历史行为推荐类似物品,更注重个性化。好比购物网站,用户的兴趣爱好通常比较固定,网站通常是给目标用户推荐他所感兴趣领域的产品。可参考示例2.

 

示例2:

下面是淘宝网站的例子,“猜你喜欢”就是将相同类型的东西推荐给用户。

 

再来看京东网站的例子。用户浏览书籍《Hadoop实战》

 

 

而后下面就会产生“热门推荐”,即邻居项目的产生。

 

优势:

  1.  可以过滤难以进行机器自动内容分析的信息,如艺术品,音乐等。 
  2. 共享其余人的经验,避免了内容分析的不彻底和不精确,而且可以基于一些复杂的,难以表述的概念(如信息质量、我的品味)进行过滤。
  3.  有推荐新信息的能力。能够发现内容上彻底不类似的信息,用户对推荐信息的内容事先是预料不到的。这也是协同过滤和基于内容的过滤一个较大的差异,基于内容的过滤推荐不少都是用户原本就熟悉的内容,而协同过滤能够发现用户潜在的但本身还没有发现的兴趣偏好。
  4.  可以有效的使用其余类似用户的反馈信息,较少用户的反馈量,加快个性化学习的速度。

 

不足:

  1. 稀疏性问题。大多数用户只评价了部分项目,这样致使用户-评分矩阵十分稀疏,这样不利于推荐系统为用户推荐信息;
  2. 冷启动问题。新产品没有任何用户的评分,在协同过滤中是没法推荐的。新用户没有历史信息,也是没法推荐的。
  3. 同一性问题。对于那些内容相同可是名称不一样的项目,协同过滤是没法发现它们内在的联系。

 

基于关联规则的推荐(Association Rule-based Recommendation)

描述:

关联规则算法首先由Agrawal和Swami提出,最先的成型为经典的Apriori算法。它的基本思想是:使用一种称做逐层搜索的迭代方法,k项集用于探索(k+1)项集。首先,经过扫描事务(交易)记录,找出全部的频繁1项集,该集合记作L1,而后利用L1找频繁2项集的集合L2,L2找L3,如此下去,直到不能再找到任何频繁k项集。最后再在全部的频繁集中找出强规则,即产生用户感兴趣的关联规则。

关于这个算法有一个很是有名的故事:"尿布和啤酒":美国的妇女们常常会嘱咐她们的丈夫下班后为孩子买尿布,而丈夫在买完尿布后又要顺手买回本身爱喝的啤酒,所以啤酒和尿布在一块儿被购买的机会不少。这个举措使尿布和啤酒的销量双双增长,并一直为众商家所津津乐道。

 

概念介绍:

  • 支持度:S(Support) 事物包含A B = P(x),表示事件x出现的几率;
  • 置信度:C(Confidence) 在A发生的事件中同时发生B的几率 P(AB)/P(A)  = P(B|A);
  • 频繁项集 :(Frequent Itemset)支持度大于等于特定的最小支持度(Minimum Support/minsup)的项集。表示为L k。
  • 链接步:L(k-1) 与其自身进行链接,产生候选项集 C(k) 。 L(k-1) 中某个元素与其中另外一个元素能够执行链接操做的前提是它们中有(k-2) 个项是相同的。也就是只有一个项是不一样的。如:项集 {I1,I2} 与 {I1,I5} 链接以后产生的项集是 {I1,I2,I5} ,而项集 {I1,I2} 与 {I3,I4}不能进行链接操做。
  • 剪枝步:C k是L k的超集,也就是说,C k的成员多是也可能不是频繁的。经过扫描全部的事务(交易),肯定C k中每一个候选的计数,判断是否小于最小支持度计数,若是不是,则认为该候选是频繁的。为了压缩C k,能够利用Apriori性质:任一频繁项集的全部非空子集也必须是频繁的,反之,若是某个候选的非空子集不是频繁的,那么该候选确定不是频繁的,从而能够将其从C k中删除。

 

下面咱们经过一个例子来解释:

 

  • Apriori算法的缺点:

(1)由频繁k-1项集进行自链接生成的候选频繁k项集数量巨大。

(2)在验证候选频繁k项集的时候须要对整个数据库进行扫描,很是耗时。

 

  • Apriori算法的优化 —— Fp-tree 算法。这里简单介绍下优化思想:

以树形的形式来展现、表达数据的形态;能够理解为水在不一样河流分支的流动过程;

  • 步骤:

1)         扫描原始项目集;

2)         排列数据; 

3)         建立ROOT节点;

4)         按照排列的数据进行元素的流动;

5)         节点+1;

 

具体的Fp-tree算法的实现能够查看:

http://www.cnblogs.com/zhangchaoyang/articles/2198946.html

 

优势:

1)     能发现新兴趣点;

2)     不要领域知识。

不足:

1)     算法的第一步关联规则的发现最为关键且最耗时,是算法的瓶颈,但能够离线进行。

2)     其次,商品名称的同义性问题也是关联规则的一个难点。

 

其余推荐算法介绍:

除了上面比较详细介绍的集中推荐算法,这里再简单介绍一下其余几种算法。

基于效用推荐

基于效用的推荐(Utility-based Recommendation)是创建在对用户使用项目的效用状况上计算的,其核心问题是怎么样为每个用户去建立一个效用函数,所以,用户资料模型很大程度上是由系统所采用的效用函数决定的。基于效用推荐的好处是它能把非产品的属性,如提供商的可靠性(Vendor Reliability)和产品的可得性(Product Availability)等考虑到效用计算中。

 

基于知识推荐

基于知识的推荐(Knowledge-based Recommendation)在某种程度是能够当作是一种推理(Inference)技术,它不是创建在用户须要和偏好基础上推荐的。基于知识的方法因它们所用的功能知识不一样而有明显区别。效用知识(Functional Knowledge)是一种关于一个项目如何知足某一特定用户的知识,所以能解释须要和推荐的关系,因此用户资料能够是任何能支持推理的知识结构,它能够是用户已经规范化的查询,也能够是一个更详细的用户须要的表示。

 

组合推荐

因为各类推荐方法都有优缺点,因此在实际中,组合推荐(Hybrid Recommendation)常常被采用。研究和应用最多的是内容推荐和协同过滤推荐的组合。最简单的作法就是分别用基于内容的方法和协同过滤推荐方法去产生一个推荐预测结果,而后用某方法组合其结果。尽管从理论上有不少种推荐组合方法,但在某一具体问题中并不见得都有效,组合推荐一个最重要原则就是经过组合后要能避免或弥补各自推荐技术的弱点。

在组合方式上,有研究人员提出了七种组合思路:
1)加权(Weight):加权多种推荐技术结果。
2)变换(Switch):根据问题背景和实际状况或要求决定变换采用不一样的推荐技术。
3)混合(Mixed):同时采用多种推荐技术给出多种推荐结果为用户提供参考。
4)特征组合(Feature combination):组合来自不一样推荐数据源的特征被另外一种推荐算法所采用。
5)层叠(Cascade):先用一种推荐技术产生一种粗糙的推荐结果,第二种推荐技术在此推荐结果的基础上进一步做出更精确的推荐。
6)特征扩充(Feature augmentation):一种技术产生附加的特征信息嵌入到另外一种推荐技术的特征输入中。
7)元级别(Meta-level):用一种推荐方法产生的模型做为另外一种推荐方法的输入。

 

推荐系统的将来与发展方向:

增长推荐的多维性:

当前的大部分研究都是基于对象-用户的二维度量空间的,未考虑相关信息。然而,用户对对象的评价和选择经常由不少环境因素来决定,好比某个对象在特定时段很流行,用户在某个地方浏览对象的时候偏向于选择某类对象等。推荐系统除了融合了计算机科学的不少领域,它还融合了心理学、社会学。

 

个性化搜索结果会把搜索引擎变成上下文感知的推荐系统:

推荐系统是一个临界线,能够说这是个性化搜索。它能够发现用户“如今”所关心的事,好比系统发现你以前买过鞋,如今在搜索衬衫,那你如今实际上是想干什么?推荐系统能够根据你是想和朋友一块儿去看电影,仍是想和家人呆在一块儿,作出不一样推荐。

增长向用户解释的推荐结果

根据用户的知识库,能够向用户作出更好的解释,向它们说明是什么样的因素在帮助系统作出这样的推荐。利用这样的系统,使用者确实体验更好了,他们对于系统的信任程度也提升了。

 

固然,推荐系统的发展方向和研究热点还有不少。随着对推荐系统功能需求特别是实时性及准确性上的需求水平的不断提升,其实现技术也都面临着严峻的挑战,须要不断的完善。

 

参考:

  1. http://www.ra.ethz.ch/cdstore/www10/papers/pdf/p519.pdf
  2. http://www.cserzs.com/item-based-collaborative-filtering-algorithm
  3. http://blog.csdn.net/johnny710vip/article/details/23703335
  4. http://baike.baidu.com/link?url=ORibbQq0rIvUxI6NP6rjcRPdxAXxLidEAeD1Um4U4GxkBwGqljo3Ge7bJG14c8z0zjqEb_fmcq3QizUqqjLRuq
  5. Jannach D, Zanker M. 推荐系统[M]. 9787115310699. 人民邮电出版社 , 2013.

 

 

   该文章同时在CSDN发表   http://blog.csdn.net/chndata/article/details/43192911

相关文章
相关标签/搜索