基于用户的协同过滤是怎么推荐电影的?

我们平时在浏览电商、视频等网站时,网页一般会有一个“猜你喜欢”,也就是”智能推荐系统“,虽然一般来说推荐的不是很准确,但是程Sir还是研究了一下这个玩意是怎么弄出来的……今天说一说最简单的一个实现方法,叫做基于用户的协同过滤。

假设有几个人分别看了如下电影并且给电影有如下评分(5分最高,没看过的不评分),我们目的是要向A用户推荐一部电影:

协同过滤的整体思路只有两步,非常简单:寻找相似用户,推荐电影

寻找相似用户

所谓相似,其实是对于电影品味的相似,也就是说需要将A与其他几位用户做比较,判断是不是品味相似。有很多种方法可以用来判断相似性,(与我之前写的K-Means文章中判断两点是否类似的方法是一致的)这篇文章用“欧几里德距离”来做相似性判定。

我们把每一部电影看成N维空间中的一个维度,这样每个用户对于电影的评分相当于维度的坐标,那么每一个用户的所有评分,相当于就把用户固定在这个N维空间的一个点上,然后利用欧几里德距离计算N维空间两点的距离:每一个电影的评分求差值,然后求每个差值的平方,然后求平方的和,然后在开平方。距离越短说明品味越接近。本例中A只看过两部电影(《老炮儿》和《唐人街探案》),因此只能通过这两部电影来判断品味了,那么计算A和其他几位的距离:

然后我们做一个变换,变换方法为:相似性 = 1/(1+欧几里德距离),这个相似性会落在【0,1】区间内,1表示完全品味一样,0表示完全品味不一样。这时我们就可以找到哪些人的品味和A最为接近了,计算后如下:

相似性:B-0.27,C-0.28,D-0.27,E-0.50,F-0.25,G-0.47

可见,E的口味与A最为接近,其次是G

推荐电影

要做电影加权评分推荐。意思是说,品味相近的人对于电影的评价对A选择电影来说更加重要,具体做法可以列一个表,计算加权分:

把相似性和对于每个电影的实际评分相乘,就是电影的加权分

加权后,还要做少量的计算:总分是每个电影加权分的总和,总相似度是对这个电影有评分的人的相似性综合,推荐度是总分/总相似性,目的是排除看电影人数对于总分的影响

结论在最终一行,就是电影的推荐度(因为是根据品味相同的人打分加权算出的分,可以近似认为如果A看了这部电影,预期的评分会是多少)。

有了电影的加权得分,通常做法还要设定一个阈值,如果超过了阈值再给用户推荐,要不怎么推荐都是烂片,如果这里我们设置阈值为4,那么最终推荐给A的电影就是《寻龙诀》。

我们现在的做法是向用户推荐电影。当然还可以从另外角度来思考:如果我们把一开始的评分表的行列调换,其他过程都不变,那么就变成了把电影推荐给合适的受众。因此,要根据不同场景选择不同的思考维度。

本文作者:程Sir 程SIR说

来源:51CTO

时间: 2024-09-26 00:16:55

基于用户的协同过滤是怎么推荐电影的?的相关文章

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

      在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单.该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens 用于新闻过滤.一直到2000年,该算法都是推荐系统领域最著名的算法.       本文简单介绍基于用户的协同过滤算法思想以及原理,最后基于该算法实现园友的推荐,即根据你关注的人,为你推荐博客园中其他你有可能感兴趣的人. 基本思想       俗话说"物以类聚.人以群分",拿看电影这个例子来说,如果你喜欢<蝙蝠侠&

【笔记3】用pandas实现矩阵数据格式的推荐算法 (基于用户的协同)

原书作者使用字典dict实现推荐算法,并且惊叹于18行代码实现了向量的余弦夹角公式. 我用pandas实现相同的公式只要3行. 特别说明:本篇笔记是针对矩阵数据,下篇笔记是针对条目数据. ''' 基于用户的协同推荐 矩阵数据 ''' import pandas as pd from io import StringIO import json #数据类型一:csv矩阵(用户-商品)(适用于小数据量) csv_txt = '''"user","Blues Traveler&qu

【笔记4】用pandas实现条目数据格式的推荐算法 (基于用户的协同)

''' 基于用户的协同推荐 条目数据 ''' import pandas as pd from io import StringIO import json #数据类型一:条目(用户.商品.打分)(避免巨型稀疏矩阵) csv_txt = '''"Angelica","Blues Traveler",3.5 "Angelica","Broken Bells",2.0 "Angelica","Nora

基于物品的协同过滤算法(ItemCF)

最近在学习使用阿里云的推荐引擎时,在使用的过程中用到很多推荐算法,所以就研究了一下,这里主要介绍一种推荐算法-基于物品的协同过滤算法. ItemCF算法不是根据物品内容的属性计算物品之间的相似度,而是通过分析用户的行为记录来计算用户的相似度.该算法认为物品A和物品B相似的依据是因为喜欢物品A的用户也喜欢物品B. 基于物品的协同过滤算法实现步骤: 1.计算物品之间的相似度 2.根据物品的相似度和用户的历史行为记录给用户生成推荐列表 下面我们一起来看一下这两部是如何实现的: 一.计算物品之间的相似度

有关基于项目的协同过滤算法的预测值计算问题

问题描述 有关基于项目的协同过滤算法的预测值计算问题 有个疑问,比如项目有100个最近邻居,但是目标用户对这100个邻居中的极少部分有评分,比如只对5个项目有评分,但是大部分论文中计算预测值时是这么计算的:,我将未评分值先简单置为0,那么分母就是所有相似度之和,分子却只是那5个目标用户有评分项的加权和,结果通常很小,与实际值相差很大,我想那个分母是不是只用包括最近邻居中用户已评分项的相似度? 解决方案 我刚计算预测值时分母只累加了已评分项的相似度,邻居300左右时MAE值达到最优值为0.75,正

基于协同过滤的推荐方法

协同过滤(Collaborative Filtering, CF)是推荐系统广泛使用的一种技术,它主要通过考虑用户(User)与用户之间.物品(Item)与物品之间的相似度(Similarity),来向用户推荐物品,常被用在电商网站中.其中,在推荐系统中最常使用的协同过滤方法,有如下4种: 基于用户的协同过滤推荐 基于物品的协同过滤推荐 基于模型的协同过滤推荐 混合协同过滤推荐 上面4种方法中,基于用户的协同过滤推荐.基于物品的协同过滤推荐都是基于内存的协同过滤推荐,一般在数据量较小的应用场景下

推荐算法---协同过滤推荐算法

基于用户的协同过滤推荐算法原理和实现       在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单.该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens 用于新闻过滤.一直到2000年,该算法都是推荐系统领域最著名的算法.       本文简单介绍基于用户的协同过滤算法思想以及原理,最后基于该算法实现园友的推荐,即根据你关注的人,为你推荐博客园中其他你有可能感兴趣的人. 基本思想       俗话说"物以类聚.人以群分",拿看电影这

探秘推荐引擎之协同过滤算法小综述

      数学大神.统计学大神和数据挖掘推荐大神请关注. 一.数学期望的理解       早些时候,法国有两个大数学家,一个叫做布莱士·帕斯卡,一个叫做费马.帕斯卡认识两个赌徒,这两个赌徒向他提出了一个问题.他们说,他俩下赌金之后,约定谁先赢满5局,谁就获得全部赌金.赌了半天,A赢了4局,B赢了3局,时间很晚了,他们都不想再赌下去了.那么,这个钱应该怎么分?是不是把钱分成7份,赢了4局的就拿4份,赢了3局的就拿3份呢?或者,因为最早说的是满5局,而谁也没达到,所以就一人分一半呢?这两种分法都不

[推荐系统]协同过滤介绍

在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法.本文将带你深入了解协同过滤的秘密.下面直接进入正题 1 什么是协同过滤 协同过滤是利用集体智慧的一个典型方法.要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐.这就是协同过滤的核心思想. 换句话说