欢迎加星:https://github.com/jinwangjoshuagit
两天一口气看完《推荐系统实践》,很是的爽,收获很是的大。做者不只是技术性介绍,更是结合本身的商业理解。加上做者长时间的竞赛工做第一手经验,本书价值很是大!!!github
《推荐系统实践》笔记
做者:项亮
出版社: 人民邮电出版社
图灵原创web
笔记做者:jinwangjoshua(Github欢迎加星)算法
第一章 好的推荐系统
- 应用:
- 电子商务,电影视频,音乐电台,社交网络,阅读,基于位置(外卖,打车),个性化邮件,个性化广告
- 推荐系统评测
- 实验方法:离线实验,用户调查,在线实验(AB test)
- 评价指标:
○ 用户满意度:问卷调查
○ 预测准确度:评分RMSE, MAE; TopN推荐
○ 覆盖率:发现长尾物品
○ 多样性:覆盖用户不一样兴趣
○ 新颖性(流行度反过来)
○ 惊喜度,信任度,实时性,健壮性(Robust)
○ 商业目标(广告盈利)
- 评价维度:用户维度,物品维度,时间维度
第二章 利用用户行为数据
-
用户行为数据通常以日志存储; 通常分布式存储:离线分析hadoop hive, 在线分析google dremel缓存
-
用户行为在个性化推荐系统中通常分两种——显性反馈行为(explicit feedback)和隐性反馈 行为(implicit feedback)。显性反馈行为包括用户明确表示对物品喜爱的行为网络
-
-
-
用户行为长尾分布zipf; 长尾分布的双对数曲线是直线dom
-
经常使用数据集delicious, citeUlike原始数据; netflix,movielens人工清洗过来机器学习
-
用户越活跃, 越倾向于浏览冷门物品分布式
-
协同过滤算法:如基于邻域的方法(neighborhood-based基于用户和基于物品)、隐语义模型 (latent factor model)、基于图的随机游走算法(random walk on graph)svg
-
评测方法: 离线实验, 用户调查, 在线实验
-
实验例子:本章着重 研究隐反馈数据集中的TopN推荐问题,所以忽略了数据集中的评分记录。也就是说,TopN推荐 的任务是预测用户会不会对某部电影评分,而不是预测用户在准备对某部电影评分的前提下会给 电影评多少分。
- 数据集:movielense
- 实验设计:划分数据集,测量评测指标
- 评测指标:
○ 召回率描述有多少比例的用户—物品评分记录包含在最终的推荐列表中
○ 准确率描述最终 的推荐列表中有多少比例是发生过的用户—物品评分记录。
○ 覆盖率反映了推荐算法发掘长尾的 能力,覆盖率越高,说明推荐算法越可以将长尾中的物品推荐给用户。覆盖率表示最终的推荐列表中包含多大比例的物品
○ 推荐的新颖度,这里用推荐列表中物品的平均流行度度量推荐结果的新颖度; 越不流行越新颖
-
基于用户的协同过滤算法(UerCF算法):基于用户类似的兴趣和口味
- 计算用户兴趣类似度:不少用户相互之间并无对一样的物品产生过行为,为此,能够首先创建物品到用户的倒排表,对于每一个物品都保存对该物品产生过行为的用户 列表;而后,创建一个4×4的用户类似度矩阵W,对于物品a,将W[A][B]和W[B][A]加1,对 于物品b,将W[A][C]和W[C][A]加1,以此类推。扫描完全部物品后,咱们能够获得最终的W矩阵。 这里的W是余弦类似度中的分子部分,而后将W除以分母能够获得最终的用户兴趣类似度。
- 获得用户之间的兴趣类似度后,UserCF算法会给用户推荐和他兴趣最类似的K个用户喜欢的 物品。
- Random算法每次都随机挑选10个用户没有产生过行为的物品推荐给当前用户,MostPopular算法 则按照物品的流行度给用户推荐他没有产生过行为的物品中最热门的10个物品
-
改进User-IIF算法(John S. Breese改进): 计算兴趣类似度时候,惩罚了用户u和用户v共同兴趣列表中热门物品对他们相 似度的影响。
-
UserCF应用:很少,好比Digg
- 缺点:当用户数量太大,用户类似度计算量(时间复杂度和空间复杂度)太大;
-
基于物品的协同过滤(ItemCF算法):)给用户推荐那些和他们以前喜欢的物品类似的物品
- 并不利用物品内容属性计算物品类似度,????它主要经过分析用户的行为记录计算物品之间的 类似度
- 给出推荐理由:根据你购买/喜欢/收藏的XX推荐;Customers Who Bought This Item Also Bought
-
ItemCF步骤:计算物品类似度;根据物品类似度和用户的历史行为进行推荐
- 计算物品类似度:
○ 首先创建用户—物品倒排表,而不是基于内容属性
- 评价:精度(准确度,召回率);流行度;覆盖率
-
改进ItemCF:(ItemCF-IUF)
- 为IUF(Inverse User Frequence),即用户活跃度对数的 倒数的参数; 活跃用户对物品类似度的贡献应该小于不活跃的用户, John S. Breese提出应该增长IUF 参数来修正物品类似度的计算公式
- 过于活跃用户直接忽略,好比在当当进货的实体店店主
- 类似度矩阵进行最大值归一化,(提升准确度,覆盖率,多样性)
○ 消除类别内部之间类似度差别,能够提升推荐的多样性。
○ 不进行归一化,就会推荐 比较热门的类里面的物品,而这些物品也是比较热门的。所以,推荐的覆盖率就比较低
- 哈利波特问题(极度热门商品):修改类似度,引入惩罚系数Alpha(一般0.5),加大惩罚
-
UserCF和ItemCF的综合比较
- UserCF的推荐结果着重于反映和用户兴趣类似的小群体的热点,而ItemCF 的推荐结果着重于维系用户的历史兴趣。换句话说,UserCF的推荐更社会化,反映了用户所在的 小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户本身的兴趣传承。 为何Digg使用UserCF,而亚马逊网使用ItemCF呢?
○ 内容上:在新闻网站中,用户的兴趣不是特别细化,绝大多数用户都喜欢看热门的新闻。即便是个性 化,也是比较粗粒度的,好比有些用户喜欢体育新闻,有些喜欢社会新闻,而特别细粒度的个性 化通常是不存在的。
○ 技术上实效性:Item难以实现快速更新,由于须要维护物品相关度矩阵(书中说一天一更),而新闻注重实效性; 可是电子商务和图书电影方面,用户兴趣通常比较固定和持久
○ 计算上: 用户不少,那么维护用户兴趣类似度矩阵须要很大的空间,
- 都是基于用户对物品行为,不涉及物品的内容数据,这是与LFM隐语义模型区别所在
- 选择:先知足产品需求(好比解释的须要);其次看实现代价(技术能力)
-
隐语义模型(LFM,latent factor model )
- 核心思想是经过隐含特征 (latent factor)联系用户兴趣和物品.对书和物品的兴趣进行分类。对于某个用户,首先获得他的兴趣分类, 而后从分类中挑选他可能喜欢的物品
- 总结一下,这个基于兴趣分类的方法大概须要解决3个问题。
○ 如何给物品进行分类?
§ 编辑分类难点:和用户分类有出入;难以控制颗粒度;难以给出多分类;很难多维度分类(内容,做者,出版社等等);难决定物品在分类中权重
§ 解决:LFM让用户分类;自动多分类;自动计算物品属于每一个类别权重和一个物品在某个分类中的权重;制定分类->数字越大,分类越细
○ 如何肯定用户对哪些类的物品感兴趣,以及感兴趣的程度?
○ 对于一个给定的类,选择哪些属于这个类的物品推荐给用户,以及如何肯定这些物品在 一个类中的权重?
- 经常使用模型和方法:有pLSA、LDA、隐含类别模型(latent class model)、隐含主题模型(latent topic model)、 矩阵分解(matrix factorization)
- 使用场景:
○ 显性反馈数据(评分数据)达到很好精度;
○ 书中介绍隐形反馈数据集(问题是只有正样本而没有负样本)
§ 解决:采集负样本–没有行为的样本
§ 遵循原则:正负数目平衡;尽可能选取很热门用户却没有行为的物品
-
模型细节:损失函数(注意正则项); 随机梯度降低
- LFM重要参数:
○ 隐形特征F
○ 学习速率alpha
○ 正则系数lambda
○ 负/正样本比例ratio:影响最大,控制推荐算法发掘长尾能力(流行度),影响准确度(本书中1-10以内准确率上升趋势,以后平稳)
- 例子:雅虎个性化首页Bee-Chung Chen、Deepak Agarwal、Pradheep Elango和Raghu Ramakrishnan的“Latent Factor Models for Web Recommender Systems"; 雅虎的研究人员以CTR做为优化目标,利用LFM来预测用户是否会单击一个连接。为此, 他们将用户历史上对首页上连接的行为记录做为训练集。解决实效性?长期历史行为LFM(天天更新) + 最近几小时历史行为LFM (快速计算)
-
LFM和基于邻域比较
| LFM | UesrCF/ItemCF |
| 理论基础 | 机器学习方法 | KNN, 统计 |
| 离线计算空间复杂度 | 小不少 | 大不少 |
| 离线计算时间复杂度 | 没大区别 | 没大区别 |
| 在线实时推荐 | 难以实时 | 将须要表格缓存在内存中 |
| 推荐解释 | 基于用户行为进行内容分类,可是难以描述 | 根据用户历史记录进行推荐
-
基于图的模型:将user-item relationship看成二分图,查找两个顶点相关性
- 相关性高度顶点的特征:
○ 两个顶点之间有不少路径相连;
○ 链接两个顶点之间的路径长度都比较短;
○ 链接两个顶点之间的路径不会通过出度比较大的顶点。
- 典型算法是基于随机游走的PersonalRank算法:假设要给用户u进行个性化推荐,能够从用户u对应的节点vu开始在用户物品二分图上进行随 机游走。游走到任何一个节点时,首先按照几率 α 决定是继续游走,仍是中止此次游走并从vu节 点开始从新游走。若是决定继续游走,那么就从当前节点指向的节点中按照均匀分布随机选择一 个节点做为游走下次通过的节点。这样,通过不少次随机游走后,每一个物品节点被访问到的几率 会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问几率。
(非本书内容)知乎严林:基于图的算法(如PersonalRank等),因为其计算复杂度很高,在工业界应用是比较少的。https://www.zhihu.com/question/30467586