推荐系统三十六式
刑无刀
“贝壳找房”资深算法专家,8年推荐系统工程师
立即订阅
11421 人已学习
课程目录
已完结 39 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 用知识去对抗技术不平等
免费
第1章 概念篇 (3讲)
【概念篇】你真的需要个性化推荐系统吗?
【概念篇】个性化推荐系统那些绕不开的经典问题
【概念篇】这些你必须应该具备的思维模式
第2章 原理篇 (20讲)
【内容推荐】画鬼容易画人难:用户画像的“能”和“不能”
【内容推荐】从文本到用户画像有多远
【内容推荐】超越标签的内容推荐系统
【近邻推荐】人以群分,你是什么人就看到什么世界
【近邻推荐】解密“看了又看”和“买了又买”
【近邻推荐】协同过滤中的相似度计算方法有哪些
【矩阵分解】那些在Netflix Prize中大放异彩的推荐算法
【矩阵分解】Facebook是怎么为十亿人互相推荐好友的
【矩阵分解】如果关注排序效果,那么这个模型可以帮到你
【模型融合】经典模型融合办法:线性模型和树模型的组合拳
【模型融合】一网打尽协同过滤、矩阵分解和线性模型
【模型融合】深度和宽度兼具的融合模型 Wide and Deep
【MAB问题】简单却有效的Bandit算法
【MAB问题】结合上下文信息的Bandit算法
【MAB问题】如何将Bandit算法与协同过滤结合使用
【深度学习】深度学习在推荐系统中的应用有哪些?
【深度学习】用RNN构建个性化音乐播单
【其他应用算法】构建一个科学的排行榜体系
【其他应用算法】实用的加权采样算法
【其他应用算法】推荐候选池的去重策略
第3章 工程篇 (10讲)
【常见架构】典型的信息流架构是什么样的
【常见架构】Netflix个性化推荐架构
【常见架构】总览推荐架构和搜索、广告的关系
【关键模块】巧妇难为无米之炊:数据采集关键要素
【关键模块】让你的推荐系统反应更快:实时推荐
【关键模块】让数据驱动落地,你需要一个实验平台
【关键模块】 推荐系统服务化、存储选型及API设计
【效果保证】推荐系统的测试方法及常用指标介绍
【效果保证】道高一尺魔高一丈:推荐系统的攻防
【开源工具】和推荐系统有关的开源工具及框架介绍
第4章 产品篇 (3讲)
【产品篇】推荐系统在互联网产品商业链条中的地位
【产品篇】说说信息流的前世今生
【团队篇】组建推荐团队及工程师的学习路径
尾声与参考阅读 (2讲)
推荐系统的参考阅读
【尾声】遇“荐”之后,江湖再见
推荐系统三十六式
登录|注册

【近邻推荐】人以群分,你是什么人就看到什么世界

刑无刀 2018-03-19
要说提到推荐系统中,什么算法最名满天下,我想一定是协同过滤。在很多场合,甚至有人把协同过滤和推荐系统划等号,可见二者的关系多么紧密。
协同过滤的重点在于“协同”,所谓协同,也就是群体互帮互助,互相支持是集体智慧的体现,协同过滤也是这般简单直接,历久弥新。

协同过滤

当你的推荐系统度过了只能使用基于内容的推荐阶段后,就有了可观的用户行为了。这时候的用户行为通常是正向的,也就是用户或明或暗地表达着喜欢的行为。这些行为可以表达成一个用户和物品的关系矩阵,或者说网络、或者说是图,都是一个东西。
这个用户物品的关系矩阵中填充的就是用户对物品的态度,但并不是每个位置都有,需要的就是把那些还没有的地方填起来。这个关系矩阵是协同过滤的命根子,一切都围绕它来进行。
协同过滤是一个比较大的算法范畴。通常划分为两类:
基于记忆的协同过滤(Memory-Based);
基于模型的协同过滤(Model-Based)。
基于记忆的协同过滤,现在看上去极其简单,就是记住每个人消费过什么东西,然后给他推荐相似的东西,或者推荐相似的人消费的东西。基于模型的协同过滤则是从用户物品关系矩阵中去学习一个模型,从而把那些矩阵空白处填满。
接下来一段时间,我们就围绕这两个类别的协同过滤与你好好聊聊。今天我先来说的是基于记忆的协同过滤的一种——基于用户,或者叫做 User-Based, User to User。

基于用户的协同过滤

背后的思想

你有没有过这种感觉,你遇到一个人,你发现他喜欢的书、喜欢的电影也基本上都是你喜欢的,从此以后,你就想老是想问他:还有什么好推荐的,最近又看了什么书,最近又看了什么电影?甚至不惜和他撞衫,和他穿一个风格的衣服。
对喽,这个感觉非常地自然直接,它就是基于用户的协同过滤背后思想。详细来说就是:先根据历史消费行为帮你找到一群和你口味很相似的用户;然后根据这些和你很相似的用户再消费了什么新的、你没有见过的物品,都可以推荐给你。
这就是我们常说的人以群分,你是什么人,你就会遇到什么人,所以说,要谨慎交友啊。
这其实也是一个给用户聚类的过程,把用户按照兴趣口味聚类成不同的群体,给用户产生的推荐就来自这个群体的平均值;所以要做好这个推荐,关键是如何量化“口味相似”这个看起来很直接简单的事情。这关系到一个用户会跟哪些人在同一个房间内,万一进错了房间,影响就会不好。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《推荐系统三十六式》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(32)

  • jt120
    看了前面,想吐槽,这不是推荐系统实战书里的东西吗?越往后看,发展干货越多,套路啊。
    期待更多的干货

    作者回复: 放学别走,你给我等着。

    2018-03-19
    11
  • Citi Lai
    今天對於技術細節描述稍微抽象,是否有建議範例程式碼的參考?謝謝!

    作者回复: 专栏以手机阅读为主,所以就尽量不放代码,只讲原理。后面会有图书计划,那里面会补上代码。适合深度阅读。

    2018-03-19
    1
    7
  • xzyline
    本身不是做推荐的,有什么比较好的途径可以实践一下这些推荐知识。

    作者回复: Kaggle 上参加比赛。

    2018-03-19
    6
  • 张方
    您好 我对mapreduce进行相似度计算不是很理解 能给一个model
    2018-05-25
    4
  • idiotslkp
    老师你好,我之前从来没接触过推荐系统这些东西,我发现你说的我很多知识点都看不懂,想学又不知道从哪入手,学习推荐系统应该提前具备的相关知识是?烦请老师给我指导一下,我去学习相关知识后再来看......
    2018-03-29
    3
  • crazypeng6
    我是刚毕业的非计算机硕士,在一个小公司做算法,最近要做一个新闻类APP,需要用推荐系统(先从简单的做起),感觉只用协同过滤不够,可我没做过文本分类,该如何下手啊,有没有实战强一点的书籍和或者视频可以推荐啊,现在好迷茫,求大佬指点啊,不胜感激!
    2018-04-13
    2
  • 张贝贝
    请问一下,CSR中的行偏移和行号有什么区别,没看明白
    2019-02-28
    1
  • 预见
    “把计算过程分解为Map Redeuce任务。
        1. 遍历每个用户喜欢的物品列表;
        2. 获取该用户的相似用户列表;
        3. Map阶段:把每一个喜欢的物品 Map 成两个记录发射出去,一个是键为<相似用户ID,物品ID,1> 三元组,可以拼成一个字符串,值为<相似度>;另一个是键为 < 相似用户ID,物品ID,0>三元组,值为<喜欢程度*相似度>,其中的 1 和 0 为了区分两者。
        4. Reduce 阶段,求和后输出;
        5. <相似用户ID,物品ID,0>的值除以 < 相似用户ID,物品ID,1>的值”。
    老师为什么要做这两个值的比值呢?直接对<喜欢程度*相似度>求和不行吗?
    2018-12-09
    1
  • 左瞳
    推荐分数的mapreduce过程的时候,两个三元对应的value是相似度和相似度*喜欢程度,既然两个已经知道了,你后面相除有啥意义?
    2018-09-29
    1
  • @lala0124
    老师,您好。我想问一下计算推荐分数的MapReduce过程的Reduce不是对相同key的value
    执行某种操作吗?那这里的key是一个三元组,key相同的标准是什么?有说的不对的地方还请老师指正。

    作者回复: 三元组你可以把他们拼成一个字符串。就是key了。

    2018-03-22
    1
  • 星星之火
    邢老师你好。如果矩阵太稀疏,一个人只作用一两个物品的话,用协同过滤效果不太好。可以采用哪些方法解决呢?

    作者回复: 先考虑把基于内容的做好。

    2018-03-19
    1
  • Grace
    本节讲的推荐计算是根据用户的日志实时更新的吗?谢谢

    作者回复: 相似度计算不是,推荐部分可以。

    2018-03-19
    1
  • neohope
    试着回答一下老师的两个问题:

    1、相似度计算本身如果遇到超大维度向量怎么办;
    感觉超大维度的解决方式应该从业务领域出发,将维度进行切分。
    比如淘宝,如果所有类型的产品都用一个维度展示是不太现实的。
    直观上可以按衣服、书籍、电子产品进行维护拆分,然后分别进行推荐。

    2、两两计算用户相似度遇到用户量很大怎么办
    建议对用户进行聚类,对于每个类下面的用户,再计算相似度。

    另外,文中mapreduce做推荐计算那里,建议增加一句:
    根据计算的分值,进行排名,然后将排名高的产品推荐给用户。
    2019-12-03
  • Geek_94b54f
    为老师鼓掌
    2019-08-26
  • Geek_3d9942
    增加喜欢程度的衰减,........值和喜欢行为发生时间间隔正相关即可????不应该是负相关吗?

    2019-07-23
  • 漂泊的小飘
    幸亏我学过人工智能课和大数据课……不然这节又看不懂了
    2019-07-01
  • shangqiu86
    之前我们组其他同事做过基于物品的协同过滤和基于用户的协同过滤效果对比,发现基于物品的协同过滤效果比较好,后面我去分析这个产品的数据的时候,发现这个众筹产品,用户行为相当稀疏,找寻到的用户的相似用户群体就很难准确,所以基于用户的协同过滤效果不好。
          之后我自己实践了协同过滤算法,我发现当用户行为很稀疏的时候,很容易发生稀疏数据倾斜,举个例子,当一个用户点击了10个sku,而其中8个sku都没有被其他用户点击过,那么基于物品的协同过滤出来的时候,这个8个sku与另外两个sku的相似度就是1,也就是最高的那个值,其实这是不合理的,所以要根据数据的稀疏情况,或者进行只被一个用户点过的sku的剔除,或者改进公式,加入sku的点击用户数这个因子。老师,您觉得呢?
    2019-04-28
  • 帅帅
    spark和mapreduce的编程方式完全不一样,写过原生mapreduce的人表示,用过spark后,再也没写过mapreduce了。
    2018-09-22
  • *Smile*~
    请问基于用户的协同过滤如何解决冷启动的问题呢
    2018-09-10
    1
  • Geek_e1c6a0
    老师您好,看了这篇专栏感觉收获很大。同时也有个问题,用户行为可能有很多种类,比如,点赞,评论,收藏。这时候,如果要计算用户相似度,是应该把各种行为加权求和得到一个分值用于计算,还是各种行为独立计算各自的相似度矩阵呢。如果采用加权求和的方式,确定各种行为的权重又是个麻烦的问题。
    还望老师指导一下。谢谢
    2018-05-09
收起评论
32
返回
顶部