`
SereinChan
  • 浏览: 16479 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

推荐系统算法总结

 
阅读更多

完全转载自:阿俊的博客

最近看推荐系统方面的东西也有段日子了,有书,博客,唯独没有看论文。

总感觉论文对于工业界来说用处真的不如学校做课题、论文那么大,只要知道某个算法好不好用以及怎么用就可以了,也不必知道太多的细节和数学推导。但根据一个好的算法,产品部门可以设计出很多很酷的产品,让用户倍感web应用的人性化。


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来做。

。。。。

组合的方式太多了。


其实做推荐系统,算法真的很多,这些只是我学到和用到的一点点。在学术界,许多大牛的论文和研究方向就是不断地改进计算速度,精度和提出新的算法。


分享到:
评论

相关推荐

    常见推荐系统算法总结报告与性能比较.docx

    ### 常见推荐系统算法总结报告与性能比较 #### 一、常用推荐系统算法概述 本文档旨在总结并比较几种常见的推荐系统算法,并探讨它们各自的特点与应用场景。推荐系统在现代互联网产品和服务中扮演着极其重要的角色...

    常用推荐系统算法总结及性能比较.pdf

    本文将对几种常见的推荐系统算法进行详细总结,并比较它们的性能特点。 1. ItemCF(基于商品的协同过滤) ItemCF算法关注商品之间的相似性,常用于如电商、电影和音乐推荐。它计算商品之间的相似度矩阵,当用户对某...

    常用推荐系统算法总结及性能比较.docx

    以下是几种常见的推荐系统算法的总结和性能比较: 1. ItemCF(基于商品的协同过滤) ItemCF算法主要关注商品间的相似性,计算商品之间的关联度。它适用于商品种类多、用户数量相对较小的情况,如电商网站。由于...

    操作系统原理算法总结

    操作系统原理算法总结 操作系统原理是计算机科学中的一门重要学科,涉及到计算机系统的底层机理和算法。本文总结了操作系统原理中的四个重要算法:进程调度算法、存储器分配算法、页面置换算法和磁盘调度算法。 一...

    常用推荐算法总结

    推荐算法根据不同的原理和方法可以被分为多种类型,以下将详细介绍推荐系统中常用的一些算法。 非个性化推荐算法 非个性化推荐算法不考虑用户过去的喜好和行为,通常基于物品的特性或用户群体的行为来给出推荐。最...

    基于协同过滤算法的旅游推荐系统+eclipse+mysql+系统说明.rar

    总结,基于协同过滤算法的旅游推荐系统,通过Java、JSP和MySQL的组合,实现了对用户兴趣的深度挖掘和精准推荐,为用户提供了一种个性化的旅游体验。在开发过程中,合理的技术选型和精心的设计使得系统具备了较高的可...

    2016年ACM常用算法总结

    从给定的文件信息中,可以提取到关于ACM常用算法的知识点。ACM国际大学生程序设计竞赛(ACM International Collegiate Programming Contest,简称...然而,上述内容仍然是对ACM常用算法知识点的较为全面和系统的总结。

    操作系统算法总结[总结].pdf

    操作系统算法总结 本文总结了操作系统中各种常见的算法,包括进程调度算法、存储器管理算法、页面置换算法、磁盘调度算法和信号量问题的解决思路。 一、进程调度算法 1. 先来先服务调度算法(FCFS):每次调度...

    数学建模算法总结(共799页)

    《数学建模算法总结》是一本详尽的资料,涵盖了799页的丰富内容,旨在为参与数学建模竞赛的学生提供全方位的指导。在数学建模过程中,算法的应用至关重要,因为它们是解决复杂问题的核心工具。以下是根据标题和描述...

    在线学习系统中的深度学习推荐算法分析.pdf

    总结来说,在线学习系统中的深度学习推荐算法通过学习和分析用户的学习数据,能够智能地为用户提供个性化学习内容推荐。这种推荐不仅提高了学习资源的使用效率,也增加了用户的学习动力和满足感。随着技术的进步,...

    基于协同过滤算法的电影推荐系统设计 (2).docx

    《基于协同过滤算法的电影推荐系统设计》 协同过滤算法在现代推荐系统中扮演着重要角色,尤其在电影推荐领域,其应用广泛且效果显著。本文将深入探讨基于协同过滤算法的电影推荐系统的设计原理与实现过程。 协同...

    前后端+算法完整项目, 使用的推荐算法:基于协同过滤算法的AI图书推荐系统.zip

    总结起来,这个项目涵盖了从数据处理、机器学习模型构建、前后端开发到系统部署的全过程,是学习和实践AI推荐系统的一个理想实例。通过深入理解并实践该项目,开发者可以提升在Python编程、推荐算法、Web开发等多个...

    关于PID控制算法总结

    PID控制算法的目的在于使系统的输出值跟随设定的目标值,即通过闭环控制来达到目标设定的期望状态。 首先,PID算法的实现依赖于硬件上的闭环控制,这意味着系统中必须具备某种形式的反馈机制。例如,在电机转速控制...

    推荐系统比较

    全面总结推荐系统的现状,对主流算法进行了分类和对比,高清

    阿里技术-推荐系统归纳.pdf

    取自阿里巴巴技术公众号,推荐系统算法总结,包含算法介绍及适用范围。

    基于协同过滤算法的个性化新闻推荐系统-毕业设计说明书1

    总结,基于协同过滤算法的个性化新闻推荐系统是一种利用用户行为数据预测用户兴趣,并据此推荐新闻的智能工具。系统采用PHP编程语言和MySQL数据库进行实现,经过测试表现出较高的推荐精度,满足实际应用需求。这种...

    传统机器学习算法总结

    "传统机器学习算法总结" 机器学习是一门涉及到计算机科学、数学、统计学、信息论和工程学的交叉学科,旨在设计和开发使计算机系统能够自动地从经验中学习、提高性能的算法和理论。传统机器学习算法是机器学习的基础...

    人事工资管理系统 算法 报表(Delphi)

    《人事工资管理系统算法与报表设计解析》 在信息化管理日益重要的今天,人事工资管理系统作为企业内部管理的重要组成部分,扮演着至关重要的角色。本系统由独立开发者精心打造,旨在提供一个全面、准确、高效的人事...

    基于MapReduce的商品推荐算法.zip

    总结来说,基于MapReduce的商品推荐算法充分利用了分布式计算的优势,高效处理大量用户行为数据,为实现精准推荐提供有力支持。在实际应用中,我们还需要考虑到数据稀疏性、冷启动问题以及实时性等因素,以构建更加...

Global site tag (gtag.js) - Google Analytics