今天下午我和内助看了YouTube电影速看,一部2小时的电影用9分钟就能看完,影片播放完毕自动推荐的速看电影,真的很合我们的口味,如此智能的一个功能,究竟是如何实现的呢?
接下来,我就简单介绍两种思路的实现方法。

1. 基于相似用户做推荐

  我用“1”表示“喜爱”,用“0”笼统地表示“不发表意见”。从图中我们可以看出,你跟小明共同喜爱的电影最多,有 5 部。
  我们只需要遍历所有的用户,对比每个用户跟你共同喜爱的电影个数,并且设置一个阈值,如果你和某个用户共同喜爱的电影个数超过这个阈值,我们就把这个用户看作跟你口味相似的用户,把这个用户喜爱但你还没看过的电影,推荐给你。
  不过,刚刚的这个解决方案中有一个问题,我们如何知道用户喜爱哪部电影呢?也就是说如何定义用户对某部电影的喜爱程度呢?


喜爱程度(受欢迎程度)
  实际上,我们可以通过用户的行为,来定义这个喜爱程度。我们给每个行为定义一个得分,得分越高表示喜爱程度越高。

  还是刚刚那个例子,我们如果把每个人对每部电影的喜爱程度表示出来,就是下面这个样子。图中,某个人对某部电影是否喜爱,我们不再用“1”或者“0”来表示,而是对应一个具体的分值。

  显然,我们不能再像之前那样,采用简单的计数来统计两个用户之间相似度,这里的相似度度量,我们可以使用另外一个距离,那就是“欧几里得距离”。欧几里得距离是用来计算两个向量之间的距离的。
  现在解释一下概念中的两个关键词,向量和距离。
  一维、二维、三维应该都不难理解,那更高维中的某个位置该如何表示呢?
类比一维、二维、三维的表示方法,K 维空间中的某个位置,我们可以记作(k1,k2,k3,……,kn)。这种表示方法就是向量(vector)。我们知道,二维、三维空间中,两个位置之间有距离的概念,类比到高纬空间,同样也有距离的概念,这就是我们说的两个向量之间距离。
  那如何计算两个向量之间的距离呢?我们还是可以类比到二维、三维空间中距离的计算方法。通过类比,我们就可以得到两个向量之间距离的计算公式。这个计算公式就是欧几里得距离的计算公式:


  从图中的计算可以看出,小明与你的欧几里得距离距离最小,也就是说,你俩在高维空间中靠得最近,所以,我们就断定,小明跟你的口味最相似。

2. 基于相似电影做推荐

  如果某个电影跟你喜爱的电影相似,我们就把它推荐给你。
  如何判断两部电影是否相似呢?对于人来说,这个事情可能会比较简,但是对于计算机来说,判断两部电影是否相似,那就需要通过量化的数据来表示了。我们应该通过什么数据来量化两部电影之间的相似程度呢?
  最容易想到的是,我们对歌曲定义一些特征项,比如是伤感的还是愉快的,是军事还是科幻 ,是小说的还是感情的等等。类似基于相似用户的推荐方法,我们给每部电影的每个特征项打一个分数,这样每部电影就都对应一个特征项向量。我们可以基于这个特征项向量,来计算两部电影之间的欧几里得距离越小,表示两部电影的相似程度越大。
  但是,要实现这个方案,需要有一个前提,那就是我们能够找到足够多,并且能够全面代表歌曲特点的特征项,除此之外,我们还要人工给每部电影标注每个特征项的得分。对于收录了海量电影的 YouTuBe 来说,这显然是一个非常大的工程。此外,人工标注有很大的主观性,也会影响到推荐的准确性。
  既然基于电影特征项计算相似度不可行,那我们就换一种思路。对于两部电影,如果喜欢看的人群都是差不多的,那侧面就可以反映出,这两部电影比较相似。如图所示,每个用户对电影有不同的喜爱程度,我们依旧通过上一个解决方案中定义得分的标准,来定义喜爱程度。

  你有没有发现,这个图跟基于相似用户推荐中的图几乎一样。只不过这里把电影和用户主次颠倒了一下。基于相似用户的推荐方法中,针对每个用户,我们将对各部电影的喜爱程度作为向量。基于相似电影的推荐思路中,针对每部电影,我们将每个用户的打分作为向量。
  有了每部电影的向量表示,我们通过计算向量之间的欧几里得距离,来表示电影之间的相似度。欧几里得距离越小,表示两个歌曲越相似。然后,我们就在用户已经看过的电影中,找出他喜爱程度较高的电影。然后,我们找出跟这些电影相似度很高的其他电影,推荐给他。

基于欧几里德距离的推荐功能实现思路(向量空间)相关推荐

  1. 基于全文检索系统实现文档系统相关推荐功能

    目录 概述 1.搜索推荐 1.1 编辑距离 2.相关推荐 2.1 文档指纹(Simhash算法) 2.2 文档相似度(海明距离) 2.3 海量文档处理技巧 3.基于全文检索系统实现文档系统推荐 3.1 ...

  2. Spotify 每周推荐功能:基于机器学习的音乐推荐

    原文地址:Spotify's Discover Weekly: How machine learning finds your new music 原文作者:Sophia Ciocca 译文出自:掘金 ...

  3. 02 机器学习算法库Mahout - 协同过滤算法实现推荐功能

     (原文地址:http://blog.csdn.net/codemosi/article/category/2777041,转载麻烦带上原文地址.hadoop hive hbase mahout ...

  4. EMNLP 2020 | 基于Wasserstein距离的正则化序列表示

    ©PaperWeekly 原创 · 作者|金金 单位|阿里巴巴研究实习生 研究方向|推荐系统 论文标题: Wasserstein Distance Regularized Sequence Repre ...

  5. 基于Elasticsearch实现搜索推荐

    在基于Elasticsearch实现搜索建议一文中我们曾经介绍过如何基于Elasticsearch来实现搜索建议,而本文是在此基于上进一步优化搜索体验,在当搜索无结果或结果过少时提供推荐搜索词给用户. ...

  6. ElasticSearch学习29_基于Elasticsearch实现搜索推荐

    2019独角兽企业重金招聘Python工程师标准>>> 在基于Elasticsearch实现搜索建议一文中我们曾经介绍过如何基于Elasticsearch来实现搜索建议,而本文是在此 ...

  7. 基于几何距离的椭圆拟合

    问题 给定离散点集Xi=(xi,yi)X_i=(x_i,y_i)Xi​=(xi​,yi​),我们希望找到最好的椭圆去拟合这些离散点. 方法 通常我们使用最小二乘法求解如下的最优化问题: Min∑i=1 ...

  8. 探花交友_第10章_实现推荐功能

    探花交友_第10章_实现推荐功能 文章目录 探花交友_第10章_实现推荐功能 1.了解推荐系统 1.1.什么是推荐系统? 1.2.电商是推荐系统的先行者 1.3.推荐系统业务流程 1.4.协同过滤推荐 ...

  9. Android 基于Zxing的扫码功能实现(二)

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 引言 本篇博文是基于 Android 二维码的扫码功能实现(一) 文章写的,建议阅读这篇文章之前,先看看上篇文章.还有建议阅读本文的 ...

最新文章

  1. python显示行数_在idle中如何显示行号
  2. 如何应对安全漏洞的修复
  3. maplet, power set, domain subtraction,
  4. VTK:图片之ImageStencil
  5. 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)
  6. 安装Nginx必要组件时解决 yum -y install pcre pcre-devel安装出错
  7. 网络连接数4000多正常吗_怀孕36周时胎儿发育情况是怎样的?胎儿体重有4斤多正常吗?...
  8. b+树时间复杂度_几分钟学会Java实现图的最小生成树:Kruskal算法
  9. java实现RSA公私钥PKCS8与PKCS1之间的相互转换(java RSA pkcs8转pkcs1,RSA pkcs1转pkcs8),PKCS8和PKCS1公私钥byte数组还原为java对象
  10. Java 流行的工作流引擎
  11. 旁路和去耦电容 bypass decouple
  12. 重学前端学习笔记(十二)--浏览器工作解析(二)
  13. H5横幅,旗帜飘动动画
  14. pack与aligned的区别
  15. 链游新玩法:传奇4的感悟
  16. sql injection violation, syntax error: ERROR
  17. 小C实例也有大梦想——自定义strlen函数
  18. 《货币金融学》第七版
  19. 头歌实训平台C语言答案
  20. 活动时长计算尝试用Lambada 实现责任链的代码优化

热门文章

  1. java遍历文件夹下的文件
  2. ubuntu ufw(UncomplicatedFirewall)防火墙使用简介
  3. 如何.class文件反编译成为.java文件
  4. 传统的游戏场景建模与次世代游戏场景建模的区别
  5. 【控制工程基础】六、根轨迹法
  6. 图像的二维傅里叶变换频谱图特点研究
  7. VB.NET CHART
  8. 信奥一本通 1396:病毒(virus)
  9. 商汤“变法”:推中小学AI教材,mini自驾车,要打造AI时代的「清明上河图」...
  10. Mac M1 pro使用UTM虚拟机安装ubuntu