movielens推荐系统_基于内容推荐(二)

7bec47e7c79a67e57279bc486a797a46.png

A content-based movie recommender system using MovieLens tags (用标签构建一个简单的电影推荐系统)

现在有很多电影。如果没有某种推荐系统,您会担心,随着时间的流逝,用户可能会被他们不关心的电影所淹没。因此,您决定构建电影推荐系统。由于您的服务是新服务,因此您没有足够的数据来了解哪些用户正在观看哪些电影。这被称为冷启动问题,它使您无法仅根据用户的历史收视率来推荐电影。幸运的是,即使没有足够的收视数据,我们仍然可以使用电影元数据构建一个不错的推荐系统。这就是MovieLens的用处。MovieLens为每个电影提供带有关键字标签的公共数据集。这些标签非常有用。

这个转化单功能多个分类值的办法十分有用,整个数据集整理完之后为:

76e8deb9d72237d9193e2baa823639bf.png

Source: https://datascience.stackexchange.com/questions/14847/multiple-categorical-values-for-a-single-feature-how-to-convert-them-to-binary-u

在本文的其余部分中,我将回答三个业务问题,这些问题对于使用MovieLens的标签构建基于内容的简单推荐系统至关重要:

  1. 每部电影需要几个标签?
  2. 我们如何使用标签来衡量电影之间的相似性?
  3. 我们如何使用标签为用户生成电影推荐?

第一个问题:每部电影需要几个标签?

MovieLens标签基因组数据集中大约有10万部唯一电影和一千个唯一标签。每部电影对每个标签都有一个相关性得分,因此大约有1000万个电影标签对,取值区间从0到1。但是并非每个标签都与电影相关,因此我们只需要保留最相关的标签。首先,我们可以根据相关性得分对每部电影的标签进行排序。以玩具总动员为例:

e22a46cee3e001102583f08961c67d58.png

接下来,我们在下面的图表中确认,电影排名较高的标签通常具有较高的中位数相关性突出。电影的第1级标签的中位相关性几乎几乎为1。我们可以看到, 随着大约第50级,中位相关性逐渐降低。

8530fb9b1b981e4eeacf175fdfb14998.png

要查找电影的最相关标签,我们可以根据相关性得分保留电影的前N个标签。在这里,我们需要仔细选择N。如果N很小,则我们具有非常相关的标签。如果N大,则我们有很多标签,但其中许多标签可能无关紧要。下图显示了当我们从排名第1升至第100时,中位数相关性得分的变化百分比。当相关性得分开始变得更加稳定时,我们会在第50个等级附近看到一个拐点。因此,我们可以选择N = 50作为每个电影要保留的合理数量的标签。请注意,这是一种非常简单的“弯头方法”样式的方法,以后可以对其进行优化。

d42e62ba5e9385cccf419d39f4ec5a66.png

现在,我们可以获得每部电影的前50个标签的列表,这些标签将在下一部分中使用。例如,玩具总动员的50个标签。

0c9d11a7acd5b52fe6beaa91751da707.png

另外可以根据电影的名称来查询标签

c38706885977b020b843496bfcc6e1d7.png

第二个问题:我们如何使用标签来衡量电影之间的相似性?

在为用户生成电影推荐之前,我们需要一种基于电影的前50个标签来衡量电影之间相似度的方法。在基于内容的推荐器系统中,将向用户推荐与他们已经看过的电影相似的电影。

在这里,我将演示两种测量相似度的方法:

  1. 两组电影标签的Jaccard系数
  2. 基于标签的电影矢量(也称为内容嵌入)的余弦相似度

Jaccard 系数:

使用Jaccard Index的第一种方法是将两个集合AB之间的相似度作为交集的大小除以并集的大小。在衡量电影之间的相似性时,我们可以为两组电影标签计算此索引。

20d28614a3e888913c5757c70b1c5d98.png

例如,假设我们下面有三部电影,以及前三部标签:

  • 电影A标签=(动作,空间,友谊)
  • 电影B标签=(冒险,太空,友谊)
  • 电影C标签=(浪漫,喜剧,成年)

直观地看,电影A与电影B相似,这是因为电影A和电影B共享两个标签(空格,友谊),而电影A和电影C没有共享标签。以下是根据Jaccard Index进行的类似于心灵捕手的前十部电影。 对于善意狩猎的观众来说,这些看起来像是合理的建议。 请注意,我在列表中包括了心灵捕手,以表明在将电影与其自身进行比较时,Jaccard Index = 1。

e7ccf7b663425c24a8237fdf8d157ad8.png

根据Jaccard 系数,与《星际穿越》相似的前十部电影以下。 对于《星际穿越》的观众来说,这些看起来也很合理。

5144f750b67fe362596570a2fec02d29.png

为了进一步说明“ Jaccard Index”的有效性,请参见下文基于类似于《星际穿越》电影的标签频率的词云。 在这里,我们可以看到哪些标签在相似度计算中更为突出(例如科幻小说,伟大的结局,错位的未来,哲学的,大脑的)。

82c07c2755c23d9d2fb76a30dcb10a86.png

余弦相似度(Cosine Similarity)

Jaccard Index的第一种方法帮助我们建立了与标签相似意味着什么的直觉。 这里余弦相似度的第二种方法稍微复杂一些。 它要求我们将电影表示为矢量。 在这里,向量只是一组数字。

例如,我们可以用三个实数表示同一部电影:

电影A =(1.1,2.3,5.1)

电影B =(1.3,2.1,4.9)

电影C =(5.1,6.2,1.1)

凭直觉,我们再次可以看到电影A与电影B的相似度高于电影B,这是因为电影A和电影B在每个维度上的数字都更接近(例如,在第一维度上的数字是1.1与1.3)。为了找到电影的良好矢量表示,我使用本文中的Doc2Vec(PV-DBOW)技术拍摄电影(文档),并根据其标签(文档中的单词)学习到潜在K维矢量空间的映射。

16986228b2f975d1e2de424c53a15cdf.png

Doc2Vec论文中PV-DBOW技术的可视化; 对于每个段落ID(电影),我们正在训练一个模型来预测该段落中单词(电影标签)的出现

一旦我们可以将每个电影表示为矢量,就可以计算矢量之间的余弦相似度,以找到相似的电影。 我不会在这里详细介绍余弦相似度,但是从较高的角度讲,它可以告诉我们彼此之间相似的电影矢量之间的相似度,我们可以使用它们来生成推荐。 下面,我使用UMAP可视化二维的电影矢量,这是一种流行的非线性降维技术。 我们可以看到在此向量空间中距离更近的电影更加相似(例如玩具总动员和怪物工厂)。

8722e902441cf67ab1acdfb8f7522b0a.png

第三个问题:我们如何使用标签为用户生成电影推荐?

现在,我们可以测量带有标签的电影之间的相似性,我们可以开始向用户生成电影推荐。请记住,在基于内容的推荐器系统中,将向用户推荐与他们已经看过的电影相似的电影。如果用户仅看过一部电影(例如心灵捕手),我们可以像以前一样简单地使用Jaccard索引(或余弦相似度)来生成要推荐的类似电影的列表。

实际上,用户将观看一组电影,我们需要根据这些电影的组合属性生成推荐。 一种简单的方法是将用户矢量计算为他们看过的电影矢量的平均值。 这些用户向量可以代表用户的电影偏好设置。

例如,如果用户只看了下面的电影A和B:

电影A =(1、2、3)

电影B =(7,2,1)

用户向量=电影A和电影B的平均值=(4、2、2)

以下是我观看和欣赏的电影,包括星际穿越、心灵捕手、千钧一发、几乎成名、肖申克的救赎、明日边缘、甜心先生、阿甘正传和回到未来。我们如何使用这些电影中的标签生成电影推荐呢?我的用户向量将是上述九部电影的电影向量的平均值。 我可以利用用户向量来查找尚未观看的最相似的电影(基于余弦相似度)。 考虑到我们仅在这里使用电影标签,以下是我的电影推荐,这些推荐出奇的好!

6aa4b80775c1458c9f714edd8d33525b.png

以下是我们基于内容的推荐系统的摘要。 请注意,如果我们将系统部署为API,则可以在批处理过程中预先计算用户向量和相似性分数,以加快建议的提供。

输入:用户向量(从标记中学到的电影向量的平均值)

输出:基于用户和电影向量的余弦相似度,与用户相似的电影列表

Source: Johnson Kuan, 2019. How to Build a Simple Movie Recommender System with Tags. Available from: https://towardsdatascience.com/how-to-build-a-simple-movie-recommender-system-with-tags-b9ab5cb3b616 [25 June 2020]

个人Github :

非商业应用,仅用于学术分享,侵权删

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HALCON 1D Measure 算子初识

基本上1D Measure都是建立一个ROI(region of interest,感兴趣区域),然后在感兴趣区域提取出边界的测量。常见的ROI有矩形ROI和圆环ROI。 下图为一个矩形ROI,中间的Profile Line为横截线,Center是行和列的坐标,Phi指定了…

python可视化界面编程 pycharm_pycharm开发一个简单界面和通用mvc模板(操作方法图解)...

文章首先使用pycharm的 PyQt5 Designer 做一个简单的界面,然后引入所谓的“mvc框架”。 一、设计登录界面 下面开始第一个话题,使用pycharm的 PyQt5 Designer 做一个简单的界面。 上一篇最后,在pycharm中配置了PyQt5 Designer 和 uic&#xf…

Ubuntu识别USB设备

参考:如何解决Ubuntu无法识别USB设备 作者:一只青木呀 发布时间:2020-08-28 21:02:00 网址:https://blog.csdn.net/weixin_45309916/article/details/108286829 目录1、U盘识别2、识别转换解决Ubuntu无法识别USB3.0方法一&#xf…

解除单个文件的与svn服务器的关联

有些文件和个人开发环境有关不需要和svn服务器做同步,可以取消其和svn服务的关联。 右键选中要取消关联的文件,右键菜单 Tortoise SVN ---> unversion and add to ignore list 确定后,文件图标会变成一把小剪刀,说明已经…

Ubuntu磁盘扩容及启动问题整理

参考:Ubuntu磁盘扩容及启动问题整理 作者:一只青木呀 发布时间: 2020-12-08 10:42:19 网址:https://blog.csdn.net/weixin_45309916/article/details/110850358 也可参照正点原子的:Ubuntu磁盘空间不足?一招…

函数求值需要运行所有线程_精读《深度学习 - 函数式之美》

1 引言函数式语言在深度学习领域应用很广泛,因为函数式与深度学习模型的契合度很高,The Beauty of Functional Languages in Deep Learning — Clojure and Haskell 就很好的诠释了这个道理。通过这篇文章可以加深我们对深度学习与函数式编程的理解。2…

Ubuntu下无法看到共享文件夹的解决办法

参考:Ubuntu下无法看到共享文件夹的解决办法 作者:一只青木呀 发布时间:2020-08-07 10:09:04 网址:https://blog.csdn.net/weixin_45309916/article/details/107856157 今天早上起来突然发现共享文件夹的查看不到了,找…

实现图书增删的代码_不仅仅是图书信息管理系统

点击蓝字 关注我们不仅仅是图书信息管理系统基于双链表,采用面向对象编程方法制作的图书管理系统❞效果演示root用户:账号:0,密码:0普通用户:账号:1001,密码:666666图书信…

Ubuntu18.04换源更新国内源

参考:Ubuntu18.04更新国内源 作者:一只青木呀 发布时间:2020-08-05 10:24:11 网址:https://blog.csdn.net/weixin_45309916/article/details/107808268 树莓派换源博文:https://blog.csdn.net/zhuguanlin121/article/d…

Vmware15的安装(ps解决:重装Vmware出现无法安装服务Vmware Authorization Service)

参考:Linux之Vmware的安装 作者:一只青木呀 发布时间: 2020-07-09 22:13:14 网址:https://blog.csdn.net/weixin_45309916/article/details/107238658 目录1.前言2.打开Vmware虚拟机安装包安装解决:重装Vmware出现无法…

内存,RAM(DDR),ROM(EEPROM、flash),存储卡(emmc,sd,tf)以及Cache的区别与联系

参考:内存,RAM,ROM,Cache的区别与联系 作者:一只青木呀 发布时间:2020-09-26 09:55:40 网址:https://blog.csdn.net/weixin_45309916/article/details/108808106 参考:EEPROM和flash…

idea 项目jar反编译java_带你上手阿里开源的 Java 诊断利器:Arthas

本文适合有 Java 基础知识的人群。本文作者:HelloGitHub-秦人HelloGitHub 推出的《讲解开源项目》系列,今天给大家带来一款阿里开源的 Java 诊断利器 Arthas 项目—— Arthas项目源码地址:https://github.com/alibaba/arthas一、简介 为什么要…

Windows如何开启虚拟化,以安装虚拟机?

参考:Windows如何开启虚拟化,以安装虚拟机? 作者:一只青木呀 发布时间:2020-08-28 20:58:45 网址:https://blog.csdn.net/weixin_45309916/article/details/108286787 设置BIOS 安装 Ubuntu 时报错&#x…

Ubuntu 16.04安装教程及虚拟机设置

摘自:Ubuntu 16.04安装教程及设置 作者:一只青木呀 发布时间: 2020-07-09 22:36:50 网址:https://blog.csdn.net/weixin_45309916/article/details/107239119 配合这篇博文:安装ubuntu20.04并进行优化——安装vim,gcc,…

PureMVC(AS3)剖析:设计模式(二)

PureMVC(AS3)剖析:设计模式(二) 模式 上一篇中介绍了PureMVC中使用的3种设计模式:单例模式、观察者模式、外观模式。本篇将继续介绍剩下的3种设计模式: l 使用中介者(Mediator&…

FileZilla的下载与安装以及简单使用(Ubuntu和Windows之间互传文件需要下载——客户端)

参考:FileZilla的下载与安装以及简单使用(有图解超简单) 作者:一只青木呀 发布时间: 2020-08-04 13:20:59 网址:https://blog.csdn.net/weixin_45309916/article/details/107782070?ops_request_misc%257B…

基于Matlab的循环码实验报告,基于MATLAB的循环码实验报告

及g(x)|C(x)上述定理告诉了构造(n,k)循环码的方法如下: ① 对xn-1 (在二元域中等效于对xn1)实行因式分解, 找出其中的(n-k)次因式。② 以找出的(n-k)次因式为循环码生成多项式g(x),与信息多项式m(x)相乘,即得码多项式:…

如何解决Filezilla 与虚拟机连接不上的问题

摘自:如何解决Filezilla 与虚拟机连接不上的问题 作者:一只青木呀 发布时间: 2020-08-28 21:48:04 网址:https://blog.csdn.net/weixin_45309916/article/details/108287326?ops_request_misc%257B%2522request%255Fid%2522%253A…

php 访问 sharepoint列表,SharePoint—用REST方式访问列表

REST的定义与作用在SharePoint 2010中,基本上有如下几种数据访问方式: 服务器端对象模型LINQ to SharePointWeb Service客户端对象模型ADO.NET Data Service (REST协议)ADO.NET Data Service (强类型)REST是SharePoint中一种数据访问方式,这种…

Vmware虚拟机三种网络模式配图详解

目录Vmware虚拟机三种网络模式详解Vmware虚拟机三种网络模式详解 具体的文字描述参见博文:https://www.cnblogs.com/linjiaxin/p/6476480.html Linux——Vmware虚拟机三种网络模式详解