推荐算法介绍:
1.个性化推荐
基于用户推荐:
根据用户的注册信息对用户进行分类,给用户推荐她所属分类中的用户喜欢的物品
基于内容推荐:
根据用户过去的浏览记录,向用户推荐用户没有接触过的推荐项。
协同过滤推荐:
协调过滤是推荐算法中目前最主流的种类,花样繁多,在工业界已经有了很多广泛的应用。它的优点是不需要太多特定领域的知识,可以通过基于统计的机器学习算法来得到较好的推荐效果。最大的优点是工程上容易实现,可以方便应用到产品中。目前绝大多数实际应用的推荐算法都是协同过滤推荐算法。
基于规则的推荐:
基于最多用户点击,最多用户浏览等,在目前的大数据时代并不主流。
基于人口信息的推荐:
简单的根据系统用户的基本信息发现用户的相关程度,然后进行推荐,目前在大型系统中已经较少使用。
协同过滤算法(Collaborative Filtering)是一种基于一组兴趣相同的用户或项目进行的推荐,它根据邻居用户(与目标用户兴趣相似的用户)的偏好信息产生对目标用户的推荐列表。协同过滤是在海量数据中挖掘出小部分与你品味类似的用户,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的东西组织成一个排序的目录推荐给你(如下图所示)。
一般来说,协同过滤推荐分为三种类型:
1)基于用户(UserCF)的协同过滤算法和。
2)基于物品(ItemCF)的协同过滤算法。
所谓基于物品,就是用户喜欢了X商品,我们给他推荐与X商品相似的商品。所谓基于用户,就是用户A和用户B相似,用户A买了X、Y,用户B买了X、Y、Z,我们就给用户A推荐商品Z。
3)基于模型的协同过滤:
我们的问题是这样的m个物品,m个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时我们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。
3.1 主要方法:
3.1.1 关联算法
主要思想是:找出用户购买的所有物品数据里频繁出现的项集活序列,来做频繁集挖掘,找到满足支持度阈值的关联物品的频繁N项集或者序列。如果用户购买了N项集或者序列里的部分物品,那么我们可以将频繁项集或者序列里的其他物品按照一定的评分准则推荐给用户,这个评分准则可以包括支持度、置信度和提升度等。
常用算法有Apriori(关联规则最常用也是最经典的挖掘频繁项集的算法,其核心思想是通过连接产生候选项及其支持度然后通过剪枝生成频繁项集)、 FP Tree、 PrefixSpan
python数据分析与挖掘实战上的关于Apriori的代码
apriori.py
结果
3.1.2聚类算法
用聚类算法做协同过滤就和前面的基于用户或者物品的协同过滤有些类似了。我们可以按照用户或者按照物品基于一定的距离度量来进行聚类。如果基于用户聚类,则可以将用户按照一定距离度量方式分成不同的目标人群,将同样目标人群评分高的物品推荐给目标用户。基于物品聚类的话,则是将用户评分高物品的相似同类物品推荐给用户。
常用算法有:K-Means,BIRCH,dbscan密度聚类,谱聚类(spectral clustering)
3.1.3分类算法
如果我们根据用户评分的高低,将分数分成几段的话,则这个问题变成分类问题。比如最直接的,设置一份评分阈值,评分高于阈值的就是推荐,评分低于阈值就是不推荐,我们将问题变成了一个二分类问题。虽然分类问题的算法多如牛毛,但是目前使用最广泛的是逻辑回归。为啥是逻辑回归而不是看起来更加高大上的比如支持向量机呢?因为逻辑回归的解释性比较强,每个物品是否推荐我们都有一个明确的概率放在这,同时可以对数据的特征做工程化,得到调优的目的。目前逻辑回归做协同过滤在BAT等大厂已经非常成熟了。常见的分类推荐算法有逻辑回归和朴素贝叶斯,两者的特点是解释性很强。
3.1.4回归算法
用回归算法做协同过滤比分类算法看起来更加的自然。我们的评分可以是一个连续的值而不是离散的值,通过回归模型我们可以得到目标用户对某商品的预测打分。常用的回归推荐算法有Ridge回归,回归树和支持向量回归。
3.1.5矩阵分解
用矩阵分解做协同过滤是目前使用也很广泛的一种方法。由于传统的奇异值分解SVD要求矩阵不能有缺失数据,必须是稠密的,而我们的用户物品评分矩阵是一个很典型的稀疏矩阵,直接使用传统的SVD到协同过滤是比较复杂的。目前主流的矩阵分解推荐算法主要是SVD的一些变种,比如FunkSVD,BiasSVD和SVD++。
3.1.6神经网络
用神经网络乃至深度学习做协同过滤应该是以后的一个趋势。目前比较主流的用两层神经网络来做推荐算法的是限制玻尔兹曼机(RBM)。在目前的Netflix算法比赛中, RBM算法的表现很牛。当然如果用深层的神经网络来做协同过滤应该会更好,大厂商用深度学习的方法来做协同过滤应该是将来的一个趋势。
3.1.7基于图的随机游走算法
用图模型做协同过滤,则将用户之间的相似度放到了一个图模型里面去考虑,常用的算法是SimRank系列算法和马尔科夫模型算法。对于SimRank系列算法,它的基本思想是被相似对象引用的两个对象也具有相似性。算法思想有点类似于大名鼎鼎的PageRank。而马尔科夫模型算法当然是基于马尔科夫链了,它的基本思想是基于传导性来找出普通距离度量算法难以找出的相似性。后续我会专门开篇来讲讲SimRank系列算法。
3.1.8隐语义模型
隐语义模型主要是基于NLP的,涉及到对用户行为的语义分析来做评分推荐,主要方法有隐性语义分析LSA和隐含狄利克雷分布LDA