协同过滤的模型通常为m个物品,m个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时咱们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。html
通常来讲,协同过滤推荐分为三种类型。第一种是基于用户(user-based)的协同过滤,第二种是基于项目(item-based)的协同过滤,第三种是基于模型(model based)的协同过滤。算法
一、基于用户(user-based)的协同过滤网络
主要考虑的是用户和用户之间的类似度,只要找出类似用户喜欢的物品,并预测目标用户对对应物品的评分,就能够找到评分最高的若干个物品推荐给用户。机器学习
基于用户的CF原理以下:学习
举个栗子,基于用户的CF算法大体的计算流程以下:大数据
(1)根据网站的记录计算出一个用户与item的关联矩阵,即每一个用户对商品的评分网站
(2)计算用户与用户之间的类似度,使用余弦距离,值越大说明越类似。spa
(3)咱们要为用户1推荐物品,则找出与用户1类似度最高的N名用户(设N=2)评价的物品,去掉用户1评价过的物品,则是推荐结果。3d
优缺点:orm
优势: 在数据集完善、内容丰富的条件下,可以得到较高的准确率,并且能避开Item Profile上的挖掘进行推荐,可以对物品的关联性、用户的偏好进行隐式透明的挖掘。
缺点: 随着系统用户数量的增大,计算Top-K Relevance User的时间会显著增加,使得该方法难以胜任用户量变化巨大的系统;新用户加入,打分记录不多,难以准确计算Top-K Relevance User.
二、基于项目(item-based)的协同过滤
找到物品和物品之间的类似度,只有找到了目标用户对某些物品的评分,那么咱们就能够对类似度高的相似物品进行预测,将评分最高的若干个类似物品推荐给用户。好比,你在网上买了一本机器学习相关的书,网站立刻会推荐一堆机器学习,大数据相关的书给你,这里就明显用到了基于项目的协同过滤思想。
基于物品的CF原理大同小异,只是主体在于物品:
优缺点:
优势: 计算简单,容易实现实时响应。因为Item被打分的变化剧烈程度低,,所以 Item 类似度的计算通常能够采用离线完成、按期更新的方式,从而减小了线上计算;可解释性好。
缺点: :以物品为基础的系统过滤较少考虑用户之间的差异,所以精
度较 User-Based 方法稍微逊色一点;还有数据稀疏性(Sparsity)和冷启动(Cold-Start)的问题。
三、协同过滤(CF)算法确实简单,并且不少时候推荐也是很准确的。然而它也存在一些问题:
优势:
缺点:
四、基于模型的协同过滤
咱们的问题是这样的m个物品,m个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时咱们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。
对于这个问题,用机器学习的思想来建模解决,主流的方法能够分为:用关联算法,聚类算法,分类算法,回归算法,矩阵分解,神经网络,图模型以及隐语义模型来解决。
(1)经常使用的关联推荐算法有Apriori,FP Tree和PrefixSpan。
通常咱们能够找出用户购买的全部物品数据里频繁出现的项集活序列,来作频繁集挖掘,找到知足支持度阈值的关联物品的频繁N项集或者序列。若是用户购买了频繁N项集或者序列里的部分物品,那么咱们能够将频繁项集或序列里的其余物品按必定的评分准则推荐给用户,这个评分准则能够包括支持度,置信度和提高度等。
(2)经常使用的聚类推荐算法有K-Means, BIRCH, DBSCAN和谱聚类。
用聚类算法作协同过滤就和前面的基于用户或者项目的协同过滤有些相似了。咱们能够按照用户或者按照物品基于必定的距离度量来进行聚类。若是基于用户聚类,则能够将用户按照必定距离度量方式分红不一样的目标人群,将一样目标人群评分高的物品推荐给目标用户。基于物品聚类的话,则是将用户评分高物品的类似同类物品推荐给用户。
(3)常见的分类推荐算法有逻辑回归和朴素贝叶斯,二者的特色是解释性很强。
若是咱们根据用户评分的高低,将分数分红几段的话,则这个问题变成分类问题。好比最直接的,设置一份评分阈值,评分高于阈值的就是推荐,评分低于阈值就是不推荐,咱们将问题变成了一个二分类问题。虽然分类问题的算法多如牛毛,可是目前使用最普遍的是逻辑回归。为啥是逻辑回归而不是看起来更加高大上的好比支持向量机呢?由于逻辑回归的解释性比较强,每一个物品是否推荐咱们都有一个明确的几率放在这,同时能够对数据的特征作工程化,获得调优的目的。目前逻辑回归作协同过滤在BAT等大厂已经很是成熟了。
(4)经常使用的回归推荐算法有Ridge回归,回归树和支持向量回归。
用回归算法作协同过滤比分类算法看起来更加的天然。咱们的评分能够是一个连续的值而不是离散的值,经过回归模型咱们能够获得目标用户对某商品的预测打分。
(5)矩阵分解
用矩阵分解作协同过滤是目前使用也很普遍的一种方法。因为传统的奇异值分解SVD要求矩阵不能有缺失数据,必须是稠密的,而咱们的用户物品评分矩阵是一个很典型的稀疏矩阵,直接使用传统的SVD到协同过滤是比较复杂的。
目前主流的矩阵分解推荐算法主要是SVD的一些变种,好比FunkSVD,BiasSVD和SVD++。这些算法和传统SVD的最大区别是再也不要求将矩阵分解为UΣVTUΣVT的形式,而变是两个低秩矩阵PTQPTQ的乘积形式。
(6)用神经网络乃至深度学习作协同过滤应该是之后的一个趋势。目前比较主流的用两层神经网络来作推荐算法的是限制玻尔兹曼机(RBM)。在目前的Netflix算法比赛中, RBM算法的表现很牛。固然若是用深层的神经网络来作协同过滤应该会更好,大厂商用深度学习的方法来作协同过滤应该是未来的一个趋势。后续我会专门开篇来说讲RBM。
(7)推荐系统新方向
a) 基于集成学习的方法和混合推荐:这个和混合推荐也靠在一块儿了。因为集成学习的成熟,在推荐算法上也有较好的表现。一个可能取代逻辑回归的算法是GBDT。目前GBDT在不少算法比赛都有好的表现,而有工业级的并行化实现类库。
b)基于矩阵分解的方法:矩阵分解,因为方法简单,一直受到青睐。目前开始渐渐流行的矩阵分解方法有分解机(Factorization Machine)和张量分解(Tensor Factorization)。
c) 基于深度学习的方法:目前两层的神经网络RBM都已经有很是好的推荐算法效果,而随着深度学习和多层神经网络的兴起,之后可能推荐算法就是深度学习的天下了?目前看最火爆的是基于CNN和RNN的推荐算法。
参考:https://www.cnblogs.com/pinard/p/6349233.html