协同过滤推荐算法总结

推荐算法具备很是多的应用场景和商业价值,所以对推荐算法值得好好研究。推荐算法种类不少,可是目前应用最普遍的应该是协同过滤类别的推荐算法,本文就对协同过滤类别的推荐算法作一个归纳总结,后续也会对一些典型的协同过滤推荐算法作原理总结。html

1、推荐算法概述

    推荐算法是很是古老的,在机器学习尚未兴起的时候就有需求和应用了。归纳来讲,能够分为如下5种:算法

    1)基于内容的推荐:这一类通常依赖于天然语言处理NLP的一些知识,经过挖掘文本的TF-IDF特征向量,来获得用户的偏好,进而作推荐。这类推荐算法能够找到用户独特的小众喜爱,并且还有较好的解释性。这一类因为须要NLP的基础,本文就很少讲,在后面专门讲NLP的时候再讨论。微信

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

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

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

    5)基于人口统计信息的推荐:这一类是最简单的推荐算法了,它只是简单的根据系统用户的基本信息发现用户的相关程度,而后进行推荐,目前在大型系统中已经较少使用。学习

2、协同过滤推荐概述

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

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

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

    基于用户(user-based)的协同过滤主要考虑的是用户和用户之间的类似度,只要找出类似用户喜欢的物品,并预测目标用户对对应物品的评分,就能够找到评分最高的若干个物品推荐给用户。而基于项目(item-based)的协同过滤和基于用户的协同过滤相似,只不过这时咱们转向找到物品和物品之间的类似度,只有找到了目标用户对某些物品的评分,那么咱们就能够对类似度高的相似物品进行预测,将评分最高的若干个类似物品推荐给用户。好比你在网上买了一本机器学习相关的书,网站立刻会推荐一堆机器学习,大数据相关的书给你,这里就明显用到了基于项目的协同过滤思想。

    咱们能够简单比较下基于用户的协同过滤和基于项目的协同过滤:基于用户的协同过滤须要在线找用户和用户之间的类似度关系,计算复杂度确定会比基于基于项目的协同过滤高。可是能够帮助用户找到新类别的有惊喜的物品。而基于项目的协同过滤,因为考虑的物品的类似性一段时间不会改变,所以能够很容易的离线计算,准确度通常也能够接受,可是推荐的多样性来讲,就很难带给用户惊喜了。通常对于小型的推荐系统来讲,基于项目的协同过滤确定是主流。可是若是是大型的推荐系统来讲,则能够考虑基于用户的协同过滤,固然更加能够考虑咱们的第三种类型,基于模型的协同过滤。

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

3、基于模型的协同过滤

    基于模型的协同过滤做为目前最主流的协同过滤类型,其相关算法能够写一本书了,固然咱们这里主要是对其思想作有一个归类归纳。咱们的问题是这样的m个物品,m个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时咱们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。

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

3.1 用关联算法作协同过滤

    通常咱们能够找出用户购买的全部物品数据里频繁出现的项集活序列,来作频繁集挖掘,找到知足支持度阈值的关联物品的频繁N项集或者序列。若是用户购买了频繁N项集或者序列里的部分物品,那么咱们能够将频繁项集或序列里的其余物品按必定的评分准则推荐给用户,这个评分准则能够包括支持度,置信度和提高度等。

    经常使用的关联推荐算法有Apriori,FP Tree和PrefixSpan。若是你们不熟悉这些算法,能够参考个人另外几篇文章:

    Apriori算法原理总结

    FP Tree算法原理总结

    PrefixSpan算法原理总结 

3.2 用聚类算法作协同过滤

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

    经常使用的聚类推荐算法有K-Means, BIRCH, DBSCAN和谱聚类,若是你们不熟悉这些算法,能够参考个人另外几篇文章:

    K-Means聚类算法原理

    BIRCH聚类算法原理

    DBSCAN密度聚类算法

    谱聚类(spectral clustering)原理总结

3.3 用分类算法作协同过滤

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

    常见的分类推荐算法有逻辑回归和朴素贝叶斯,二者的特色是解释性很强。若是你们不熟悉这些算法,能够参考个人另外几篇文章:

    逻辑回归原理小结

    朴素贝叶斯算法原理小结

3.4 用回归算法作协同过滤

    用回归算法作协同过滤比分类算法看起来更加的天然。咱们的评分能够是一个连续的值而不是离散的值,经过回归模型咱们能够获得目标用户对某商品的预测打分。

    经常使用的回归推荐算法有Ridge回归,回归树和支持向量回归。若是你们不熟悉这些算法,能够参考个人另外几篇文章:

    线性回归原理小结

    决策树算法原理(下)

    支持向量机原理(五)线性支持回归

3.5 用矩阵分解作协同过滤

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

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

3.6 用神经网络作协同过滤

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

3.7  用图模型作协同过滤

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

3.8 用隐语义模型作协同过滤

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

4、协同过滤的一些新方向

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

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

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

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

5、协同过滤总结 

    协同过滤做为一种经典的推荐算法种类,在工业界应用普遍,它的优势不少,模型通用性强,不须要太多对应数据领域的专业知识,工程实现简单,效果也不错。这些都是它流行的缘由。

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

    

    以上就是协同过滤推荐算法的一个总结,但愿能够帮你们对推荐算法有一个更深的认识,并预祝你们新年快乐!

(欢迎转载,转载请注明出处。欢迎沟通交流: 微信:nickchen121)

相关文章
相关标签/搜索