首页 > 编程语言 >用余弦相似度修正评分的协同过滤推荐算法

用余弦相似度修正评分的协同过滤推荐算法

时间:2024-01-18 13:55:52浏览次数:25  
标签:评分 修正 用户 余弦 不合理 算法 过滤 相似

前言

今天读的这篇论文是一篇于2020年6月份发表在计算机工程与科学(Computer Engineering & Science)上的一篇论文。

论文采用评分矩阵的多种维度进行相似度比较以修正不合理评分,再用修正后的评分进行协同过滤推荐。

利用MovieLens和BookCrossing数据库进行实验,结果表明:带修正评分的协同过滤算法相比未修正前的评分具有更高的推荐精度,其推荐评分MAE明显下降,本文算法相比对照算法获得了更优的MAE,Precision和Coverage。

摘要

在用户对项目进行评分的时候,有时会出现不合理因素导致用户对项目做出不合理评分,使得推荐过程出现偏差。

为修正这种偏差,采用评分矩阵的多种维度进行相似度比较以修正不合理评分,再用修正后的评分进行协同过滤推荐。而在采用变维度评分矩阵进行相似度对比时,主要利用同一用户对相似项目评分的相近性,对比2个用户对多个相似项目评分数组在不同维度下的余弦相似度。首先将多个评分构建成等维度的几个数组,对比2个用户的各个评分数组相似度,当某个相似度与其它相似度差别较大时,认为该相似度对应的2个用户的数组中至少有1个包含不合理评分;然后将2个数组按同样的方式均分为维度更低的数组,以此类推,最终确定不合理评分;最后以所有合理评分数组对应的相似度均值作为不合理评分数组对应的相似度,从而修正不合理评分。

这便是摘要所展示的内容,向我们展示了如何进行对于不合理评分的修正。再使用协同过滤算法进行推荐。

引言

当今社会互联网相关产业飞速发展,数据爆炸性增长,推荐系统的出现大大缓解了我们对于信息的筛选难度,

根据评分计算用户相似性并依据相似性进行项目推荐是目前常用的协同过滤推荐手段。而在评分时,由于某些不合理因素可能导致少量用户对项目做出与自身意志不相符的评分,比如因一时情绪导致评分的极端化,这类评分会使相似度计算出现较大偏差,从而引起推荐结果出现明显误差。

为了更大程度地减小不合理评分带来的影响,本文采用评分矩阵的多种维度进行余弦相似度比较的方法修正不合理评分。用不同用户对高相似度的多个项目所做评分构成的评分向量计算余弦相似度,首先将评分向量按元素个数均分为多组,分别求取对应的余弦相似度,如果某组余弦相似度过小,表明该组存在不合理评分,再对带不合理评分的数组进行降维分组,如此往复,最终可确定不合理评分;再对第1次分组的不带不合理评分的各组余弦相似度求取平均值,将其作为带不合理评分数组的余弦相似度,从而计算出1个评分来取代所确定的不合理评分。

修正评分后,结合皮尔逊相似度模糊偏好相似度和Jaccard相似度计算用户相似度,以推荐评分与实际评分间的平均绝对偏差(MAE)、准 确 率 (Precision)和 覆 盖 率 (Coverage)来衡量推荐性能。利用MovieLens数据库和BookCrossing数据库进行实验。

协同过滤推荐

采用文中所使用的对于不合理的评分的修正之后,利用修正后的评分矩阵计算用户相似度,假设有u个用户对v个项目做出了评分,评分矩阵表示为Ruv,rjk表示第j个用户对第k个项目做出的评分。如果未评分,则将对应的评分记为0。

于是有:
image

本文以模糊化的混合评分相似度作为用户评分的相似度,以此来衡量不同用户的相似度。此相似度为3部分的乘积:皮尔逊相似度×平均模糊偏好相似度×Jaccard相似度。第j个用户Aj和第h
个用户Ah的皮尔逊相似度为:
image

算法

最后文中给出算法实现细节,需要查看算法的同学可以去知网搜索“用余弦相似度修正评分的协同过滤推荐算法”查看。

写在结尾

今天论文分享就到这了,明天见!

标签:评分,修正,用户,余弦,不合理,算法,过滤,相似
From: https://www.cnblogs.com/wephiles/p/17972276

相关文章

  • 玩玩算法题——Episode 2
    Leetcode每日一题:最大字符串匹配数目题干如下:给你一个下标从0开始的数组words,数组中包含互不相同的字符串。如果字符串words[i]与字符串words[j]满足以下条件,我们称它们可以匹配:字符串words[i]等于words[j]的反转字符串。0<=i<j<words.length请你返回数组......
  • 使用过滤器记录api接口访问时长并记录日志
    usingERP.Helper;usingERP.Models.User;usingSystem;usingSystem.Diagnostics;usingSystem.Web;usingSystem.Web.Http.Controllers;usingSystem.Web.Http.Filters;usingActionFilterAttribute=System.Web.Http.Filters.ActionFilterAttribute;usingLogger......
  • 贪心算法-题目1力扣455(简单题)
    力扣455,给小朋友发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j]>=g[i],我们可以将这个饼干 j 分配......
  • 算法—差分
    1.一维差分(实质:前缀和的逆运算)给区间[l,r]中的每个数加上c:B[l]+=c,B[r+1]-=c上述操作可以免去构造一个新数组,可以直接给差分赋值2.二维差分给以(x1,y1)为左上角,(x2,y2)为右下角的子矩阵中的所有元素加上C:S[x1,y1]+=c,S[x2+1,y1]-=c,S[x1,y2+1]-=c,......
  • Druid作为数据源(连接池、过滤器、日志)
    Druid作为数据源(连接池、过滤器、日志)druid基本参数介绍name:数据源名称如果存在多个数据源,监控的时候可以通过名字来区分开来如果没有配置,将会生成一个名字,格式是"DataSource-"+System.identityHashCode(this)jdbcUrl:连接数据库的url,不同数据库不一样username:连接......
  • 2024/1/17 算法笔记
    1.欧拉质数筛功能是给一个整数n查找小于等于n的所有质数。最后使用的是prime【i】//功能:查找n内第x个质数。boolisprime[100000010];//isprime[i]=1表示:i是素数intprime[6000010],cnt=0;//prime存质数voidgetprime(intn){//筛到n也就是n以内的质数memset(is......
  • 算法笔记之图论
    打开转盘锁你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字:'0','1','2','3','4','5','6','7','8','9'。每个拨轮可以自由旋转:例如把'9'变为'0','0'变为......
  • 算法笔记
    1.回溯法(Backtracking)应用:组合、排列、子集等组合型问题,0/1背包问题、图的着色问题等。时空复杂度:时空复杂度较高,指数级别。时间复杂度:O(2^n)或更高,其中n是问题规模。空间复杂度:O(n)或更高,取决于递归深度。特性:通过深度优先搜索遍历解空间。需要撤销选择,回溯到上一步......
  • 学习笔记——ST算法
    ST算法ST算法是一种运用倍增来解决RMQ问题也就是区间最值问题的算法。给定一个长度为\(N\)的序列\(A\),ST算法能在\(\mathcalO(NlogN)\)的时间预处理后,以\(\mathcalO(1)\)的时间在线回答区间最值问题。设\(F_{i,j}\)表示序列\(A\)中下标在子区间\(\left[i,......
  • 算法—前缀和
    1.一维前缀和S[i]=a[1]+a[2]+...a[i]//求s[n]a[l]+...+a[r]=S[r]-S[l-1]//求l-r的序列和2.二维前缀和S[i,j]=s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];第i行j列格子左上部分所有元素的和以(x1,y1)为左上角,(x2,y2)为右下角的子矩阵的和为:S[......