《推荐系统实践》系统性地介绍了推荐系统这一领域,思路清晰,详细介绍了各个领域不同情景的推荐算法的应用,是一本很好的推荐系统入门书,尤其第二第三章的讲解比较细致。(Ps:书中插入的python代码有点生硬,读者可以直接忽略)

衡量推荐算法的指标

  • 用户满意度

    满意度是评测推荐系统最重要的指标,但是无法通过离线计算获得,只能通过用户调查或者在线实验。

  • 预测准确度

    对于TopN推荐(这里主要讨论TopN推荐),对于准确度的衡量有两个指标。R(u)是针对测试集,根据用户在训练集上的行为给用户作出的推荐列表,而T(u)是用户在测试集上的行为列表。

    • 召回率:表示用户喜欢的物品列表里被推荐系统推荐到的比例
    Recall=∑u∈UR(u)⋂T(u)∑u∈U|T(u)|Recall=∑u∈UR(u)⋂T(u)∑u∈U|T(u)|

    Recall = \frac {\sum_{u\in U} R(u) \bigcap T(u)} {\sum_{u\in U}|T(u)|}

    • 准确率:表示推荐系统推荐给用户的列表里用户喜欢该推荐的比例
    Precision=∑u∈UR(u)⋂T(u)∑u∈U|R(u)|Precision=∑u∈UR(u)⋂T(u)∑u∈U|R(u)|

    Precision = \frac {\sum_{u\in U} R(u) \bigcap T(u)} {\sum_{u\in U}|R(u)|}

  • 覆盖率:述一个推荐系统对物品长尾的发掘能力。覆盖率 最简单的定义为推荐系统能够推荐出来的物品占总物品集合的比例。假设系统的用户集合为U ,推荐系统给每个用户推荐一个长度为N的物品列表R(u) 。

    Coverage=⋃u∈UR(u)|I|Coverage=⋃u∈UR(u)|I|

    Coverage = \frac {\bigcup_{u\in U} R(u)} {|I|}

  • 多样性:多样性描述了推荐列表中物品两两之间的不相似性,与推荐的相似性是相对的。

  • 新颖性:是指给用户推荐那些他们以前没有听说过的物品,给用户带来新颖感

  • 惊喜度:区别于新颖性,如果推荐结果和用户的历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高,而推荐的新颖性仅仅取决于用户是否听说过这个推荐结果。

  • 信任度:指用户给推荐系统给出结果的信任,可以通过增加推荐系统的透明度(给出推荐理由)和考虑用户的社交网络(用户更信任他们的好友)来提升推荐系统的信任度。

  • 实时性:表现在用户行为变化后,即使更新推荐列表;同时在新的物品加入系统,物品能够被推荐到用户。

  • 健壮性:推荐系统能够抗攻击,推荐系统依赖用户行为,如果用户刻意造假用户行为,就会对推荐结果造成影响(如淘宝刷单强行将物品刷到热门,被推荐的概率大大增加)。增加健壮性的方法有:

    • 使用代价比较高的用户行为赋予更高的权重,代价比较的高的行为造假率低。
    • 使用数据前,进行攻击检测

推荐算法简介

当前业界用的最多的算法就是基于领域的推荐算法,包括基于用户的协同过滤和基于内容的系统过滤,当然还有一些其他算法,包括了基于图的推荐算法、基于内容的推荐算法、隐语义模型、利用标签推荐等等。

1. 基于用户的协同过滤

a.推荐思想

当一个用户A需要个性化推荐 时,可以先找到和他有相似兴趣的其他用户(这里的兴趣相似指两人感兴趣的物品重合度高),然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。这种方法称为基于用户的协同过滤算法。

主要步骤包括:

  • 找到和目标用户兴趣相似的用户集合(计算与当前用户兴趣相似度高的用户)
  • 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户

b.算法实现

给定用户u和用户v,令N(u)表示用户u曾经有过正反馈的物品集合,令N(v) 为用户v曾经有过正反馈的物品集合。那么u与v的相似度可以如下计算:

wuv=|N(u)⋂N(v)||N(u)||N(v)|‾‾‾‾‾‾‾‾‾‾‾‾√wuv=|N(u)⋂N(v)||N(u)||N(v)|

w_{uv} = \frac {|N(u) \bigcap N(v)|} {\sqrt{|N(u)||N(v)|}}

比如用户A对物品a,b,d产生过正反馈,用户B对物品a,c产生过正反馈

用户 物品
A a,b,d
B a,c

那么用户A与用户B的相似度计算为:

wAB=|a,b,d⋂a,c||a,b,d||a,c|‾‾‾‾‾‾‾‾‾‾‾‾√=16‾√wAB=|a,b,d⋂a,c||a,b,d||a,c|=16

w_{AB} = \frac {|{a,b,d} \bigcap {a,c}|} {\sqrt{|{a,b,d} ||{a,c}|}} = \frac {1}{\sqrt{6}}

假设用户数为n,利用一个n*n用户矩阵C保存用户两两之间相似度。但是这样两两计算用户相似度,用户数量多了之后,复杂度显然不可取。所以通常的计算方法是利用倒排表(物品到用户的倒排表)。对于每个物品都保存对该物品产生过行为的用户列表,设用户u和用户v同时属于倒排表中a物品对应的用户列表,那么矩阵对应的[u, v]位置加一。可以扫描倒排表中每个物品对应的用户列表,最终就可以得到所有用户之间相似度矩阵C。

注意得到了相似矩阵对于每个位置还需要除以|N(u)||N(v)|‾‾‾‾‾‾‾‾‾‾‾‾√|N(u)||N(v)|\sqrt{|N(u)||N(v)|},才能得到相似度。

看下图,就会更清晰。

完成了用户之间相似度的计算,下面要根据相似度找到推荐的物品列表。

如下的公式度量了UserCF算法中用户u对物品i的感兴趣程度。这里S(u, K)包含和用户u兴趣最接近的K个用户,N(i)是对物品i有过行为的用户集合,wuv 是用户u和用户v的兴趣相似度,rvi代表用户v对物品i的兴趣(这里可以设为1):

pu,i=∑v∈S(u,K)⋂N(i)wuvrvipu,i=∑v∈S(u,K)⋂N(i)wuvrvi

p_{u,i} = \sum_{v \in S(u, K) \bigcap N(i)} w_{uv} r_{vi}

最后依据pu,ipu,ip_{u,i} ,找到最感兴趣的n的物品推荐给用户。

c.算法改进

在计算用户相似度的时候,简单的使用了余弦相似度公式,但这个公式过于粗糙。以电商为例子,如果两人都够了热门商品,并不能说明他们的相似度,因为很多人都会购买热门物品,所以改进的相似计算如下,惩罚了热门物品对相似度的影响。

wuv=∑i∈N(u)⋂N(v)1log1+|N(i)||N(u)||N(v)|‾‾‾‾‾‾‾‾‾‾‾‾√wuv=∑i∈N(u)⋂N(v)1log1+|N(i)||N(u)||N(v)|

w_{uv} = \frac {\sum_{i \in N(u) \bigcap N(v) } \frac {1}{log1 + |N(i)|}} {\sqrt{|N(u)||N(v)|}}

2. 基于物品的协同过滤

a.算法思想

基于物品的协同过滤(itemCF)算法是目前业界应用最多的算法,算法思想是给用户推荐那些和他们之前喜欢的物品相似的物品,并且可以利用用户的历史行为给推荐结果提供推荐解释,明确给出推荐当前物品是因为你之前喜欢了xxx物品。

需要注意的是:在协同过滤中两个物品产生相似度是因为它们共同被很多用户喜欢,区别于仅仅基于物品本身相似度的推荐算法,也就是说每个用户都可以通过他们的历史兴趣列表给物品“贡献”相似度

主要步骤包括:

  • 计算物品之间的相似度
  • 根据物品的相似度和用户的历史行为给用户生成推荐列表

b.算法实现

给定物品i和物品j,令N(i)喜欢物品i的用户数量,令N(j) 为喜欢物品j的用户数量。那么i与j的相似度可以如下计算:

wij=|N(i)⋂N(j)||N(i)||N(j)|‾‾‾‾‾‾‾‾‾‾‾√wij=|N(i)⋂N(j)||N(i)||N(j)|

w_{ij} = \frac {|N(i) \bigcap N(j)|} {\sqrt{|N(i)||N(j)|}}

假设物品数为m,利用一个m*m物品矩阵C保存两两物品之间相似度。思路同UserCF,常的计算方法是利用倒排表(用户到物品的倒排表)。对于每个用户都保存一个他喜欢的物品列表,然后对于每个用户,将他物品列表中的物品两两在共现矩阵C中加1。然后除以|N(i)||N(j)|‾‾‾‾‾‾‾‾‾‾‾√|N(i)||N(j)|\sqrt{|N(i)||N(j)|}得到相似度。

看下图,就会更清晰。

完成了物品之间相似度的计算,下面要根据相似度找到推荐的物品列表。

ItemCF通过如下公式计算用户u对一个物品j的兴趣 。这里N(u)是用户喜欢的物品的集合,S(j,K)是和物品j最相似的K个物品的集合,wji是物品j和i 的相似度,rui是用户u对物品i的兴趣。

pu,i=∑i∈S(j,K)⋂N(u)wjiruipu,i=∑i∈S(j,K)⋂N(u)wjirui

p_{u,i} = \sum_{i \in S(j, K) \bigcap N(u)} w_{ji} r_{ui}

最后依据pu,ipu,ip_{u,i} ,找到最感兴趣的n个物品推荐给用户。

3. UserCF和ItemCF的比较

指标 UserCF ItemCF
性能 适用于用户较少的场合,如果用户很多,计算用户 相似度矩阵代价很大 适用于物品数明显小于用户数的场合,如果物品很多计算物品相似度矩阵代价很大
领域 时效性较强,用户个性化兴趣不太明显的领域 长尾物品丰富,用户个性化需求强烈的领域
实时性 用户有新行为,不一定造成推荐结果的立即变化 用户有新行为,一定会导致推荐结果的实时变化
冷启动 在新用户对很少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度表是每隔一段时间离线计算的。 新物品上线后一段时间,一旦有用户对物品产生行 为,就可以将新物品推荐给和对它产生行为的用户 兴趣相似的其他用户 新用户只要对一个物品产生行为,就可以给他推荐和该物品相关的其他物品 。 没有办法在不离线更新物品相似度表的情况下将新物品推荐给用户
推荐理由 很难提供令用户信服的推荐解释 利用用户的历史行为给用户做推荐解释,可以令 用户比较信服

4. 基于图的推荐算法

多用于社交关系推荐。将用户行为数据表示成图的形式。数据是由一系列二元组组成的,其中每个二元组(u, i)表示用户u对物品i产生过行为。很容易用一个二分图表示。

将用户行为表示为二分图模型后,下面的任务就是在二分图上给用户进行个性化推荐。如果将个性化推荐算法放到二分图模型上,那么给用户u推荐物品的任务就可以转化为度量用户顶点 vu和与vu没有边直接相连的物品节点在图上的相关性,相关性越高的物品在推荐列表中的权重就越高。

具体算法可以使用随机游走的PersonalRank算法

假设要给用户u进行个性化推荐,可以从用户u对应的节点开始在用户物品二分图上进行随机游走。游走到任何一个节点时,首先按照概率α决定是继续游走,还是停止这次游走并从初识节点开始重新游走。如果决定继续游走,那么就从当前节点指向的节点中按照均匀分布随机选择一 个节点作为游走下次经过的节点。这样,经过很多次随机游走后,每个物品节点被访问到的概率 会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率

5. 基于内容的推荐算法

该推荐方法简单的利用物品之间的相似度进行推荐,给用户推荐与自己喜欢过物品相似的物品,而这里的相似度仅简单由物品本身计算而来(具体计算方法可根据不同物品的特性来定),无须用户参与。因为改方案常用于推荐系统冷启动。

这里以电影推荐为例:

电影的内容信息一般包括标题、导演、演员、编剧、剧情、风格、国家、年代等,对于一些文本形式的介绍(包括电影基本信息和评论等等),需要引入一些理解自然语言的技术抽取关键词。

下图展示了从文本生成关键词向量的主要步骤。对于中文,首先要对文本进行分词,检测出关键信息导演、地名、演员等,这些实体和一些其他重要的词将组成关键词集合,最后对关键词进行排名,计算每个关键词的权重,从而生成关键词向量。

对于电影m,他的内容表示为一个关键词向量如下,其中ei 就是关键词,wi 是关键词对应的权重,可以利用TF-IDF计算。

di=(e1,w1),(e2,w2)...di=(e1,w1),(e2,w2)...

d_{i} = {(e_1, w_1), (e_2, w_2)...}

在给定物品内容的关键词向量后,物品的内容相似度可以通过向量之间的余弦相似度计算:

wij=di∗dj|di||dj|‾‾‾‾‾‾‾√wij=di∗dj|di||dj|

w_{ij} = \frac {d_i * d_j} {\sqrt{|d_i||d_j|}}

参考UserCF和ItemCF,同样可以利用关键词-物品倒排表来加速计算,对于每个关键字保存相对应物品的列表,将列表中的物品两两在相似度矩阵C中相应位置加1。

推荐系统冷启动方案

  • 提供非个性化的推荐:非个性化推荐的最简单例子就是热门排行榜,我们可以给用户推荐热门排行榜,然后等到用户数据收集到一定的时候,再切换为个性化推荐

  • 利用用户注册时提供的年龄、性别等数据做粗粒度的个性化

  • 利用用户的社交网络账号登录(需要用户授权),导入用户在社交网站上的好友信息,然 后给户推荐其好友喜欢的物品。

  • 要求用户在登录时对一些物品进行反馈,收集用户对这些物品的兴趣信息,然后给用户推荐那些和这些物品相似的物品。

  • 对于新加入的物品,可以利用内容信息,将它们推荐给喜欢过和它们相似的物品的用户

  • 在系统冷启动时,可以引入专家的知识,通过一定的高效方式迅速建立起物品的相关度表。 比如音乐推荐系统,借助专家对音乐进行标注,比如包括心情、类别、时间、态度、流派等等

【读书笔记】推荐系统实践-常见推荐算法及应用相关推荐

  1. 读书笔记--推荐系统实践 第一章

    推荐系统实践 编著 项亮 参与创建Resys China推荐系统社区 第一章 好的推荐系统 什么是好的推荐系统?什么样的特征?有哪些评价指标? 1.1 好的推荐系统 信息过载 (Information ...

  2. 读书笔记 -- 推荐系统实践(1)

    第一章 什么是推荐算法? 推荐算法是用于解决信息过载问题的方法,链接无明确需求的用户与物品的工具. 个性化推荐 依赖于用户行为.大多数包括:前台展示页,后台日志系统以及推荐算法系统.应用情景是:存在信 ...

  3. 读书笔记---推荐系统实践(3)

    基于邻域的算法 基于领域的算法是推荐系统中最基本的算法,包括基于用户的协同过滤算法以及基于物品的协同过滤算法. 基于用户的协同过滤算法 这是推荐系统中最古老的算法,甚至可以说这个算法标志这推荐系统的诞 ...

  4. 推荐系统的常见推荐算法的性能比较

    数据集是movielens-1M(下载)版本. 1. 训练集大小对于推荐性能的影响 使用SlopeOne算法,每次随机选取6%的用户预测其喜好,进行5次实验,取MAE的均值,得到下表: 训练集大小(% ...

  5. 读书笔记--推荐系统实践(2)

    第二章 利用用户行为数据 用户行为数据简介 最简单的存在形式是:日志 行为数据的反馈形式以及对比: 用户行为分析 设计算法之前的分析,更有针对性的进行算法设计. 用户活跃度和物品流行度的分布:满足Po ...

  6. 读书笔记--推荐系统实践(4)

    这次主要谈一下对推荐系统中的用户相似度进行的一个改进. 首先有这样的一个现象,有些热门物品是很多人都共同拥有的,并不能代表兴趣所在,如:新华字典等,然而冷门物品往往可以反应兴趣所在,比如,买了数据挖掘 ...

  7. 推荐系统常用的推荐算法

    转载自  推荐系统常用的推荐算法 一.推荐系统概述和常用评价指标 1.1 推荐系统的特点 在知乎搜了一下推荐系统,果真结果比较少,显得小众一些,然后大家对推荐系统普遍的观点是: (1)重要性UI> ...

  8. 电商大数据项目-推荐系统实战之推荐算法(三)

    电商大数据项目-推荐系统实战(一)环境搭建以及日志,人口,商品分析 https://blog.51cto.com/6989066/2325073 电商大数据项目-推荐系统实战之推荐算法 https:/ ...

  9. 在线新闻推荐网 Python+Django+Mysql开发技术 基于用户、物品的协同过滤推荐算法 个性化新闻推荐系统 协同过滤推荐算法在新闻网站中的运用 个性化推荐算法、机器学习、分布式大数据、人工智

    在线新闻推荐网 Python+Django+Mysql开发技术 基于用户.物品的协同过滤推荐算法 个性化新闻推荐系统 协同过滤推荐算法在新闻网站中的运用 个性化推荐算法.机器学习.分布式大数据.人工智 ...

  10. 在线图书推荐网 Python+Django+Mysql开发技术 个性化图书推荐系统 协同过滤推荐算法在图书网站中的运用 基于用户、物品的协同过滤推荐算法 个性化推荐算法、机器学习、分布式大数据、人工智

    在线图书推荐网 Python+Django+Mysql开发技术 个性化图书推荐系统 协同过滤推荐算法在图书网站中的运用 基于用户.物品的协同过滤推荐算法 个性化推荐算法.机器学习.分布式大数据.人工智 ...

最新文章

  1. Java基础班学习笔记(13)IO流
  2. Mysql数据库按照varchar字符串类型排序和按照int整型类型排序的区别和注意点及解决方案...
  3. [云炬创业管理笔记]第三章测试3
  4. 北理工 管理系统计算机仿真作业,20秋北理工《CADCAM原理与应用》--模拟3-答案 更…...
  5. 清华大学人工智能研究院开源“天授”强化学习平台
  6. c语言程序设计修改题,2006年秋季C语言程序设计》期末考试题A卷答案答案--修改后.doc...
  7. 回答知乎问题:你写过什么自认为惊艳的诗?
  8. Python3 sorted() 与sort()函数
  9. python使用glob模块匹配文件及路径
  10. [Verilog]4 选 1 数据选择器
  11. Java 自动化测试详解
  12. 【数据异常校验】格拉布斯准则(Grubbs Criterion)处理数据异常
  13. Windows自带的远程桌面共享工具mstsc
  14. 【开源电机驱动】H桥基础知识
  15. 人脸门禁系统解决方案及应用
  16. oracle数据文件recover,又遇BUG-ORA-01148:数据文件忽然变为recover状态
  17. layui多选下拉框,多选
  18. 微信小程序 - 设置背景图
  19. 最全Flume常用配置文件详情解析
  20. 学习ARM开发01-09

热门文章

  1. 供应商层次分析法判断矩阵(文末附软件)
  2. Java数据类型的转换
  3. STM32 FOC5.2电机库中中的电流采样改为反向放大
  4. 实现土豆网的视频播放
  5. python经典程序实例-十五个Python经典案例,学会这些,Python基础已过关!
  6. 新手做短视频自媒体,再也不用担心找不到视频素材了,抓紧收藏
  7. java基础核心总结归纳---参考手册
  8. WebGrid Enterprise免费下载
  9. 单片机C语言程序设计心得,单片机课程设计心得体会
  10. 广电光猫超级管理员账号及光猫改桥接模式教程