【机器学习课程-华盛顿大学】:1 案例研究 1.5 推荐系统(1)概念描述
一、推荐系统
1、推荐系统简述
结合你和别人的历史购物信息,给你推荐合适的商品。
2、推荐系统应用场景:
(1)youtube:解决信息过载问题
(2)电影推荐
(3)商品推荐
兴趣、推荐还会随着时间的变化而变化,比如宝宝在不断成长,需要的东西也在不断变化。
(4)音乐推荐
(5)朋友推荐
3、搭建推荐系统
(1)最简单的方法:根据流行度构建
比如推荐文章,根据纽约时报的文章分享热度来推荐topN。
缺点:缺乏个性化,比如上述的例子只是根据纽约时报读者的阅读兴趣推荐的。
(2)分类模型
根据个人信息和购物信息来推荐商品
优点:
- 个性化:使用了个人信息和历史购物信息
- 特征能够包含很多信息:比如购物时间段
- 购物信息很少时,也能够起作用:比如只知道个人信息,年纪,就可以推荐商品
缺点:
- 特征很多,信息经常不全
二、协同过滤的同现矩阵co-occurrence matrix
1、协同过滤的同现现象
同现现象:此时用户购买了物品A,如果其他买过物品A的大部分用户都会买物品B,我们就把物品B推荐给当前用户。
比如有个用户买了婴儿尿布,我们发现买过尿布的大部分用户都会买婴儿湿巾,我们就把婴儿湿巾推荐给当前用户。
(1)同现矩阵:对称矩阵
(2)使用同现矩阵进行推荐
- 比如我们发现这个用户买了尿布diapers
- 我们就将同现矩阵中尿布diapers的这一行提出来
- 找到这一行中数值较大的项作为推荐
2、同现矩阵的归一化
(1)流行度问题
同现矩阵中,如果用流行度来的话,可能会出现推荐用品总是一个大热单品的问题。比如尿布,几乎所有妈妈都会买,这就导致尿布的销量很大,不管用户买什么,基于流行度的话,都会推荐尿布,这样是不对的。
(2)归一化同现矩阵:相似度矩阵
(3)根据当前购买物品的同现矩阵进行推荐的缺点和解决方法
这种方法的缺点是:只考虑当前的购买信息,没有把历史购物信息考虑进来。
解决方法:
- 将历史购买的物品加上权重:比如用户购买了尿布,牛奶,玩具,现在要给用户推荐婴儿湿巾,那么给历史购买的每个物品尿布,牛奶,玩具都加上一个权重,然后每一个都计算一次婴儿湿巾可能购买的可能性(就之前的方法,将同现矩阵的一行挑出来,然后看婴儿湿巾购买的次数)
(4)历史购买物品加权同现矩阵缺点
- 没有考虑购买时段
- 没有考虑用户信息
- 没有考虑商品信息
- 没有考虑遇冷启动问题(没有这个商品的历史信息)
- 没有考虑新用户没有历史购物信息
三、矩阵分解
我们通过矩阵分解来发现内在隐含的结构,解决上述问题。用电影推荐的例子来说明矩阵分解。
1、矩阵填充任务
用户user, 电影movie, 评分rating组成的大表格:
下图中的黑色区域对应用户U对电影V的评分R,白色区域是没有评分的电影。
我们的目标是:已经黑色区域,来填充白色区域。预测用户对未知电影的评分情况。
2、已知用户和商品特征进行推荐
比如,我们知道用户和电影关于多个主题的爱好、分布情况。我们就可以将2个矩阵点乘,结果作为最终的评分。
矩阵预测:
3、用矩阵因子分解发现隐含结构
但其实,我们并不知道用户的爱好,电影的特征,我们要逆向思维:
根据黑色格子,来求L和R。用求得的L和R来预测评分,并将它与真实的Rating来比较,进行RSS残差平方和计算。
矩阵因子分解,跟之前的回归、分类模型类似,只是这里的L和R是模型参数而已。但是,矩阵因子分解还是无法解决冷启动问题,也就是说,来一个新的电影,或者新的用户,没有它们的任何信息,我们还是无法用这种方法完成推荐。
4、混合模型:特征化的矩阵因子分解
基于特征的模型和基于矩阵因子分解的模型:组成混合模型
在一开始新用户时,可以只根据用户的信息,比如年龄,性别等进行推荐;当用户的购买越来越多时,加入有权重的基于矩阵因子分解的模型来推荐。
四、推荐系统的评价矩阵
1、推荐系统的召回率和精确率
召回率:#(推荐给我&我喜欢) / #我喜欢 推荐给我的商品对我喜欢的商品的覆盖率
精确率:#(推荐给我&我喜欢) / #推荐给我 除了我喜欢的商品,我还需要看多少我不感兴趣
可以看我的博文:查全率、查准率和灵敏性、特异性
2、最优的推荐系统
红色框中的是我喜欢的商品,如何使得召回率最大?只要把红色框中的都推荐给我就可以啦,召回率=1。
但这时,精度可能会很小,因为可能推荐给我很多很多商品才完全覆盖了我喜欢的所有商品,也就是下面公式的分母特别大。
#(推荐给我&我喜欢) / #推荐给我
进一步,如果我不想看到无用的商品,并且我喜欢的都被推荐了,那么推荐给我的正好完全是我喜欢的。此时召回率和精确率都为1。
3、精确率召回率曲线
(1)最优曲线
精确率一直为1,召回率逐渐增大到1。
精确率:#(推荐给我&我喜欢) / #推荐给我 一个一个推荐,每个推荐的都是我喜欢的,因此精确率一直为1。
召回率:召回率:#(推荐给我&我喜欢) / #我喜欢 一个一个推荐,我喜欢的逐渐被覆盖到最后全覆盖,因此逐渐增大为1。
(2)真实的推荐系统曲线
但真实情况是,不可能这么完美。
一开始比如推荐了多个商品,只有1个喜欢,则精确率:#(推荐给我&我喜欢) / #推荐给我 从小于1的数开始,召回率:#(推荐给我&我喜欢) / #我喜欢 无限接近于0。
接下来,又推荐的几个商品我都喜欢,这时,精确率会上升,召回率也会上升。
再接下来,又推荐的几个商品我都不喜欢,这时,精确率会下降,召回率保持不变。本次和上次就构成了图中的锯齿。
(3)通过曲线衡量不同的推荐算法
- 曲线面积AUC(Area Under the Curve)
- 对于那种网页固定推荐数量的,比如只能推荐20个商品,那么衡量标准就是推荐的精确度。#推荐给我 = 20
#(推荐给我&我喜欢) / #推荐给我
五、推荐系统总结
1、总结图
model是混合模型:基于特征的模型,矩阵因子分解
因此权重更新时包含两部分:对于用户特征的权重w,矩阵因子分解的L和R
2、测验
(1)单个商品的矩阵因子分解:个性化
(2)特征矩阵因子分解:个性化、获取更多信息(比如时间段等)