转自:https://www.jianshu.com/p/1464eab67711

推荐算法分类

1 个性化推荐

1.1 基于用户推荐(Demographic-based Recommendation)

推荐流程:

  1. 获取用户的注册信息。
  2. 根据用户的注册信息对用户分类。
  3. 给用户推荐她所属分类中用户喜欢的物品。

1.2 基于内容推荐(Content-based Recommendation)

思想:

根据用户过去的浏览记录,向用户推荐用户没有接触过的推荐项。

推荐步骤:

一般是基于关键词进行推荐,比如看了《权力的游戏1》就给你推荐后面的剧集,但是可能推荐重复,因为关键词相同。

优点:

没有冷启动问题
不需要惯用数据
没有流行度偏见,可以推荐有罕见特性的项
可以使用用户内容特性来提供解释

缺点:

项内容必须是机器可读的和有意义的
容易归档用户
很难有意外,缺少多样性
很难联合多个项的特性

1.3 基于关联规则推荐(Association Rule-based Recommendation)

思想:

在一个交易数据库中统计购买了商品集X的交易中有多大比例的交易同时购买了商品集Y。

1.4 基于效用推荐(Utility-based Recommendation)

思想:

基础理论:效用函数。

1.5 基于知识推荐(Knowledge-based Recommendation)

思想:

建议某一领域的一套规则,进行推荐。

1.6 协同过滤算法(Collaborative Filtering)

优点:

需要最小域
不需要用户和项
大部分场景中能够产生足够好的结果

缺点:

冷启动问题
需要标准化产品
需要很高的用户和项的比例(1:10)
流行度偏见(有长尾的时候表现不够好)
难于提供解释

1.6.1 基于领域的方法(neighborhood-based)

1.6.1.2 基于用户的协同推荐(UserCF)

思想:

给用户推荐和他兴趣相似的其他用户喜欢的物品。

推荐步骤:

  1. 找到和目标用户兴趣相似的用户集合。
  2. 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。

优缺点:

 性能:适用于用户较少的场合,如果用户很多,计算用户相似度矩阵代价很大。
 领域:时效性较强,社会性较强,用户个性化不太明显的领域。
 实时性:用户有新行为,不一定造成推荐结果的立即变化。
 冷启动:在新用户对很少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度表是每隔一段时间离线计算的。
  新物品上线后一段时间,一旦有用户对物品产生行为,就可以将新物品推荐给和对它产生行为的用户兴趣相似的其他用户。
 推荐理由:很难提供令用户信服的推荐解释。

1.6.1.2 基于内容的协同推荐(ItemCF)

思想:

给用户推荐和他之前喜欢的物品相似的物品。

推荐步骤:

 1. 计算物品的相似度。
 2. 根据物品的相似度和用户的历史行为给用户生成推荐列表。

优缺点:

 性能:适用于物品数明显小于用户数的场合,如果物品很多(网页),计算物品相似度矩阵代价很大。
 领域:长尾物品丰富,用户个性化需求强烈的领域。
 实时性:用户有新行为,一定会导致推荐结果的实时变化。
 冷启动:新用户只要对一个物品产生行为,就可以给他推荐和该物品相关的其他物品。但没有办法在不离线更新物品相似度表的情况下将新物品推荐给用户。
 推荐理由:利用用户的历史行为给用户做推荐解释,可以令用户比较信服。

1.6.2 基于模型的协同过滤(ItemCF)

思想:

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

主要方法:

  1. 关联算法
  2. 聚类算法
  3. 分类算法
  4. 回归算法
  5. 矩阵分解
  6. 神经网络
  7. 基于图的随机游走算法(random walk on graph)
  8. 隐语义模型LFM

1.6.2.1用关联算法做协同过滤

思想:

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

常用算法:

Apriori
FP Tree
PrefixSpan

1.6.2.2 用聚类算法做协同过滤

思想:

按照物品基于一定的距离度量来进行聚类。如果基于用户聚类,则可以将用户按照一定距离度量方式分成不同的目标人群,将同样目标人群评分高的物品推荐给目标用户。基于物品聚类的话,则是将用户评分高物品的相似同类物品推荐给用户。

常用算法:

K-Means
BIRCH
DBSCAN
谱聚类

1.6.2.3 用分类算法做协同过滤

思想:

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

常用算法:

1.[逻辑回归](http://www.cnblogs.com/pinard/p/6029432.html)

2.[朴素贝叶斯](http://www.cnblogs.com/pinard/p/6069267.html)

1.6.2.4 用回归算法做协调过滤

思想:

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

常用算法:

[线性回归](http://www.cnblogs.com/pinard/p/6004041.html)

[决策树](http://www.cnblogs.com/pinard/p/6053344.html)

[支持向量机,线性支持回归](http://www.cnblogs.com/pinard/p/6113120.html)

1.6.2.5 用矩阵分解做协同过滤

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

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

1.6.2.6 用神经网络做协调过滤

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

1.6.2.7 用图模型做协同过滤

思想:

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

推荐步骤:

1. 将用户和对应行为用图模型表示出来。

2. 在图模型中,从某用户的对应节点开始进行随机游走,最终得出物品的权重,进行推荐。

1.6.2.7 隐语义方法

思想:

  通过潜在特征联系用户和物品。
  隐语义模型主要是基于NLP的,涉及到对用户行为的语义分析来做评分推荐,主要方法有隐性语义分析LSA和隐含狄利克雷分布LDA。

推荐步骤:

 1. 基于用户的行为统计,按用户兴趣给物品分类。
 2. 确定用户对哪些类别的物品感兴趣,以及感兴趣的程度。
 3. 确定不同类别物品的权重,选择性推荐给用户。

分类:

 1. pLSA
 2. LDA
 3. 隐含类别模型( latent class model )
 4. 隐含主题模型( latent topic model )
 5. 隐含矩阵分解( matrix factorization )

1.7 混合推荐算法

思想:

综合利用协同过滤推荐算法和基于内容的推荐算法各自的优点同时抵消各自的缺点。

常用算法:

加权

交换

混合

特性组合

案列

特征增强

元层次

优点:

由于单独使用协同过滤推荐算法和基于内容的推荐算法
没有冷启动问题
没有流行度偏见,可推荐有罕见特性的项
可产生意外,实现多样性

缺点:

需要通过大量的工作才能得到正确的平衡。

1.8 基于图的随机游走算法(random walk on graph)

思想:

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

1.9 基于深度学习的推荐算法

思想:

推荐步骤:

常用算法:

典型案例:

Youtube 基于深度学习的推荐算法:

论文:[《Deep Neural Networks for YouTube Recommendations》](https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/45530.pdf)

2 非个性化推荐

2.1 基于规则的推荐

思想:

基于最多用户点击,最多用户浏览等,在目前的大数据时代并不主流。

2.2 基于人口统计信息的推荐

思想:

简单的根据系统用户的基本信息发现用户的相关程度,然后进行推荐,目前在大型系统中已经较少使用。

协同过滤的新方向

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

  1. 基于集成学习的方法和混合推荐:这个和混合推荐也靠在一起了。由于集成学习的成熟,在推荐算法上也有较好的表现。一个可能取代逻辑回归的算法是GBDT。目前GBDT在很多算法比赛都有好的表现,而有工业级的并行化实现类库。
  2. 基于矩阵分解的方法:矩阵分解,由于方法简单,一直受到青睐。目前开始渐渐流行的矩阵分解方法有分解机(Factorization Machine)和张量分解(Tensor Factorization)。
  3. 基于深度学习的方法:目前两层的神经网络RBM都已经有非常好的推荐算法效果,而随着深度学习和多层神经网络的兴起,以后可能推荐算法就是深度学习的天下了?目前看最火爆的是基于CNN和RNN的推荐算法。
  4. 上下文感知推荐
  5. 学习等级
  6. Mutil-armed bandits(探索/开发)
  7. 社会推荐

优点:

利于勉强维持最终性能百分点
你可以说你正在使用渐进的方式

缺点:

难于理解
缺乏推荐工具支持
没有为你的首个推荐系统提供推荐的方式

3 冷启动(Cold Start)问题

分类:

用户冷启动:解决如何给新用户做个性化推荐的问题。

物品冷启动:解决如何将新的物品推荐给可能对它感兴趣的用户。

系统冷启动:解决如何在一个新开发的网站上(还没有用户,也没有用户行为,只有一些物品的信息)设计个性化推荐系统,从而在网站刚发布时就让用户体验到个性化推荐服务这一问题。

提供非个性化的推荐:eg 热门排行榜。

推荐算法(二)--算法总结相关推荐

  1. 例题代码|程序设计与算法(二) 算法基础 北大 郭炜 中国大学MOOC 笔记

    网站链接

  2. 基于协同过滤算法的电影推荐系统设计(二) - ALS算法详解

    0 系列文章目录 0.1 基于协同过滤算法的电影推荐系统设计(一) - 项目简介 0.2 基于协同过滤算法的电影推荐系统设计(二) - 推荐系统介绍 ALS是alternating least squ ...

  3. 【推荐算法】从零开始做推荐(二)——TopK推荐的评价指标,计算原理与样例

    前言   推荐系统的评价指标在不同类型的推荐场景下,选用的不同.有些推荐的评价指标并非完全出自推荐系统,而是从搜索算法,信息检索,机器学习等相关领域沿用过来,因此网上有些对评价指标的解释并非完全以推荐 ...

  4. 关于推荐的一个算法工程师访谈,有一些内容值得看看

    http://www.csdn.net/article/2015-09-30/2825828 基于Spark GraphX,弃GBDT和LR用FM 发表于2015-09-30 09:53| 9644次 ...

  5. 热烈推荐: A*算法 (启发式搜索的入门篇,必看)转载

    热烈推荐: A*算法 (启发式搜索的入门篇,必看)转载 (2005-10-8 21:56)在搜索式算法中,A*算法算是个分水岭.因为它引入了启发式估价函数,从"瞎搜"转化到了&qu ...

  6. 探索推荐引擎内部的秘密:深入推荐引擎相关算法 - 协同过滤

    上一篇转载的博客<探索推荐引擎内部的秘密 - 推荐引擎初探>,详细讲述了推荐引擎的原理.算法.应用,并且给出了一些优化的trick,真心不错. 这里把第二篇<探索推荐引擎内部的秘密 ...

  7. 推荐系统[八]算法实践总结V0:淘宝逛逛and阿里飞猪个性化推荐:召回算法实践总结【冷启动召回、复购召回、用户行为召回等算法实战】

    搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排).系统架构.常见问题.算法项目实战总结.技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排 ...

  8. 使用pytorch从零开始实现YOLO-V3目标检测算法 (二)

    原文:https://blog.csdn.net/u011520516/article/details/80212960 博客翻译 这是从零开始实现YOLO v3检测器的教程的第2部分.在上一节中,我 ...

  9. 探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤

    本系列的第一篇为读者概要介绍了推荐引擎,下面几篇文章将深入介绍推荐引擎的相关算法,并帮助读者高效的实现这些算法.在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法.它以其方法 ...

  10. 二、【绪论】算法和算法评价

    算法和算法评价 1 算法的基本概念 算法(Algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作.一般具有下列5个重要特性: 有穷性:一个算法必须在执 ...

最新文章

  1. 链表问题3——删除链表的a/b处的节点(进阶)
  2. 毒霸duba劫持首页的解决方案(实测有效)
  3. 隹悦服务器批量控制软件
  4. PHP案例:实现数据库增删改查功能
  5. 【Flink】FLink Assigned key must not be null
  6. .NET 4.0 Beta2中的BigInteger和Complex类(转)
  7. nginx 性能优化的概述及在CPU资源方面的处理
  8. ASP.NET2.0 Person Web Site:将图片以二进制的从数据库读取
  9. 适配器自动分配的169开头的地址_代理ip地址怎么换
  10. 【图像分割】基于matlab 2D水平集三维医学图像分割【含Matlab源码 584期】
  11. Chrom安装Axure插件浏览原型图
  12. [实用技巧]如何关闭VS中烦人的reference提示
  13. 流媒体有哪些播放方式?流媒体视频三种播放方式介绍
  14. 不同行业本地SEO和地域性SEO技巧
  15. C++实现自动出算术题
  16. 【面经】2022年软件测试面试题大全(持续更新)附答案
  17. 芯片的发展现状以及未来发展趋势
  18. 人工智能的八大业界领先的机器学习使用场景
  19. python毒酒检测_Turkey HSD检验法/W法
  20. 单片机c语言篮球比分_单片机篮球比赛计分器设计方案与程序详解

热门文章

  1. Ubuntu18.04 安装wine
  2. ALSA之PCM分析
  3. UAC1.0和UAC2.0区别(八)
  4. usb audio -- 异步方式介绍(1)
  5. Ubuntu18.04编译Android源码openssl版本过高
  6. VALSE学习(十四):自主学习
  7. shell与shell脚本
  8. 显示器信号接口的发展历程
  9. python torchvision_pip install torchvision error:安装版本为0.4.1的torch后继续安装torchvision报错...
  10. Java继承_这10道Java面试题!大部分的人回答不出来