这是2019年的第一篇文章,由于最近导师给了一个新的任务,有关某app的个性化推荐的,正好本身也是第一次学习这方面的知识,便想着汇总整理下。前人栽树,后人乘凉,由于篇幅缘由,这一部分准备分开来叙述,本篇主要和你们介绍基于用户的协同过滤算法,但愿能够对你们有所帮助,若有谬误,还望指正!算法
其实个性化推荐系统早已渗透进咱们的生活了,网易云音乐的“每日推荐”,淘宝的”猜你喜欢“,这些都是生活中很是常见的个性化推荐的案例。现在,随着大数据的发展,个性化推荐早已涉及诸多领域,好比电子商务(京东淘宝)、电影和电视网站(youtube)、个性化音乐网络电台(网易云音乐)、社交网络(QQ)、个性化阅读(微信读书)、基于位置的个性化服务(美团)等。推荐算法的本质是经过必定的方式将用户和物品联系起来,而不一样的推荐系统也会根据实际状况采起不一样的推荐方式。npm
通常来讲一个完整的推荐系统通常包括如下三个参与方:微信
以网易云音乐的日推为例:网络
首先,推荐系统须要知足用户的需求,给用户推荐那些令他们感兴趣的音乐。其次,推荐系统要尽可能让各个歌手的歌都可以被推荐给对其感兴趣的用户,而不是只推荐几个大流量歌手的歌。最后, 好的推荐系统设计,可以让推荐系统自己收集到高质量的用户反馈,不断完善推荐的质量,增长用户和网站的交互,提升网站的收入。以下图所示:app
想要评判一个东西好很差,必定要有个标准。那么推荐系统好坏的标准是什么呢?试想一下为何你们都喜欢网易云音乐的每日推荐而不喜欢今日头条的每日推送呢?最直观的感觉就是网易云的日推歌曲你爱听,而头条的推送你很讨厌。因此说预测准确度是推荐系统领域的重要指标(没有之一)。dom
好的推荐系统不只仅可以准确预测用户的行为,并且可以扩展用户的视野,帮助用户发现那些他们可能会感兴趣,但却不那么容易发现的东西(好比网易云音乐常常给你推送那些很是好听可是比较冷门的歌曲)。同时,推荐系统还要可以帮助商家将那些被埋没在长尾中的好商品介绍给可能会对它们感兴趣的用户。学习
为了让推荐结果符合用户口味,咱们须要深刻了解用户。如何才能了解一我的呢?《论语·公冶长》中说“听其言,观其行”,也就是说能够经过用户留下的文字和行为了解用户兴趣和需求。大数据
实现个性化推荐的最理想状况是用户能主动告诉系统他喜欢什么,好比好久以前注册网易云音乐的时候会让用户选择喜欢什么类型的歌曲,但这种方法有3个缺点:首先,如今的天然语言理解技术很难理解用户用来描述兴趣的天然语言;其次,用户的兴趣是不断变化的,但用户不会不停地更新兴趣描述;最后,不少时候用户并不知道本身喜欢什么,或者很难用语言描述本身喜欢什么。网站
所以,咱们须要经过算法自动发掘用户行为数据,从用户的行为中推测出用户的兴趣,从而给用户推荐知足他们兴趣的物品。设计
基于用户行为分析的推荐算法是个性化推荐系统的重要算法,学术界通常将这种类型的算法称为协同过滤算法(Collaborative Filtering Algorithm)。顾名思义,协同过滤就是指用户能够齐心合力,经过不断地和网站互动,使本身的推荐列表可以不断过滤掉本身不感兴趣的物品,从而愈来愈知足本身的需求。
既然是基于用户的行为分析,就必需要将用户的行为表示出来,下表给出了一种用户行为的表示方式(固然,在不一样的系统中,每一个用户所产生的行为也是不同的),它将个用户行为表示为 6 部分,即产生行为的用户和行为的对象、行为的种类、产生行为的上下文、行为的内容和权重。
表示 | 备注 |
---|---|
user id | 产生行为的用户的惟一标识 |
item id | 产生行为的对象的惟一标识 |
behavior type | 行为的种类(好比说是点赞仍是收藏) |
context | 产生行为的上下文,包括时间和地点等信息 |
behavior weight | 行为的权重(若是是听歌的行为,那么权重能够是听歌时常) |
behavior content | 行为的内容(若是是评论行为,那么就是评论的文本) |
随着学术界的大佬们对协同过滤算法的深刻研究,他们提出了不少方法,好比基于邻域的方法(neighborhood-based)、隐语义模型(latent factor model)、基于图的随机游走算法(random walk on graph) 等。在这些方法中,最著名的、在业界获得最普遍应用的算法是基于邻域的方法,而基于邻域的方法主要包含下面两种算法:
在一个在线个性化推荐系统中,当一个用户A须要个性化推荐时,能够先找到和他有类似兴趣的其余用户,而后把那些用户喜欢的、而用户A没有据说过的物品推荐给A。这种方法称为基于用户的协同过滤算法。
基于用户的协同过滤算法主要包括两个步骤:
步骤1的关键就是计算两个用户的兴趣类似度。这里,协同过滤算法主要利用行为的类似度计算兴趣的类似度。
举个栗子🌰:假设如今有三个用户A、B、C,已经知道A连续5天都在听周杰伦和林俊杰的歌,B连续5天在听刘德华和张学友的歌,C连续听了5天林俊杰和张杰的歌,那么你说A和谁的兴趣类似度更高,天然是C。
刚才是你在脑海中思考这个问题的,那若是让机器思考A和谁的兴趣类似度更高呢?
其实也很简单,不过在进行下一步的讲解以前,先让咱们回顾下基本的数学知识:
在数学中,咱们经过测量两个向量的夹角的余弦值来度量它们之间的类似性,两个向量有相同的指向时,余弦类似度的值为1;两个向量夹角为90°时,余弦类似度的值为0;两个向量指向彻底相反的方向时,余弦类似度的值为-1。名曰:“余弦类似性”。最重要的是这必定律不只仅适用在二维空间,对任何维度的向量空间中都适用,所以余弦类似性经常使用于高维正空间。例如在信息检索中,每一个词项被赋予不一样的维度,而一个文档由一个向量表示,其各个维度上的值对应于该词项在文档中出现的频率。余弦类似度所以能够给出两篇文档在其主题方面的类似度。
考虑到大多数人可能已经忘了怎么计算余弦类似度了,在这再给你们开个小灶,简单的回顾下计算方法,想要深刻了解的,请自行Google。
假设有二维向量a,b以下图所示:
则他们的余弦类似度为:
推广到多维向量,
:
理解了上述数学知识,接下来的就是基本操做了,首先咱们先给定两个用户和
,令
表示
听过的歌的集合,
表示
听过的歌的集合,那么
就表示
、
都听过的歌的集合,
就表示
或
听过的歌的集合总数,
表示用户
和用户
的类似度。
咱们来尝试计算下A和D之间的兴趣类似度:
从 “用户听过的歌曲” 能够看出,A和D都听过的歌只有d,也就是1个。用户A打开过的网页数=3,用户D打开过的网页数=3。因此A和D的类似度。其余的计算也是相似的。
在获得用户之间的类似度以后,咱们要作的就是解决步骤2的问题了,假设e是刚刚发布的新歌,用户C和用户D都已经听过了,那么如何计算A对新歌e的感兴趣程度呢?
获得用户之间的兴趣类似度后,UserCF算法会给用户推荐和他兴趣最类似的K个用户喜欢的物品。以下的公式度量了 UserCF 算法中用户 u 对物品的感兴趣程度:
![]()
其中,
包含和用户
兴趣最接近的
个用户,
是对物品
有过行为的用户集合,
是用户
和用户
的兴趣类似度,
表明用户
对物品的兴趣,由于使用的是单一行为的隐反馈数据,因此全部的
=1。
上面一大段截取自《推荐系统实践》,可能不少人看到这公式和这解析有些云里雾里,简单来讲就是:
其中表示A对e的兴趣度,
表示A与B的类似度,
表示B对e的兴趣度 ,以此类推。由于咱们这里用的不是评分制,而是考虑是否听过这首歌,那么C听了e,C对e的兴趣度就是1,B没听过这首歌,因此B对e的兴趣度为0。
因此咱们能够预测A对e的类似度为:
这篇文章从网易云音乐的每日推荐这个生活中很常见的例子,引出了什么是推荐系统,一个好的推荐系统是什么样子的,进而引出协同过滤的概念,而且介绍了什么是基于用户的协同过滤,同时还回顾了余弦类似性等数学知识。然而真正在实际的企业产品中,基于用户的协同过滤并不会这么简单,判断两个用户的类似程度也不是简简单单的使用余弦类似性就能够了,考虑到本文旨在让更多的人对个性化推荐有个简单的概念,本文就不详细展开了,推荐阅读相关的论文,下一篇文章将会介绍基于内容的协同过滤算法。