数据结构与算法之美
王争
前Google工程师
立即订阅
71638 人已学习
课程目录
已完结 75 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 从今天起,跨过“数据结构与算法”这道坎
免费
入门篇 (4讲)
01 | 为什么要学习数据结构和算法?
02 | 如何抓住重点,系统高效地学习数据结构与算法?
03 | 复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?
04 | 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度
基础篇 (38讲)
05 | 数组:为什么很多编程语言中数组都从0开始编号?
06 | 链表(上):如何实现LRU缓存淘汰算法?
07 | 链表(下):如何轻松写出正确的链表代码?
08 | 栈:如何实现浏览器的前进和后退功能?
09 | 队列:队列在线程池等有限资源池中的应用
10 | 递归:如何用三行代码找到“最终推荐人”?
11 | 排序(上):为什么插入排序比冒泡排序更受欢迎?
12 | 排序(下):如何用快排思想在O(n)内查找第K大元素?
13 | 线性排序:如何根据年龄给100万用户数据排序?
14 | 排序优化:如何实现一个通用的、高性能的排序函数?
15 | 二分查找(上):如何用最省内存的方式实现快速查找功能?
16 | 二分查找(下):如何快速定位IP对应的省份地址?
17 | 跳表:为什么Redis一定要用跳表来实现有序集合?
18 | 散列表(上):Word文档中的单词拼写检查功能是如何实现的?
19 | 散列表(中):如何打造一个工业级水平的散列表?
20 | 散列表(下):为什么散列表和链表经常会一起使用?
21 | 哈希算法(上):如何防止数据库中的用户信息被脱库?
22 | 哈希算法(下):哈希算法在分布式系统中有哪些应用?
23 | 二叉树基础(上):什么样的二叉树适合用数组来存储?
24 | 二叉树基础(下):有了如此高效的散列表,为什么还需要二叉树?
25 | 红黑树(上):为什么工程中都用红黑树这种二叉树?
26 | 红黑树(下):掌握这些技巧,你也可以实现一个红黑树
27 | 递归树:如何借助树来求解递归算法的时间复杂度?
28 | 堆和堆排序:为什么说堆排序没有快速排序快?
29 | 堆的应用:如何快速获取到Top 10最热门的搜索关键词?
30 | 图的表示:如何存储微博、微信等社交网络中的好友关系?
31 | 深度和广度优先搜索:如何找出社交网络中的三度好友关系?
32 | 字符串匹配基础(上):如何借助哈希算法实现高效字符串匹配?
33 | 字符串匹配基础(中):如何实现文本编辑器中的查找功能?
34 | 字符串匹配基础(下):如何借助BM算法轻松理解KMP算法?
35 | Trie树:如何实现搜索引擎的搜索关键词提示功能?
36 | AC自动机:如何用多模式串匹配实现敏感词过滤功能?
37 | 贪心算法:如何用贪心算法实现Huffman压缩编码?
38 | 分治算法:谈一谈大规模计算框架MapReduce中的分治思想
39 | 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想
40 | 初识动态规划:如何巧妙解决“双十一”购物时的凑单问题?
41 | 动态规划理论:一篇文章带你彻底搞懂最优子结构、无后效性和重复子问题
42 | 动态规划实战:如何实现搜索引擎中的拼写纠错功能?
高级篇 (9讲)
43 | 拓扑排序:如何确定代码源文件的编译依赖关系?
44 | 最短路径:地图软件是如何计算出最优出行路径的?
45 | 位图:如何实现网页爬虫中的URL去重功能?
46 | 概率统计:如何利用朴素贝叶斯算法过滤垃圾短信?
47 | 向量空间:如何实现一个简单的音乐推荐系统?
48 | B+树:MySQL数据库索引是如何实现的?
49 | 搜索:如何用A*搜索算法实现游戏中的寻路功能?
50 | 索引:如何在海量数据中快速查找某个数据?
51 | 并行算法:如何利用并行处理提高算法的执行效率?
实战篇 (5讲)
52 | 算法实战(一):剖析Redis常用数据类型对应的数据结构
53 | 算法实战(二):剖析搜索引擎背后的经典数据结构和算法
54 | 算法实战(三):剖析高性能队列Disruptor背后的数据结构和算法
55 | 算法实战(四):剖析微服务接口鉴权限流背后的数据结构和算法
56 | 算法实战(五):如何用学过的数据结构和算法实现一个短网址系统?
加餐:不定期福利 (6讲)
不定期福利第一期 | 数据结构与算法学习书单
不定期福利第二期 | 王争:羁绊前行的,不是肆虐的狂风,而是内心的迷茫
不定期福利第三期 | 测一测你的算法阶段学习成果
不定期福利第四期 | 刘超:我是怎么学习《数据结构与算法之美》的?
总结课 | 在实际开发中,如何权衡选择使用哪种数据结构和算法?
《数据结构与算法之美》学习指导手册
加餐:春节7天练 (7讲)
春节7天练 | Day 1:数组和链表
春节7天练 | Day 2:栈、队列和递归
春节7天练 | Day 3:排序和二分查找
春节7天练 | Day 4:散列表和字符串
春节7天练 | Day 5:二叉树和堆
春节7天练 | Day 6:图
春节7天练 | Day 7:贪心、分治、回溯和动态规划
加餐:用户学习故事 (2讲)
用户故事 | Jerry银银:这一年我的脑海里只有算法
用户故事 | zixuan:站在思维的高处,才有足够的视野和能力欣赏“美”
结束语 (3讲)
结束语 | 送君千里,终须一别
第2季回归 | 这一次,我们一起拿下设计模式!
打卡召集令 | 60 天攻克数据结构与算法
免费
数据结构与算法之美
登录|注册

47 | 向量空间:如何实现一个简单的音乐推荐系统?

王争 2019-01-14
很多人都喜爱听歌,以前我们用 MP3 听歌,现在直接通过音乐 App 在线就能听歌。而且,各种音乐 App 的功能越来越强大,不仅可以自己选歌听,还可以根据你听歌的口味偏好,给你推荐可能会喜爱的音乐,而且有时候,推荐的音乐还非常适合你的口味,甚至会惊艳到你!如此智能的一个功能,你知道它是怎么实现的吗?

算法解析

实际上,要解决这个问题,并不需要特别高深的理论。解决思路的核心思想非常简单、直白,用两句话就能总结出来。
找到跟你口味偏好相似的用户,把他们爱听的歌曲推荐给你;
找出跟你喜爱的歌曲特征相似的歌曲,把这些歌曲推荐给你。
接下来,我就分别讲解一下这两种思路的具体实现方法。

1. 基于相似用户做推荐

如何找到跟你口味偏好相似的用户呢?或者说如何定义口味偏好相似呢?实际上,思路也很简单,我们把跟你听类似歌曲的人,看做口味相似的用户。你可以看我下面画的这个图。我用“1”表示“喜爱”,用“0”笼统地表示“不发表意见”。从图中我们可以看出,你跟小明共同喜爱的歌曲最多,有 5 首。于是,我们就可以说,小明跟你的口味非常相似。
我们只需要遍历所有的用户,对比每个用户跟你共同喜爱的歌曲个数,并且设置一个阈值,如果你和某个用户共同喜爱的歌曲个数超过这个阈值,我们就把这个用户看作跟你口味相似的用户,把这个用户喜爱但你还没听过的歌曲,推荐给你。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《数据结构与算法之美》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(37)

  • 刑无刀
    讲得好!对推荐系统感兴趣,可以订阅《推荐系统36式》,哈哈哈哈哈哈哈。

    编辑回复: 给刑无刀老师打call!对这节内容感兴趣可以订阅《推荐系统36式》😄

    2019-02-18
    1
    32
  • 許敲敲
    具体的基于用户相似来推荐的话,如果每个用户喜欢的歌曲数量很大,或者说用户数也很多的情况下,也就是考虑到老师画的表 行列都很多,是不是相当于矩阵的维数很大,这样找到两个向量的距离是有什么trick嘛?或者该用什么算法计算比较好?

    作者回复: 你指出的这点很好,我会晚点再写一下,补充到文章里。

    2019-01-14
    3
    11
  • 莫弹弹
    高级篇的人越来越少了……
    我觉得,推荐可以看成一种选优,所以思维上可以跳出“推荐”两个字,进而扩展“相似”“热门”等等这类场景
    例如搜索引擎关键词拼写错误的推荐词,导航app的推荐路径,电商的热门商品等,都可以用上推荐算法
    2019-01-14
    10
  • Kudo
    推荐系统(Recommender System)是典型的机器学习应用场景。其核心就是通过算法得到用户偏好向量以及内容向量,两个向量的内积即为用户对内容的的评分预测(即用户对某内容的喜好程度)。推荐学习算法本质上就是学习这两个向量的过程。
    通常有两种方法:
    1. 已知内容向量,学习用户偏好向量的方法就是基于内容的推荐算法(content-based);
    2. 用户偏好向量和内容向量都未知,则适合使用联合过滤算法(collaborative filtering)同时学习两个向量。
    2019-01-14
    6
  • alic
    其实就和nlp中计算两个句子之间的相似度类似。
    2019-01-14
    3
  • 刘哲
    老师,看了您的很多算法,我都很喜欢,但是我只是一个java后端研发,感觉学了没有用武之地,但因为已经工作几年了,又不可能再去转做算法工程师,看了喜欢却用不上,这种感觉很扎心啊,有办法让我们这种人把算法使用起来么

    作者回复: 说实话有点难啊,关注我的公号众:小争哥,我抽空写篇文章说说。

    2019-09-29
    2
    2
  • danvid
    我觉得用余弦近似度来判断相似程度更合理些
    2019-05-29
    2
  • orcababyface
    2.基于歌曲做推荐
    问题:老师的方案的逻辑是:人们对一首歌喜爱程度越一致,那么两首歌越相似。这不是很好吧?难道现在一般音乐app基于歌曲推荐都是这么做的?
    2019-01-18
    2
  • Peter Cheng
    基于相似用户做推荐,这一栏里。如果只有欧几里得距离作比较,应该不准确吧,用户,分享和收藏的是不同的歌曲,但是欧几里得距离相近。
    2019-01-14
    2
  • 李皮皮皮皮皮
    抱歉老师,我之前可能理解有点偏差,判断两首歌曲是否是同一类型,向量是横向构造的。
    2019-01-14
    1
  • yongxiang
    还可以用来推荐喜欢的商品
    2019-01-14
    1
  • 乾坤瞬间
    推荐算法的核心是计算相似度,推荐一个人可能最会关注并愿意下单的开始用,这是一种实实在在能够转换为物质的生产力模型。同时计算相似度的场景个人认为,比如文章分类,图片识别的应用场景
    2019-11-29
  • 美美
    同问海量用户,这个向量维度太特么高了,老师有空讲讲么

    作者回复: 课程已经结束了 暂时不会了

    2019-11-17
  • Edward
    能想到的应用场景
    1. 求职网的职位匹配推荐
    2. 婚姻网的对象偏好推荐
    3. 商城网的物品偏好推荐
    4. 新闻网的新闻消息推荐
    5. App Store 的游戏推荐
    ... ...(不是开玩笑,应用这么广泛)
    2019-10-29
  • junjun
    很多推荐系统都可以用啊,淘宝的推荐啊,
    2019-09-26
  • 李冲
    快追到课程结束了,从另外一个角度讲一下自己的想法,如有不适还请海涵。

    推荐系统加速了系统价值的开发,但领域的价值是有限的,必须不停的挖掘新领域来做大蛋糕。不管是消费用户的钱包,时间,还是情怀,都是有边际效应的。企业前期努力成长,后期做大了在存量市场里为了效益可能会有失偏驳。

    话说回来像王争老师这样走心的真少见,为了让用户变得更优秀来做产品值得赞赏。目前我就主动给同事和朋友推荐过王争和丁奇老师的课程,以后看的多了肯定会发现更多值得推荐的老师和课程。

    极客时间确实是一股清流,真正有志于而且能够布道的老师可以把自己的理解问题和思考对策的方式授人以渔。希望以后能够碰到更多优秀的老师做出这样的课程,为行业出力。

    作者回复: 感谢认可,今后我还会持续高质量输出,吹个牛逼,希望能为中国的it行业贡献一份力量:)

    2019-09-17
    1
  • 张三
    匿名社交app里边,基于各种标签来推荐好友
    2019-09-05
  • $Jason
    我看到这篇文章还是可以看懂的,但是对于海量的用户,我总不能一个个的计算他们的向量空间吧。那怎么做?

    作者回复: 这个就复杂了 一句两句说不清了 建议看人工智能的书籍

    2019-06-27
  • 王楚然
    弱弱的问,向量空间是求相似度的,朴素贝叶斯是分类的,但是分类到一起,是不是可以说相似度高?相似度高的,可不可以归为同一类?这俩方法算是解决同问题的方法吗?如果是有什么对比呢?如果不是为啥不是呢?

    作者回复: 相似度可以归为一类。你如果对这方面感兴趣的话,可以看下机器学习相关的书籍。

    2019-06-21
  • Geek_a0c415
    老师,后面会讲到向量夹角余弦么?

    作者回复: 不会了

    2019-06-11
收起评论
37
返回
顶部