这是2019年的第一篇文章,因为最近导师给了一个新的任务,有关某app的个性化推荐的,正好自己也是第一次学习这方面的知识,便想着汇总整理下。前人栽树,后人乘凉,因为篇幅原因,这一部分准备分开来叙述,本篇主要和大家介绍基于用户的协同过滤算法,希望可以对大家有所帮助,如有谬误,还望指正!

什么是个性化推荐系统?

​ 其实个性化推荐系统早已渗透进我们的生活了,网易云音乐的“每日推荐”,淘宝的”猜你喜欢“,这些都是生活中非常常见的个性化推荐的案例。如今,随着大数据的发展,个性化推荐早已涉及诸多领域,比如电子商务(京东淘宝)、电影和电视网站(youtube)、个性化音乐网络电台(网易云音乐)、社交网络(QQ)、个性化阅读(微信读书)、基于位置的个性化服务(美团)等。推荐算法的本质是通过一定的方式将用户和物品联系起来,而不同的推荐系统也会根据实际情况采取不同的推荐方式。

一般来说一个完整的推荐系统一般包括以下三个参与方:

  1. 被推荐对象
  2. 推荐物品的提供者
  3. 提供推荐系统的网站

以网易云音乐的日推为例:

​ 首先,推荐系统需要满足用户的需求,给用户推荐那些令他们感兴趣的音乐。其次,推荐系统要尽量让各个歌手的歌都能够被推荐给对其感兴趣的用户,而不是只推荐几个大流量歌手的歌。最后, 好的推荐系统设计,能够让推荐系统本身收集到高质量的用户反馈,不断完善推荐的质量,增加用户和网站的交互,提高网站的收入。如下图所示:

什么是好的推荐系统?

​ 想要评判一个东西好不好,一定要有个标准。那么推荐系统好坏的标准是什么呢?试想一下为什么大家都喜欢网易云音乐的每日推荐而不喜欢今日头条的每日推送呢?最直观的感受就是网易云的日推歌曲你爱听,而头条的推送你很讨厌。所以说预测准确度是推荐系统领域的重要指标(没有之一)

好的推荐系统不仅仅能够准确预测用户的行为,而且能够扩展用户的视野,帮助用户发现那些他们可能会感兴趣,但却不那么容易发现的东西(比如网易云音乐经常给你推送那些非常好听但是比较冷门的歌曲)。同时,推荐系统还要能够帮助商家将那些被埋没在长尾中的好商品介绍给可能会对它们感兴趣的用户。

协同过滤(Collaborative Filtering)

​ 为了让推荐结果符合用户口味,我们需要深入了解用户。如何才能了解一个人呢?《论语·公冶长》中说“听其言,观其行”,也就是说可以通过用户留下的文字和行为了解用户兴趣和需求。

​ 实现个性化推荐的最理想情况是用户能主动告诉系统他喜欢什么,比如很久之前注册网易云音乐的时候会让用户选择喜欢什么类型的歌曲,但这种方法有3个缺点:首先,现在的自然语言理解技术很难理解用户用来描述兴趣的自然语言;其次,用户的兴趣是不断变化的,但用户不会不停地更新兴趣描述;最后,很多时候用户并不知道自己喜欢什么,或者很难用语言描述自己喜欢什么。

因此,我们需要通过算法自动发掘用户行为数据,从用户的行为中推测出用户的兴趣,从而给用户推荐满足他们兴趣的物品。

​ 基于用户行为分析的推荐算法是个性化推荐系统的重要算法,学术界一般将这种类型的算法称为协同过滤算法(Collaborative Filtering Algorithm)。顾名思义,协同过滤就是指用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。

​ 既然是基于用户的行为分析,就必须要将用户的行为表示出来,下表给出了一种用户行为的表示方式(当然,在不同的系统中,每个用户所产生的行为也是不一样的),它将个用户行为表示为 6 部分,即产生行为的用户和行为的对象、行为的种类、产生行为的上下文、行为的内容和权重

​ 随着学术界的大佬们对协同过滤算法的深入研究,他们提出了很多方法,比如基于邻域的方法(neighborhood-based)、隐语义模型(latent factor model)、基于图的随机游走算法(random walk on graph) 等。在这些方法中,最著名的、在业界得到最广泛应用的算法是基于邻域的方法,而基于邻域的方法主要包含下面两种算法:

  • 基于用户的协同过滤算法(User-based Collaborative Filtering),简称UserCF或UCF,这种算法给用户推荐和他兴趣相似的其他用户喜欢的物品。
  • 基于物品的协同过滤算法(Item-based Collaborative Filtering),简称ItemCF或ICF,这种算法给用户推荐和他之前喜欢的物品相似的物品。

基于用户的协同过滤算法

​ 在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。这种方法称为基于用户的协同过滤算法。

基于用户的协同过滤算法主要包括两个步骤:

  1. 找到和目标用户A兴趣相似的用户集合。
  2. 找到这个集合中的用户喜欢的,且目标用户A没有听说过的物品推荐给目标用户。

步骤1的关键就是计算两个用户的兴趣相似度。这里,协同过滤算法主要利用行为的相似度计算兴趣的相似度。

举个栗子:假设现在有三个用户A、B、C,已经知道A连续5天都在听周杰伦和林俊杰的歌,B连续5天在听刘德华和张学友的歌,C连续听了5天林俊杰和张杰的歌,那么你说A和谁的兴趣相似度更高,自然是C。

刚才是你在脑海中思考这个问题的,那如果让机器思考A和谁的兴趣相似度更高呢?

其实也很简单,不过在进行下一步的讲解之前,先让我们回顾下基本的数学知识:

在数学中,我们通过测量两个向量的夹角的余弦值来度量它们之间的相似性,两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。名曰:“余弦相似性”。最重要的是这一定律不仅仅适用在二维空间,对任何维度的向量空间中都适用,因此余弦相似性常用于高维正空间。例如在信息检索中,每个词项被赋予不同的维度,而一个文档由一个向量表示,其各个维度上的值对应于该词项在文档中出现的频率。余弦相似度因此可以给出两篇文档在其主题方面的相似度。

​ 考虑到大多数人可能已经忘了怎么计算余弦相似度了,在这再给大家开个小灶,简单的回顾下计算方法,想要深入了解的,请自行Google。

假设有二维向量a,b如下图所示:

则他们的余弦相似度为:

推广到多维向量,a(a1,a2,...),b(b1,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的相似度为:

总结

​​ ​ 这篇文章从网易云音乐的每日推荐这个生活中很常见的例子,引出了什么是推荐系统,一个好的推荐系统是什么样子的,进而引出协同过滤的概念,并且介绍了什么是基于用户的协同过滤,同时还回顾了余弦相似性等数学知识。然而真正在实际的企业产品中,基于用户的协同过滤并不会这么简单,判断两个用户的相似程度也不是简简单单的使用余弦相似性就可以了,考虑到本文旨在让更多的人对个性化推荐有个简单的概念,本文就不详细展开了,推荐阅读相关的论文,下一篇文章将会介绍基于内容的协同过滤算法。

最后

如果你有什么疑问,欢迎在评论区留言。同时如果你觉得本文对你有帮助,希望可以关注并转发,你的支持是我更新的最大动力!

协同过滤算法_从网易云日推浅谈个性化推荐系统(1)——基于用户的协同过滤算法...相关推荐

  1. 让单身狗犹如过情人节的“网易云日推”原来是这样生成的

    转自:网易云首次披露推荐算法:让单身狗犹如过情人节的日推原来是这样生成的 作者:宇多田 侵删 网上各种关于网易云音乐的个性推荐算法的详解五花八门,但是官方从未现身说法! 为了解开用户们对每日推荐歌单背 ...

  2. 【推荐系统】基于用户的协同过滤算法

    基于用户的协同过滤算法 基础算法 在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的.而用户A没有听说过的物品推荐给A.这种方法称为基于 ...

  3. 推荐系统实践----基于用户的协同过滤算法(python代码实现书中案例)

    本文参考项亮的<推荐系统实践>中基于用户的协同过滤算法内容.因其中代码实现部分只有片段,又因本人初学,对python还不是很精通,难免头大.故自己实现了其中的代码,将整个过程走了一遍. 1 ...

  4. umap算法_科学网—[转载]【源码】均匀流形近似与投影(UMAP)算法仿真 - 刘春静的博文...

    UMAP算法是Leland McInnes.John Healy和James Melville的发明. The UMAP algorithm is the invention of Leland Mc ...

  5. umap算法_科学网-[转载]【源码】均匀流形近似与投影(UMAP)算法仿真-刘春静的博文...

    UMAP算法是Leland McInnes.John Healy和James Melville的发明. The UMAP algorithm is the invention of Leland Mc ...

  6. 塔菲尔曲线如何分析_科学网—【电化学】浅谈塔菲尔动力学(Tafel Kinetics) - 付先彪的博文...

    1.塔菲尔公式 塔菲尔是一个有机化学家,当时他的主要研究集中在通过碳水化合物的还原实现有机物的合成以及有机物的改性,包括己糖,杂环化合物等.在研究过程中,塔菲尔发现一些化合物很难利用传统的同质反应合成 ...

  7. python协同过滤电影推荐_推荐系统:基于用户和模型的协同过滤电影推荐

    2018-04-26 1.协同过滤 协同过滤(Collaborative Filtering)字面上的解释就是在别人的帮助下来过滤筛选,协同过滤一般是在海量的用户中发现一小部分和你品味比较相近的,在协 ...

  8. Java+Jsp+Mysql实现简单在线图书推荐系统 个性化图书推荐系 java实现基于用户的协同过滤推荐算法 源代码下载 算法实现 Spring+Struts+Hibernate(SSH)开发框架

    Java+Jsp+Mysql实现简单在线图书推荐系统 个性化图书推荐系统(基于用户的协同过滤推荐算法) 一.项目简介 1.开发工具和实现技术 MyEclipse10,jdk1.7,mysql5.5,t ...

  9. python协同过滤可以预测吗_基于用户的协同过滤推荐算法原理-附python代码实现...

    在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单.该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens 用于新闻过滤.一直到2000年,该算法都是 ...

  10. 协同过滤算法_基于用户的协同过滤推荐算法原理和实现

    (给算法爱好者加星标,修炼编程内功) 来源:Create Chen's Blog https://www.cnblogs.com/technology/p/4467895.html 在推荐系统众多方法 ...

最新文章

  1. iPhone开发:通过NSURLRequest获得服务器返回的http header和http status
  2. Mahout协同推荐简单实例
  3. C# 多线程学习总结
  4. 数字图像处理:附录-程序实例、参考文献、标准图片集合
  5. 食品、快速消费品行业的ERP兄弟们来此跟帖交流,开发实施路上的点点滴滴
  6. dll注入之SetWindowsHookEx(1)
  7. jQuery的Growl插件
  8. php 输出text格式化,php printf() 输出格式化的字符串,phpprintf
  9. android n 发布时间,Android N 正式版将在9月发布
  10. Mac安装nginx配置过程
  11. 红橙Darren视频笔记 从AIDL Demo分析Android源码走向
  12. java中.length得到结果_Java length()方法:获取字符串的长度
  13. 如何成功度过试用期?
  14. ACL'21 | 对比学习论文一句话总结
  15. objC 类名后圆括号的意义
  16. python打开360浏览器_python 模拟浏览器访问网页 selenium+chromedriver+360浏览器
  17. CMMI有几个过程域?
  18. 直流电机正反转驱动电路
  19. ClickHouse 创建数据库建表视图字典 SQL
  20. java微信公众号上传永久素材_微信开放平台永久素材视频文件上传

热门文章

  1. (哈工大)计算机网络体系结构——OSI、TCP/IP、5层模型
  2. 机原自检——第7章 机械的运转及其速度波动的调节
  3. Idea翻译插件google翻译失败超时
  4. 概要、详细设计文档内容简述
  5. 五种不同的微博评论数据获取方法
  6. 软件需求跟踪矩阵例子
  7. Chrome、FireFox浏览器新标签页打开搜索和书签
  8. java 读取文件内容 方法
  9. Dell 禁用触摸板
  10. ACDSee Photo Studio 7 for Mac(最好用的图像处理软件)