这是2019年的第一篇文章。 最近,领导赋予了新的任务,所以对某个APP的个性化进行了推荐。 正好自己也是第一次学习这方面的知识,所以想总结整理一下。 前人种树,后人乘凉。 由于篇幅的原因,这一部分我打算分开讲述,本篇主要介绍基于用户的协同过滤算法,希望对大家有所帮助。 如果有错误,恭候您的指正。
什么是个性化推荐系统?
其实个性化推荐系统已经渗透到我们的生活中。 网络音乐“每日推荐”,淘宝“你喜欢吗”,这些都是生活中非常常见的个性化推荐案例。 目前,随着大数据的发展,个性化推荐已经有电子商务京东淘宝)、电影与电视网站youtube )、个性化音乐网络电台conternet )、个性化阅读微信推荐算法的本质是以一定的方式将用户和项目联系起来,不同的推荐系统会根据情况采用不同的推荐方式。
一般来说,完整的推荐系统包括以下三个参与者:
推荐给推荐对象的物品提供者提供推荐系统的网站,以网络上的云音乐日推为例:
首先,推荐系统必须推荐能满足用户需求并让用户感兴趣的音乐。 其次,推荐系统应该尽量让每个歌手的歌曲被推荐给感兴趣的用户,而不是推荐多个大流量歌手的歌曲。 最后,设计了一个可以在推荐系统本身中收集高质量的用户反馈,提高推荐质量,增加用户与网站的交互,提高网站收入的好的推荐系统。 如下图所示。
什么是好的推荐系统?
评价某事需要标准。 推荐系统好坏的标准是什么? 想想为什么大家都喜欢网络易云音乐的每日推荐,不喜欢今天头条的每日推送。 最直观的感受是,喜欢网上易云的日推歌,不喜欢头条推送。 所以,预测精度是推荐系统领域的重要指标。
一个好的推荐系统不仅能准确预测用户的行为,而且拓宽了用户的视野,帮助用户发现可能感兴趣但不那么容易找到的东西。 例如,网络音乐虽然经常听到,但会为我们推送冰冷的歌曲。 此外,推荐系统还有助于向可能感兴趣的用户介绍埋在长尾的好商品。
协同过滤(Collaborative Filtering)
为了使推荐结果符合用户的喜好,需要深入理解用户。 我怎么才能认识人? 《论语公冶长》中说“听语言,看行动”。 也就是说,通过用户留下的文字和行动可以了解用户的兴趣和需求。
实现个性化推荐的最理想情况是用户主动向系统传达他们喜欢什么。 例如,很久以前注册网络云音乐时,让用户选择喜欢什么类型的歌曲,但这种方法有三个缺点。首先,现在的自然语言理解技术很难理解用户用来表达兴趣的自然语言。 其次,用户兴趣不断变化,但用户不不断更新兴趣描述; 最后,用户往往不知道自己喜欢什么,或者很难用语言说明自己喜欢什么。
因此,需要用算法自动挖掘用户的行为数据,根据用户的行为推测用户的兴趣,推荐对用户感兴趣的东西。
基于用户行为分析的推荐算法是个性化推荐系统的重要算法,学术界普遍将这种算法称为协作过滤算法collaborativefilteringalgorithm )。 喜欢听歌的懒汉,合作过滤意味着用户可以齐心协力,不断与网站交流,让自己的推荐列表不断过滤自己不感兴趣的东西,越来越满足自己的需求。
既然是基于用户的行为分析,就有必要表现用户的行为。 下表说明了如何表达用户行为当然,每个用户的行为因系统而异)。 它通过六个部分:行动的用户和行动的对象、行动的类型、行动的上下文、行动的内容和权重来描述各个用户的行为。
随着学术界zgdzxc深入研究协同过滤算法,他们采用了基于邻域的方法neighborhood-based )、隐含语义模型latent factor model )、基于图的随机行走算法) 在这些方法中,最有名、业界应用最广泛的算法是基于邻域的方法,基于邻域的方法主要包括以下两种算法:
基于用户的协同过滤算法User-b
ased Collaborative Filtering),简称UserCF或UCF,这种算法给用户推荐和他兴趣相似的其他用户喜欢的物品。基于物品的协同过滤算法(Item-based Collaborative Filtering),简称ItemCF或ICF,这种算法给用户推荐和他之前喜欢的物品相似的物品。
基于用户的协同过滤算法
在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。这种方法称为基于用户的协同过滤算法。
基于用户的协同过滤算法主要包括两个步骤:
找到和目标用户A兴趣相似的用户集合。找到这个集合中的用户喜欢的,且目标用户A没有听说过的物品推荐给目标用户。
步骤1的关键就是计算两个用户的兴趣相似度。这里,协同过滤算法主要利用行为的相似度计算兴趣的相似度。
举个栗子:假设现在有三个用户A、B、C,已经知道A连续5天都在听周杰伦和林俊杰的歌,B连续5天在听刘德华和张学友的歌,C连续听了5天林俊杰和张杰的歌,那么你说A和谁的兴趣相似度更高,自然是C。
刚才是你在脑海中思考这个问题的,那如果让机器思考A和谁的兴趣相似度更高呢?
其实也很简单,不过在进行下一步的讲解之前,先让我们回顾下基本的数学知识:
在数学中,我们通过测量两个向量的夹角的余弦值来度量它们之间的相似性,两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。名曰:“余弦相似性”。最重要的是这一定律不仅仅适用在二维空间,对任何维度的向量空间中都适用,因此余弦相似性常用于高维正空间。例如在信息检索中,每个词项被赋予不同的维度,而一个文档由一个向量表示,其各个维度上的值对应于该词项在文档中出现的频率。余弦相似度因此可以给出两篇文档在其主题方面的相似度。
考虑到大多数人可能已经忘了怎么计算余弦相似度了,在这再给大家开个小灶,简单的回顾下计算方法,想要深入了解的,请自行Google。
假设有二维向量a,b如下图所示:
则他们的余弦相似度为:
推广到多维向量,aa1,a2,…),bb1,b2,b3….):
理解了上述数学知识,接下来的就是基本操作了,首先我们先给定两个用户和,令表示听过的歌的集合,表示听过的歌的集合,那么就表示、都听过的歌的集合,就表示或 听过的歌的集合总数,表示用户和用户的相似度。
我们来尝试计算下A和D之间的兴趣相似度:
从“用户打开过的网页”可以看出,A和D都听过的歌只有d,也就是1个。用户A打开过的网页数=3,用户D打开过的网页数=3。所以A和D的相似度。其他的计算也是类似的。
在得到用户之间的相似度之后,我们要做的就是解决步骤2的问题了,假设e是刚刚发布的新歌,用户C和用户D都已经听过了,那么如何计算A对新歌e的感兴趣程度呢?
上面一大段截取自《推荐系统实践》,可能很多人看到这公式和这解析有些云里雾里,简单来说就是:
其中表示A对e的兴趣度,表示A与B的相似度,表示B对e的兴趣度 ,以此类推。因为我们这里用的不是评分制,而是考虑是否听过这首歌,那么C听了e,C对e的兴趣度就是1,B没听过这首歌,所以B对e的兴趣度为0。
所以我们可以预测A对e的相似度为:
总结
这篇文章从网易云音乐的每日推荐这个生活中很常见的例子,引出了什么是推荐系统,一个好的推荐系统是什么样子的,进而引出协同过滤的概念,并且介绍了什么是基于用户的协同过滤,同时还回顾了余弦相似性等数学知识。然而真正在实际的企业产品中,基于用户的协同过滤并不会这么简单,判断两个用户的相似程度也不是简简单单的使用余弦相似性就可以了,考虑到本文旨在让更多的人对个性化推荐有个简单的概念,本文就不详细展开了,推荐阅读相关的论文,下一篇文章将会介绍基于内容的协同过滤算法。
最后
如果你有什么疑问,欢迎在评论区留言。同时如果你觉得本文对你有帮助,希望可以关注并转发,你的支持是我更新的最大动力!