随着电子商务的发展,网络购物成为一种趋势,当你打开某个购物网站好比淘宝、京东的时候,会看到不少给你推荐的产品,你是否以为这些推荐的产品都是你似曾相识或者正好须要的呢。这个就是如今电子商务里面的推荐系统,向客户提供商品建议和信息,模拟销售人员完成导购的过程。html
推荐系统简介算法
什么是推荐系统呢?维基百科这样解释道:推荐系统属于资讯过滤的一种应用。推荐系统可以将可能受喜爱的资讯或实物(例如:电影、电视节目、音乐、书籍、新闻、图片、网页)推荐给使用者。数据库
推荐系统首先收集用户的历史行为数据,而后经过预处理的方法获得用户-评价矩阵,再利用机器学习领域中相关推荐技术造成对用户的个性化推荐。有的推荐系统还搜集用户对推荐结果的反馈,并根据实际的反馈信息实时调整推荐策略,产生更符合用户需求的推荐结果。网络
推荐系统的做用:机器学习
推荐系统的表现形式:ide
推荐技术分类:函数
推荐系统的数据分类:oop
推荐系统算法介绍:学习
谈到推荐系统,固然离不开它的核心 —— 推荐算法。推荐算法最先在1992年就提出来了,可是发展起来是最近这些年的事情,由于互联网的爆发,有了更大的数据量能够供咱们使用,推荐算法才有了很大的用武之地。优化
下面咱们分别来介绍几种经常使用的推荐算法:
基于用户统计信息的推荐:
描述
这是最为简单的一种推荐算法,它只是简单的根据系统用户的基本信息发现用户的相关程度,而后将类似用户喜好的其余物品推荐给当前用户。
系统首先根据用户的类型,好比按照年龄、性别、兴趣爱好等信息进行分类。根据用户的这些特色计算形似度和匹配度。如图,发现用户A和B的性别同样,年龄段类似,因而推荐A喜欢的商品给C。
优势:
a 不须要历史数据,没有冷启动问题;
b 不依赖于物品的属性,所以其余领域的问题均可无缝接入。
不足:
算法比较粗糙,效果很难使人满意,只适合简单的推荐。
基于内容的推荐(Content-based Recommendation)
描述:
基于内容的推荐是创建在产品的信息上做出推荐的,而不须要依据用户对项目的评价意见,更多地须要用机 器学习的方法从关于内容的特征描述的事例中获得用户的兴趣资料。
系统首先对商品书籍的属性进行建模,图中用类型做为属性。在实际应用中,只根据类型显然过于粗糙,还须要考虑其余信息。经过类似度计算,发现书籍A和C类似度较高,由于他们都属于武侠小说类。系统还会发现用户A喜欢书籍A,由此得出结论,用户A极可能对书籍C也感兴趣。因而将书籍C推荐给A。
示例:
下面是亚马逊中国的一个例子,未登陆用户浏览了关于Hadoop的书籍,因而在首页会出现以下相关产品的推荐:
优势:
不足:
c . 不能为用户发现新的感兴趣的产品。
协同过滤推荐(Collaborative Filtering Recommendation)
背景:
协同过滤的场景是这样的:要为某用户推荐他真正感兴趣的内容/商品,首先要找到与此用户有类似兴趣的其余用户,而后将他们感兴趣的内容推荐给该用户。协同过滤就是利用这个思想,基于其余用户对某一个内容的评价来向目标客户进行推荐。
基于协同过滤的推荐系统能够说是从用户的角度来进行相应的自动的推荐,即用户得到的推荐是系统从购买模式或浏览行为等隐式得到的。
比较:
这里你是否以为协同过滤推荐和基于用户统计信息的推荐以及基于内容的推荐有不少类似之处呢?下面咱们先来比较一下协同过滤推荐和上述两种推荐的区别。
ü 协同过滤推荐 VS 基于用户统计信息推荐
基于用户的协同过滤推荐机制和基于用户统计信息推荐机制都是计算用户的类似度,并基于“邻居”用户群计算推荐,但它们所不一样的是如何计算用户的类似度,基 于用户统计信息只考虑用户自己的特征,而基于用户的协同过滤机制是在用户的历史偏好的数据上计算用户的类似度,它的基本假设是,喜欢相似物品的用户 可能有相同或者类似的兴趣爱好。
ü 系统过滤推荐 VS 基于内容的推荐
基于项目的协同过滤推荐和基于内容的推荐其实都是基于物品类似度预测推荐,只是类似度计算的方法不同,前者是从用户历史的偏好推断,然后者是基于物品自己的属性特征信息。
描述:
协同过滤算法,顾名思义就是指用户能够齐心合力,经过不断的和网站互动,是本身的推荐列表可以不断过滤掉本身不感兴趣的物品,从而愈来愈知足本身的需求。
协同过滤算法主要有两种,一种是基于用户的协同过滤算法(UserCF),另外一种是基于物品的协同过滤算法(ItemCF)。
基于用户的协同过滤算法:
经过计算用户对商品评分之间的类似性,搜索目标用户的最近邻居,而后根据最近邻居的评分向目标用户产生推荐。
经常使用的类似度计算方法有欧式距离、余弦距离算法、杰卡德类似性算法,这里主要介绍余弦距离算法。
余弦距离更多的是从方向上区分差别,而对绝对的数值不敏感,更多的用于使用用户对内容评分来区分兴趣的类似度和差别,同时修正了用户间可能存在的度量标准不统一的问题(由于余弦距离对绝对数值不敏感)。
几何中夹角余弦可用来衡量两个向量方向的差别,机器学习中借用这一律念来衡量样本向量之间的差别。
(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对商品的平均评分。
经过上面对目标用户类似度的计算,咱们能够找到与目标用户最类似的N个邻居的集合。
其中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实战》
而后下面就会产生“热门推荐”,即邻居项目的产生。
优势:
不足:
基于关联规则的推荐(Association Rule-based Recommendation)
描述:
关联规则算法首先由Agrawal和Swami提出,最先的成型为经典的Apriori算法。它的基本思想是:使用一种称做逐层搜索的迭代方法,k项集用于探索(k+1)项集。首先,经过扫描事务(交易)记录,找出全部的频繁1项集,该集合记作L1,而后利用L1找频繁2项集的集合L2,L2找L3,如此下去,直到不能再找到任何频繁k项集。最后再在全部的频繁集中找出强规则,即产生用户感兴趣的关联规则。
关于这个算法有一个很是有名的故事:"尿布和啤酒":美国的妇女们常常会嘱咐她们的丈夫下班后为孩子买尿布,而丈夫在买完尿布后又要顺手买回本身爱喝的啤酒,所以啤酒和尿布在一块儿被购买的机会不少。这个举措使尿布和啤酒的销量双双增长,并一直为众商家所津津乐道。
概念介绍:
下面咱们经过一个例子来解释:
(1)由频繁k-1项集进行自链接生成的候选频繁k项集数量巨大。
(2)在验证候选频繁k项集的时候须要对整个数据库进行扫描,很是耗时。
以树形的形式来展现、表达数据的形态;能够理解为水在不一样河流分支的流动过程;
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):用一种推荐方法产生的模型做为另外一种推荐方法的输入。
推荐系统的将来与发展方向:
增长推荐的多维性:
当前的大部分研究都是基于对象-用户的二维度量空间的,未考虑相关信息。然而,用户对对象的评价和选择经常由不少环境因素来决定,好比某个对象在特定时段很流行,用户在某个地方浏览对象的时候偏向于选择某类对象等。推荐系统除了融合了计算机科学的不少领域,它还融合了心理学、社会学。
个性化搜索结果会把搜索引擎变成上下文感知的推荐系统:
推荐系统是一个临界线,能够说这是个性化搜索。它能够发现用户“如今”所关心的事,好比系统发现你以前买过鞋,如今在搜索衬衫,那你如今实际上是想干什么?推荐系统能够根据你是想和朋友一块儿去看电影,仍是想和家人呆在一块儿,作出不一样推荐。
增长向用户解释的推荐结果
根据用户的知识库,能够向用户作出更好的解释,向它们说明是什么样的因素在帮助系统作出这样的推荐。利用这样的系统,使用者确实体验更好了,他们对于系统的信任程度也提升了。
固然,推荐系统的发展方向和研究热点还有不少。随着对推荐系统功能需求特别是实时性及准确性上的需求水平的不断提升,其实现技术也都面临着严峻的挑战,须要不断的完善。
该文章同时在CSDN发表 http://blog.csdn.net/chndata/article/details/43192911