协同过滤推荐算法总结刘建平Pinard

推荐算法具有非常多的应用场景和商业价值,因此对推荐算法值得好好研究。推荐算法种类很多,但是目前应用最广泛的应该是协同过滤类别的推荐算法,本文就对协同过滤类别的推荐算法做一个概括总结,后续也会对一些典型的协同过滤推荐算法做原理总结。

推荐算法是非常古老的,在机器学习还没有兴起的时候就有需求和应用了。概括来说,可以分为以下5种:

1)基于内容的推荐:这一类一般依赖于自然语言处理NLP的一些知识,通过挖掘文本的TF-IDF特征向量,来得到用户的偏好,进而做推荐。这类推荐算法可以找到用户独特的小众喜好,而且还有较好的解释性。这一类由于需要NLP的基础,本文就不多讲,在后面专门讲NLP的时候再讨论。

2)协调过滤推荐:本文后面要专门讲的内容。协调过滤是推荐算法中目前最主流的种类,花样繁多,在工业界已经有了很多广泛的应用。它的优点是不需要太多特定领域的知识,可以通过基于统计的机器学习算法来得到较好的推荐效果。最大的优点是工程上容易实现,可以方便应用到产品中。目前绝大多数实际应用的推荐算法都是协同过滤推荐算法。

3)混合推荐:这个类似我们机器学习中的集成学习,博才众长,通过多个推荐算法的结合,得到一个更好的推荐算法,起到三个臭皮匠顶一个诸葛亮的作用。比如通过建立多个推荐算法的模型,最后用投票法决定最终的推荐结果。混合推荐理论上不会比单一任何一种推荐算法差,但是使用混合推荐,算法复杂度就提高了,在实际应用中有使用,但是并没有单一的协调过滤推荐算法,比如逻辑回归之类的二分类推荐算法广泛。

4)基于规则的推荐:这类算法常见的比如基于最多用户点击,最多用户浏览等,属于大众型的推荐方法,在目前的大数据时代并不主流。

协同过滤(CollaborativeFiltering)作为推荐算法中最经典的类型,包括在线的协同和离线的过滤两部分。所谓在线协同,就是通过在线数据找到用户可能喜欢的物品,而离线过滤,则是过滤掉一些不值得推荐的数据,比比如推荐值评分低的数据,或者虽然推荐值高但是用户已经购买的数据。

协同过滤的模型一般为m个物品,m个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时我们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。

一般来说,协同过滤推荐分为三种类型。第一种是基于用户(user-based)的协同过滤,第二种是基于项目(item-based)的协同过滤,第三种是基于模型(modelbased)的协同过滤。

基于模型(modelbased)的协同过滤是目前最主流的协同过滤类型了,我们的一大堆机器学习算法也可以在这里找到用武之地。下面我们就重点介绍基于模型的协同过滤。

对于这个问题,用机器学习的思想来建模解决,主流的方法可以分为:用关联算法,聚类算法,分类算法,回归算法,矩阵分解,神经网络,图模型以及隐语义模型来解决。下面我们分别加以介绍。

一般我们可以找出用户购买的所有物品数据里频繁出现的项集活序列,来做频繁集挖掘,找到满足支持度阈值的关联物品的频繁N项集或者序列。如果用户购买了频繁N项集或者序列里的部分物品,那么我们可以将频繁项集或序列里的其他物品按一定的评分准则推荐给用户,这个评分准则可以包括支持度,置信度和提升度等。

用聚类算法做协同过滤就和前面的基于用户或者项目的协同过滤有些类似了。我们可以按照用户或者按照物品基于一定的距离度量来进行聚类。如果基于用户聚类,则可以将用户按照一定距离度量方式分成不同的目标人群,将同样目标人群评分高的物品推荐给目标用户。基于物品聚类的话,则是将用户评分高物品的相似同类物品推荐给用户。

如果我们根据用户评分的高低,将分数分成几段的话,则这个问题变成分类问题。比如最直接的,设置一份评分阈值,评分高于阈值的就是推荐,评分低于阈值就是不推荐,我们将问题变成了一个二分类问题。虽然分类问题的算法多如牛毛,但是目前使用最广泛的是逻辑回归。为啥是逻辑回归而不是看起来更加高大上的比如支持向量机呢?因为逻辑回归的解释性比较强,每个物品是否推荐我们都有一个明确的概率放在这,同时可以对数据的特征做工程化,得到调优的目的。目前逻辑回归做协同过滤在BAT等大厂已经非常成熟了。

用回归算法做协同过滤比分类算法看起来更加的自然。我们的评分可以是一个连续的值而不是离散的值,通过回归模型我们可以得到目标用户对某商品的预测打分。

用矩阵分解做协同过滤是目前使用也很广泛的一种方法。由于传统的奇异值分解SVD要求矩阵不能有缺失数据,必须是稠密的,而我们的用户物品评分矩阵是一个很典型的稀疏矩阵,直接使用传统的SVD到协同过滤是比较复杂的。

目前主流的矩阵分解推荐算法主要是SVD的一些变种,比如FunkSVD,BiasSVD和SVD++。这些算法和传统SVD的最大区别是不再要求将矩阵分解为$U\SigmaV^T$的形式,而变是两个低秩矩阵$P^TQ$的乘积形式。对于矩阵分解的推荐算法,后续我会专门开篇来讲。

用神经网络乃至深度学习做协同过滤应该是以后的一个趋势。目前比较主流的用两层神经网络来做推荐算法的是限制玻尔兹曼机(RBM)。在目前的Netflix算法比赛中,RBM算法的表现很牛。当然如果用深层的神经网络来做协同过滤应该会更好,大厂商用深度学习的方法来做协同过滤应该是将来的一个趋势。后续我会专门开篇来讲讲RBM。

用图模型做协同过滤,则将用户之间的相似度放到了一个图模型里面去考虑,常用的算法是SimRank系列算法和马尔科夫模型算法。对于SimRank系列算法,它的基本思想是被相似对象引用的两个对象也具有相似性。算法思想有点类似于大名鼎鼎的PageRank。而马尔科夫模型算法当然是基于马尔科夫链了,它的基本思想是基于传导性来找出普通距离度量算法难以找出的相似性。后续我会专门开篇来讲讲SimRank系列算法。

隐语义模型主要是基于NLP的,涉及到对用户行为的语义分析来做评分推荐,主要方法有隐性语义分析LSA和隐含狄利克雷分布LDA,这些等讲NLP的再专门讲。

当然推荐算法的变革也在进行中,就算是最火爆的基于逻辑回归推荐算法也在面临被取代。哪些算法可能取代逻辑回归之类的传统协同过滤呢?下面是我的理解:

a)基于集成学习的方法和混合推荐:这个和混合推荐也靠在一起了。由于集成学习的成熟,在推荐算法上也有较好的表现。一个可能取代逻辑回归的算法是GBDT。目前GBDT在很多算法比赛都有好的表现,而有工业级的并行化实现类库。

b)基于矩阵分解的方法:矩阵分解,由于方法简单,一直受到青睐。目前开始渐渐流行的矩阵分解方法有分解机(FactorizationMachine)和张量分解(TensorFactorization)。

c)基于深度学习的方法:目前两层的神经网络RBM都已经有非常好的推荐算法效果,而随着深度学习和多层神经网络的兴起,以后可能推荐算法就是深度学习的天下了?目前看最火爆的是基于CNN和RNN的推荐算法。

协同过滤作为一种经典的推荐算法种类,在工业界应用广泛,它的优点很多,模型通用性强,不需要太多对应数据领域的专业知识,工程实现简单,效果也不错。这些都是它流行的原因。

当然,协同过滤也有些难以避免的难题,比如令人头疼的“冷启动”问题,我们没有新用户任何数据的时候,无法较好的为新用户推荐物品。同时也没有考虑情景的差异,比如根据用户所在的场景和用户当前的情绪。当然,也无法得到一些小众的独特喜好,这块是基于内容的推荐比较擅长的。

以上就是协同过滤推荐算法的一个总结,希望可以帮大家对推荐算法有一个更深的认识,并预祝大家新年快乐!

(欢迎转载,转载请注明出处。欢迎沟通交流:liujianping-ok@163.com)

THE END
1.协同过滤(CF)算法详解和实现协同过滤...来自伯乐在线官方微博...《协同过滤(CF)算法详解和实现》协同过滤的方式不需要对物品或者用户严格的建模,而且不要求物品的描述是机器可理解的,是中领域无关的推荐方法,同时这个方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好。O网页链接(by Poll) ...https://www.weibo.com/1670481425/DBQAycouE
2.SparkMLlib机器学习算法与源码解析培训炼数成金第七课 Spark MLlib KMeans聚类算法 1、KMeans聚类算法 2、源码分析 3、实例 4、实例的代码实操 第八课 Spark MLlib FPGrowth关联规则算法 1、FPGrowth关联规则算法 2、源码分析 3、实例 4、实例的代码实操 第九课 Spark MLlib协同过滤推荐算法 http://www.dataguru.cn/article-9322-1.html
3.推荐系统之协同过滤推荐算法:ImplicitAlternatingLeastSquares...2推荐系统之协同过滤推荐算法:iALS算法详解 2.1iALS算法介绍 在推荐系统领域,协同过滤算法是一种广泛使用的方法,它基于用户或物品的相似性来推荐内容。其中,隐式反馈协同过滤(iALS)专注于用户与物品之间的隐式交互,如点击、浏览、购买等,而非显式的评分数据。iALS通过矩阵分解技术,将用户-物品的交互矩阵分解为两个...https://m.book118.com/html/2024/0905/7103000005006150.shtm
4.AI匹配技术详解:如何实现精准匹配与多嘲应用解析在特征工程的基础上,采用机器学、深度学等算法构建匹配模型。常用的算法有协同过滤、矩阵分解、深度神经网络等。通过不断训练和优化模型增进匹配准确率。 4. 模型评估与优化 对构建的匹配模型实行评估,如准确率、召回率、F1值等指标。按照评估结果,对模型实行优化,调整参数,增强匹配效果。 http://www.slrbs.com/jrzg/aizhishi/303510.html
5.基于流形近邻的协同过滤算法AET为了比较基于欧氏距离的协同过滤算法和基于最小最大距离的协同过滤算法,此处变化邻居数,加权方案取01VD,记使用欧氏距离的协同过滤方案为ECF,得到的实验结果如图2所示。 从图2可以看出,使用流形近邻的协同过滤算法优于使用欧氏距离的协同过滤算法。 3.3不同流形邻居数对实验结果的影响 ...http://www.chinaaet.com/article/3000016485
6.结合知识图谱进行信息强化的协同过滤算法针对传统协同过滤算法存在使用信息单一、基础评分数据过于稀疏导致推荐效果不佳等问题,该文提出一种结合知识图谱进行信息强化的协同过滤(KGRI-CF)算法。该算法利用电影的特征数据构建1张关于电影的知识图谱,对用户-评分矩阵进行有条件的填充,有效改善了传统协同过滤算法的数据稀疏性问题。通过对评分数据进行统计与挖掘获取...https://www.sinomed.ac.cn/article.do?ui=2022474405
7.相似度计算详解文本相似度计算(介绍公式)1)过滤相似度很高的新闻,或者网页去重; 2)考试防作弊系统; 3)论文查重系统; 如何选择相似度算法: 1)余弦相似度或者皮尔逊相关系数适合用户评分数据(实数值); 2)杰卡德相似度适用于隐式反馈数据,如:0/1、布尔值、是否收藏(点击、加购物车等); 5、常用距离公式汇总 ...https://www.360doc.cn/article/32196507_1136330735.html
8.协同过滤——推荐系统算法原理在探讨推荐算法原理之前,先说一个概念:协同过滤(Collaborative Filtering)。 协同过滤一般是在海量的用户中发掘出一小部分和你品位比较类似的,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的其他东西组织成一个排序的目录作为推荐给你。 为了方便了解,举个简单的例子。最近新上映了10部电影,你不知道看哪一部,问你...https://www.jianshu.com/p/de1ae0e88b27
1.python协同过滤推荐算法详解协同过滤推荐算法代码python 协同过滤推荐算法详解 协同过滤推荐算法代码 上一部分介绍了《推荐系统实践》中关于推荐系统常用的一些评测指标,那么从这一部分开始,将真正进入到推荐算法部分。 完整代码链接:https://github.com/Magic-Bubble/RecommendSystemPractice 下面将开始本系列的第二部分——协同过滤篇。https://blog.51cto.com/u_16099311/9135474
2.协同过滤推荐算法详解协同过滤推荐算法详解 一、什么是协同过滤? 协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较...https://blog.csdn.net/xiaokang123456kao/article/details/74735992
3.校园安全规则(精选14篇)提出了基于协同过滤推荐算法和机器学习的方式给用户推荐一组策略,主要讨论了用户的个人信息的表示和用户规则的选择,这样既解决了用户制定规则的困难,同时也给用户节省了很多时间来规划和制定规则,这个方法可以实现对最初的用户进行推荐初始规则格式和基本内容。使智能环境更加人性化和智能化。 https://www.360wenmi.com/f/fileqefra720.html
4.基于协同过滤算法的个性化医疗推荐系统设计与实现本文基于协同过滤算法开发并实现了个性化医疗推荐系统。协同过滤算法可为用户推荐合适的医生,降低病人选择医生的时间,给予病人极大的便利。本系统基于JAVA语言,SSM框架,ORACLE数据库技术开发WEB端和后台管理,实现了病人的预约医生、接受医生推荐、查看医生医令,医生的查询预约、开医令等功能。 [...https://wap.cnki.net/qikan-FJDN201708051.html
5.一种融合多种用户行为的协同过滤推荐算法【摘要】:协同过滤作为目前应用最成功的个性化推荐技术,在电子商务、社交网络等领域得到了广泛应用。然而,当此类算法应用到个性化医疗推荐领域时,由于个人医疗行为本身的复杂性和多样性,出现了推荐准确率下降的问题。针对这一问题,提出一种融合多种用户行为的协同过滤推荐算法,使用权重因子来综合衡量不同用户行为对推荐质量...https://www.cnki.com.cn/Article/CJFDTotal-jsja201609046.htm
6.python实现协同过滤推荐算法完整代码示例python这篇文章主要介绍了python实现协同过滤推荐算法完整代码示例,具有一定借鉴价值,需要的朋友可以参考下。测试数据 http://grouplens.org/datasets/movielens/ 协同过滤推荐算法主要分为: 1、基于用户。根据相邻用户,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表进行推荐 2、基于物品。如喜欢物品A的用户...https://www.jb51.net/article/130674.htm