真|真 · 推荐系统入门
本人有幸在秋招的节骨眼上,在大厂实习,又恰好需要做推荐这一块。故写下零星,抛砖引玉。
简述
推荐出现的意义:在日常生活中,很多时候,信息太多,无法自己甄别;这时候又需要了解新姿势,那不如让代码替你实现。这就是推荐,推荐和搜索的最大区别就是是否有明确的目的性。
譬如:听歌,看电影,逛淘宝 很多时候都是APP默默为你实现推送
了解了推荐的目的,再来看看传统的推荐过程——算法
1. 基于邻域的推荐
这类算法完全就只是分析统计信息,连loss函数都木有
场景 有场景更好理解:有 A B C D 4个user;同时有a b c d e 5个item
A | a b d |
---|---|
B | a c |
C | b e |
D | c d e |
1.1 UserCF UserCF就是基于用户的协同过滤。一句话概括就是给你推荐和你兴趣相符的User(下面统称为U)喜欢的Item(统称为 I I I),并且你没有接触过。
首先:
直观感受是 购买行为越相似的用户越有参考价值。如此构建用户相似度矩阵 W W W
A | B | C | D | |
---|---|---|---|---|
A | 0 | 1 | 1 | 1 |
B | 1 | 0 | 0 | 1 |
C | 1 | 0 | 0 | 1 |
D | 1 | 1 | 1 | 0 |
这样得到了每个 U U U的表示
计算相似度
一般来说余弦相似度是最好的衡量标准。假定两两间的相似度已经算好了为 S S S (similarity)
推荐
那没有买过的东西理论上都可以推荐,实际操作是通过与当前User的top K个最相似的User来计算推荐得分(不同item取的Top K个User不一样 那些没有购买的User尽管和当前User很像也不计算在内)。
对于上面场景的A来说,对c d没有购买行为,对c有购买行为是B D,当 K = 3 K=3 K=3时,B D都会被算上来,推荐得分为:
p ( A , c ) = ∑ S A ( ? ) = S A B + S A D p(A, c) = \sum S_{A(?)}=S_{AB}+S_{AD} p(A,c)=∑SA(?)?=SAB?+SAD?
以此类推,得到每一个没有购买记录的商品的推荐得分。并设定阈值,决定是否推送~
自此UserCF的框架就讲完了,是不是很easy呢~~
1.2 ItemCF ItemCF就是基于物品的协同过滤。一句话概括就是根据你以往有兴趣的Item 给你推荐类似的,你没有接触过的Item(统称为 I I I)
首先:
每个item的怎么表示呢?最简单的想法就是根据user的购买行为来确定。如此构建物品相似度矩阵 W W W
a | b | c | d | e | |
---|---|---|---|---|---|
a | 0 | 1 | 0 | 2 | 0 |
b | 1 | 0 | 2 | 2 | 1 |
c | 0 | 2 | 0 | 2 | 1 |
d | 2 | 2 | 2 | 0 | 1 |
e | 0 | 1 | 1 | 0 | 0 |
这样得到了每个 I I I的表示
计算相似度
一般来说余弦相似度是最好的衡量标准。假定两两间的相似度已经算好了为 S S S (similarity)
推荐
那没有买过的东西理论上都可以推荐,对于I i I_i Ii?的推荐得分是通过与当前 I i I_i Ii?最相似的并且有过购买的top K个item来计算(不同item取的Top K个item也不一样)。
对于上面场景的A来说,对c d没有购买行为,当 K = 3 K=3 K=3时,a b d 都会被算上来,推荐得分为:
p ( A , c ) = ∑ S ( ? ) c = S a c + S b c + S d c p(A, c) = \sum S_{(?)c}=S_{ac}+S_{bc}+S_{dc} p(A,c)=∑S(?)c?=Sac?+Sbc?+Sdc?
以此类推,得到每一个没有购买记录的商品的推荐得分。并设定阈值,决定是否推送~
如图:
user A对a b d有购买行为(可以有购买意向权重 本文都是1),基于Item的相似度,计算出c d的推荐得分。
![真|真 · 推荐系统入门](https://img.it610.com/image/info8/9eb6f231cebd4a7b8a6712b2d6eff3f3.jpg)
文章图片
自此ItemCF的框架就讲完了,可以发现ItemCF的可解释性强多了,可以告诉你是因为哪个Item系统才会推荐给你
User v.s. Item 我们来总结下这两个经典算法吧!
UserCF | ItemCF | |
---|---|---|
适用场景 | 因为算法需要维护一个User相似度矩阵,适合item于太多,而user远小于item,节约计算资源 比如新闻领域,每天产生的新闻增量太大,浏览很快,而user不会;并且他的本质是推荐和你兴趣相似user喜欢的item,而大多数user肯定都会喜欢热门商品,对于长尾部分发掘不利,但也是因为它更追热点,所以相对来说推荐得更有时效性。 | 因为算法需要维护一个Item相似度矩阵,适合于user太多,而item远小于user,节约计算资源;它的本质是挖掘你之前的喜好,进而推荐,可以说更具个性化,而个性化和挖掘长尾正是电商所需要的~ 并且相对来说电商行业item不会增长得过于迅速,相对稳定 |
实时性 | 当user自己有新喜欢的东西时,因为本质是根据别的user来推荐,所以对自己的推荐列表并不会有即时的改变,相当于“隔山打牛”hhh | 当用户有新喜欢的东西时,因为本质是对历史兴趣进行推荐,所以TOP K个item里就有刚刚点?的那个~ 推荐列表在下次更新时立马发生变化 |
冷启动 | 结合实时性进行分析,当user只对少数item点?时,分两块:1. 对于自己来说选取的TOP K个user很难和之前的user有明显差异,自己是处于冷启动的;但是对于TOP K列表出现自己的user,改变是即时的(可以不更新user相似度矩阵);2. 对于新上线的物品,只要有用户对它表示喜欢,立马就有可能被推荐(可以不更新user相似度矩阵) | 结合实时性进行分析,当user只对一个item点?时,分两块:1. 对于这个user本身推荐列表改变都是即时的,对于已有item,推荐列表的更新可以不更新user相似度矩阵,对于别的user不更新物品相似度表毫无影响(冷启动);2. 对于新上线的物品,那么冷启动在于一定需要更新一遍物品相似度表才可以,很容易理解了 |
可解释性 | 无 | 根据以往user的行为 |
同时本博文的思路和部分内容均来自《推荐系统实战》
推荐阅读
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 成交的种子咖啡冥想
- 年味真的是越来越淡了么
- 说的真好
- 科学养胃,别被忽悠,其实真的很简单
- 有父母作榜样的家才是真正的学区房
- 有些人真的走着走着就散了
- 历史教学书籍
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 有种聊天真不讨喜