首页 > 编程知识 正文

协同过滤推荐算法代码,基于内容的协同过滤算法

时间:2023-05-06 06:44:23 阅读:20228 作者:2718

我只是个搬运工。 我来自刘建平pinard https://www.cn blogs.com/pinard/p/6349233.html

前言推荐算法具有非常多的应用场景和商业价值,值得对推荐算法进行仔细研究。 推荐算法种类很多,但目前应用最广泛的应该是协同过滤类推荐算法。 本文对协同过滤类推荐算法进行总结,然后对典型的协同过滤推荐算法进行原理性总结。

1 .推荐算法简介推荐算法非常古老,在机器学习不盛行的时候就有了需求和应用。 概括起来,可分为以下五种。

1 )基于内容的推荐)一般依赖于自然语言处理NLP的知识,通过挖掘文本的TF-IDF特征向量,得到用户的喜好进行推荐。 这样的推荐算法可以找到用户自己的个人喜好,也有更好的说明。 这种类型需要NLP的基础,本文就不多说了,以后专门说NLP的时候再讨论。

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

3 )混合推荐)这就像我们机器学习中的集成学习,博才多艺,通过多种推荐算法的结合,得到更好的推荐算法,起到三个臭皮匠顶一个gtdxmy的作用。 例如建立多个推荐算法的模型,最后用投票法确定最终推荐结果。 混合推荐理论上不比任何单一推荐算法差,但使用混合推荐提高了算法的复杂度,在实际应用中也有使用,但是单一的合作过滤推荐算法,例如逻辑回归等二分类推荐算法

4 )基于规则的推荐)这种算法常见的是大众型推荐方法,如最多用户点击、最多用户浏览等,在当今大数据时代并不主流。

5 )基于人口统计信息的推荐:这个班是最简单的推荐算法。 这只是根据系统用户的基本信息发现和推荐用户的关联度,目前在大系统中很少使用。

2 .协同过滤推荐综述协同过滤作为推荐算法中最典型的类型,包括在线协同和离线过滤两部分。 在线协作是指在在线数据中找到用户可能会喜欢的数据,但离线过滤器会筛选不值得推荐的数据,例如推荐值分数低的数据或推荐值高但用户已经购买的数据

协同过滤的模型通常是m个物品,其中m个用户的数据仅在部分用户和部分数据之间存在得分数据,而其他部分得分为空。 此时,利用现有的部分稀疏数据预测这些空白物品与数据之间的得分关系,找到得分最高的物品推荐给用户。

一般来说,协同过滤建议分为三种类型。 第一个是基于用户的协同过滤,第二个是基于项目的协同过滤,第三个是基于模型的协同过滤。

基于用户的协同过滤主要考虑用户和用户之间的相似性。 只要找到相似用户喜欢的项目并预测目标用户对相应项目的评价,就可以找到评价最高的几个项目并推荐给用户。 另一方面,基于item-based的协同过滤类似于基于用户的协同过滤。 但是,此时,我们转向找到物品和物品的类似度,只有对象用户找到对某个物品的评价时,才能预测类似度高的类似物品,并向用户推荐评价最高的几个类似物品。 例如,在网上买了机器学习相关的书,网站马上就会推荐很多机器学习、大数据相关的书。 这里显然使用了基于项目的协同过滤思想。

可以方便地将基于用户的协同过滤与基于项目的协同过滤进行比较。 基于用户的协同过滤需要在线查找用户与用户之间的相似性关系,计算的复杂性肯定会比基于项目的协同过滤更高。 但是可以帮助用户找到新类别的令人惊讶的物品。 基于项目的协同过滤在一段时间内不会改变所考虑的项目的相似性,因此可以轻松地离线计算,也可以正常接受精度,但推荐的多样性很难让用户感到惊讶。 一般来说,在小型推荐系统中,基于项目的协同过滤无疑是主流。 然而,如果是大规模推荐系统,则可以考虑基于用户的协作过滤,当然也可以考虑我们的第三类型:基于模型的协作过滤。

基于模型的协同过滤是目前最主流的协同过滤类型,我们很多机器学习算法也可以在这里找到有用的地方。 这里重点讨论基于模型的协同过滤。

3 .基于模型的协同过滤基于模型的协同过滤作为目前最主流的协同过滤类型,其相关算法可以写书。 当然,这里主要对其思想进行分类和概括。 我们的问题是这样的m件物品,m个用户的数据只有部分用户和部分数据之间有评分数据,其他部分的评分是空白的。 此时,我们使用现有部分的稀疏数据预测这些空白物品与数据之间的评分关系,找到评分最高的物品并推荐给用户。

针对这一问题,用机器学习思想建模解决的主流方法是关联算法、聚类算法、分类算法、回归算法、矩阵分解、神经网络、图模型以及隐含语义模型解决。 以下分别介绍。

3.1使用关联算法进行协同过滤,一般可以找到用户购买的所有物品

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

  常用的关联推荐算法有AprioriFP TreePrefixSpan。如果大家不熟悉这些算法,可以参考另外几篇文章:

3.2 用聚类算法做协同过滤

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

  常用的聚类推荐算法有K-Means, BIRCH, DBSCAN谱聚类,如果大家不熟悉这些算法,可以参考我的另外几篇文章:

3.3 用分类算法做协同过滤

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

  常见的分类推荐算法有逻辑回归朴素贝叶斯,两者的特点是解释性很强。

3.4 用回归算法做协同过滤

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

  常用的回归推荐算法有Ridge回归回归树支持向量回归

3.5 用矩阵分解做协同过滤

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

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

3.6 用神经网络做协同过滤

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

3.7 用图模型做协同过滤

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

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

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

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

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

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

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

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

5. 协同过滤总结

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

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

  以上就是协同过滤推荐算法的一个总结,希望可以帮大家对推荐算法有一个更深的认识。

(欢迎转载,转载请注明出处 刘建平Pinard:https://www.cnblogs.com/pinard/p/6349233.html)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。