推荐系统三十六式学习笔记:原理篇.近邻推荐09|协同过滤中的相似度计算方法有哪些?

目录

  • 相似度的本质
  • 相似度的计算方法:
    • 1、欧式距离
    • 2、余弦相似度
    • 3、皮尔逊相关度
    • 4 、杰卡德(Jaccard)相似度
  • 总结

相似度的本质

推荐系统中,推荐算法分为两个门派,一个是机器学习派,一个是相似度门派。机器学习派是后起之秀,而相似度门派则是泰山北斗。
近邻推荐,近邻并不一定只是在三维空间下的地理位置的近邻,也可以是高维空间的近邻。

近邻推荐的核心就是相似度计算方法的选择,由于近邻推荐并没有采用最优化思路,所以效果通常取决于矩阵的量化方式和相似度的选择。

相似度,与之相对应的一个概念是距离,两者都可以用来度量两个物体在高维空间中的亲疏关系。

推荐系统中的相似度门派,实际上有这么一个潜在假设:如果两个物体很相似,也就是距离很近,那么这两个物体就很容易产生一样的动作。

在近邻推荐中,最常用的相似度是余弦相似度,除了余弦相似度,还有欧式距离,皮尔逊相关度,自适应余弦相似度,局部敏感哈希等,使用场景各有不同,今天,我会分别一一介绍。

相似度的计算方法:

数据分类
相似度计算对象是向量,或者叫做高维空间下的坐标。那表示这个向量的数值就有两只能够:
1、实数值;
2、布尔值,也就是0或1;

下面介绍的不同计算方法适用于不同的数据种类。

1、欧式距离

欧氏距离,是一个欧式空间下度量距离的方法。两个物体,都在同一空间下表示为两个点,假如叫做p和q,分别都是n个坐标。那么欧式距离就是衡量这两个点之间的距离,欧式距离不适合布尔向量之间。
计算公式如下:
E ( p , q ) = ∑ i = 1 n ( p i − q i ) 2 E(p,q) = \sqrt {\sum_{i=1}^n{(p_i - q_i)^2}} E(p,q)=i=1n(piqi)2

这个公式就是:每个坐标上的值相减,求平方和,最后输出方根。
显然,欧式距离得到的值是一个非负数,通常相似度计算度量结果希望是[-1,1]或者[0,1]之间,所以欧式距离无法直接应用到这种场景下,需要转换,最常用的转换公式如下:

1 1 + E ( p , q ) \frac{1}{1+ E(p,q)} 1+E(p,q)1
距离加一后取倒数。这个公式能够把范围为0到正无穷的欧式距离转换为0到1的相似度。
欧式距离度量的是空间中两个点的绝对差异,适用于分析用户能力模型之间的差异,比如消费能力、贡献内容的能力等;

2、余弦相似度

余弦相似度,度量的是两个向量之间的夹角,其实就是用夹角的余弦值来度量,所以名字叫余弦相似度。当两个向量的夹角为0度时,余弦值为1,当夹角为90度时,余弦值为0,当夹角为180度时,余弦值为-1。

余弦相似度在度量文本相似度,用户相似度、物品相似度的时候都比较常用;但是需要注意的是,余弦相似度的特点:它与向量的长度无关。因此,余弦相似度计算时需要对向量长度做归一化;
c o s ( p , q ) = ∑ i = 1 n p i ∗ q i ∑ i = 1 n p i 2 ∗ ∑ i = 1 n q i 2 cos(p,q) = \frac{\sum_{i=1}^n{p_i * q_i}}{\sqrt{\sum_{i=1}^n{p_i}^2 } * \sqrt{\sum_{i=1}^n{q_i}^2 }} cos(p,q)=i=1npi2 i=1nqi2 i=1npiqi

经过向量长度归一化后的相似度量方式,背后隐藏着这样一种思想:两个向量,只要方向一致,无论程度强弱,都可以视为相似。

在协同过滤中,如果选择余弦相似度,某种程度上更加依赖两个物品的共同评价用户数,而不是用户给与的评分多少。这是由于余弦相似度被向量长度归一化后的结果。

余弦相似度对绝对绝对值大小不敏感这件事,在某些应用上仍然有些问题。

举个例子,用户A对两部电影的评分分别为1分、2分,用户B对同样两部电影的评分分别是4分、5分。用余弦相似度计算出来,两个用户的相似度达到0.98.这显然与实际不符,用户A明显不喜欢这两部电影。

用户电影1电影2
用户A12
用户B45

计算用户A和用户B的余弦相似度:
c o s ( A , B ) = 1 ∗ 4 + 2 ∗ 5 1 2 + 2 2 ∗ 4 2 + 5 2 = 14 205 ≈ 0.98 cos(A,B) =\frac{1*4+ 2*5}{ \sqrt{1^2+2^2} * \sqrt{4^2+5^2}} = \frac{14}{\sqrt{205}}≈0.98 cos(A,B)=12+22 42+52 14+25=205 140.98

针对这个问题,对余弦相似度有个改进,改进的算法叫做调整的余弦相似度(Adjusted Cosine Similarity)。调整的方法很简单,就是先计算向量每个维度上的均值,然后每个向量在各个维度上都减去均值后,再计算余弦相似度。
电影1平均分为:(1+4)/2 =2.5; 电影2平均分为:(2+5)/2 =3.5;

c o s ( A , B ) = ( 1 − 2.5 ) ∗ ( 4 − 2.5 ) + ( 2 − 3.5 ) ∗ ( 5 − 3.5 ) ( 1 − 2.5 ) 2 + ( 2 − 3.5 ) 2 ∗ ( 4 − 2.5 ) 2 + ( 5 − 3.5 ) 2 = − 4.5 4.5 = − 1 cos(A,B) =\frac{(1-2.5)*(4-2.5)+ (2-3.5)*(5-3.5)}{ \sqrt{(1-2.5)^2+(2-3.5)^2} * \sqrt{(4-2.5)^2+(5-3.5)^2}} = \frac{-4.5}{\sqrt{4.5}}=-1 cos(A,B)=(12.5)2+(23.5)2 (42.5)2+(53.5)2 (12.5)(42.5)+(23.5)(53.5)=4.5 4.5=1

用调整后的余弦相似度计算得到的相似度是-1,呈现出两个用户口味相反,和直觉相符。

3、皮尔逊相关度

皮尔逊相关度,实际上也是一种余弦相似度,不过先对向量做了中心化,向量p和向量q各自减去向量的均值后,再计算余弦相似度。
R ( p , q ) = ∑ i = 1 n ( p i − u p ) ∗ ( q i − u q ) ∑ i = 1 n ( p i − u p ) 2 ∗ ∑ i = 1 n ( q i − u q ) 2 R(p,q) = \frac{\sum_{i=1}^n{(p_i - u_p) *(q_i -u_q)}}{\sqrt{\sum_{i=1}^n{(p_i - u_p)^2}} * \sqrt{\sum_{i=1}^n{(q_i - u_q)^2}}} R(p,q)=i=1n(piup)2 i=1n(qiuq)2 i=1n(piup)(qiuq)

皮尔逊相关度计算结果范围在-1和1之间,-1表示负相关,1表示正相关。皮尔逊相关度,其实计算的是两个随机变量是不是在同增同减。
由于皮尔逊相关度度量的是两个变量的变化趋势是否一致,所以不适合用作计算布尔向量之间的相关度。
还以上面的例子举例,用户A对两部电影的评分分别为1分、2分,用户B对同样两部电影的评分分别是4分、5分,那么使用皮尔逊相关系数的公式计算两个用户之间的相关系数:
首先,我们需要计算用户A和用户B的评分均值:

用户A的评分均值: (1+2)/2 = 1.5
用户B的评分均值: (4+5)/2 = 4.5

然后,我们可以使用皮尔逊相关系数的公式计算两个用户之间的相关系数:

ρ A , B = ∑ i = 1 2 ( x i − 1.5 ) ( y i − 4.5 ) ∑ i = 1 2 ( x i − 1.5 ) 2 ∑ i = 1 2 ( y i − 4.5 ) 2 \rho_{A,B} = \frac{\sum_{i=1}^{2} (x_i - 1.5)(y_i - 4.5)}{\sqrt{\sum_{i=1}^{2} (x_i - 1.5)^2} \sqrt{\sum_{i=1}^{2} (y_i - 4.5)^2}} ρA,B=i=12(xi1.5)2 i=12(yi4.5)2 i=12(xi1.5)(yi4.5)

将用户A和用户B的评分代入公式中进行计算:

ρ A , B = 1 \rho_{A,B} = 1 ρA,B=1

因此,通过计算,用户A和用户B之间的皮尔逊相关系数为1,这表示它们之间存在完全的正相关关系。

4 、杰卡德(Jaccard)相似度

杰尔德相似度,是两个集合的交集元素个数在并集中所占的比例。由于集合非常适用于布尔向量表示,所以杰尔德相似度简直就是为布尔值向量私人定做的。对应的计算公式是:
J ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ J(A, B) = \frac{|A ∩ B|}{|A ∪ B|} J(A,B)=ABAB

1、分子是两个布尔向量做点积计算,得到的就是交集元素个数;
2、分母是两个布尔向量做或运算,再求元素和。

余弦相似度适用于评分数据,杰尔德相似度适合用于隐式反馈数据。例如,使用用户的收藏行为,计算用户之间的相似度,杰尔德相似度就适合来承担这个任务。

总结

今天,我介绍了常用的几种相似度计算方法,以及其各自的使用场景。

这里的场景是按数据形式划分的,按照向量维度取值是否是布尔值来看,杰卡德相似度就只适合布尔值向量,余弦相似度弹性略大,适合两种向量。欧式距离度量的是空间中两个点的绝对差异,适用于分析用户能力模型之间的差异,比如消费能力、贡献内容的能力等;是绝对差异,余弦相似度度量的是方向差异,但是调整的余弦相似度则可以避免这个弱点。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络编程2----UDP简单客户端服务器的实现

首先我们要知道传输层提供的协议主要有两种,TCP协议和UDP协议,先来介绍一下它们的区别: 1、TCP是面向连接的,UDP是无连接的。 连接的本质是双方分别保存了对方的关键信息,而面向连接并不意味着数据一定能正常传输到对…

天熠电脑怎么更换文件夹位置?三种方法,轻松驾驭

在日常使用电脑的过程中,文件夹的管理和整理对于提升工作效率和保持桌面整洁至关重要。然而,随着文件的不断增多和项目的频繁切换,我们可能需要不断调整文件夹的位置以适应新的工作需求。今天,我们就以天熠电脑为例,为…

LeetCode | 20.有效的括号

这道题就是栈这种数据结构的应用,当我们遇到左括号的时候,比如{,(,[,就压栈,当遇到右括号的时候,比如},),],就把栈顶元素弹出,如果不匹配,则返回False,当遍历完所有元素后…

“圆周素数”算法题解析

什么是圆周素数? 将一个素数逐位轮转后,所得到的数依然是素数,那么就称这个数为圆周素数。 例如:197是一个素数,将它逐位轮转后所得到的数,971,719 依然是素数。 小于100的圆周素数一共有13个…

HLS入门实验

文章目录 一、HLS介绍1.1 什么是HLS1.2HLS与VHDL/Verilog编程技术有什么关系?1.3HLS的关键技术和技术局限性1.3.1关键技术1.3.2 技术局限性 二、HLS入门实验2.1安装Vivado2.2创建项目2.3添加文件2.4仿真2.5创建Vivado工程2.6生成IP核2.7添加代码 参考 一、HLS介绍 1.1 什么是…

MySQL的发展历程:欧洲诞生,中国兴盛,美国低谷

目录 1 早期历史 2 成长与发展 3 重大变化和收购 4 现代发展 5 结语 一直比较写一些数据库相关的技术和操作、优化等文章。但写数据库在中国一般也逃脱不了MySQL这个数据库。下面简单谈一些个人看法。 MySQL整体上是起于欧洲: 一直有开源社区运营&#xff0c…

社会组织上前台、高质量发展勇担当|番禺区社联会成立十周年大会

6月5日,番禺区社联会举行“社会组织上前台,高质量发展勇担当”庆祝成立十周年大会暨“百社联百村—助力百千万工程”专项行动启动仪式。 广东省社会组织总会副秘书长王洁珊,广州市民政局一级调研员李又文,番禺区委副书记、区长叶珊…

网络安全到底是什么?一篇概念详解(附学习资料)

一、什么是网络安全?(文末有资料) “网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露、系统连续可靠正常地运行,网络服务不中断。” 说白了网络安全就…

集合java

1.集合 ArrayList 集合和数组的优势对比: 长度可变 添加数据的时候不需要考虑索引,默认将数据添加到末尾 package com.itheima;import java.util.ArrayList;/*public boolean add(要添加的元素) | 将指定的元素追加到此集合的末尾 | | p…

DOM-获取元素

获取元素的方法&#xff1a; 方法一&#xff1a;根据id获取元素document.getElementById <div id"time">2024-6-4</div> 在script标签中&#xff1a;注意getElementById括号里面必须要有引号&#xff0c;获得的是对象类型 var timer document.getEle…

harmony相关开发参考文档

以下列举一些Harmony Os应用开发文档以及相关参考开源案例&#xff0c;可协助高效率开发&#xff1a; 1.鸿蒙NEXT开发官方资料&#xff1a;包含鸿蒙NEXT开发所有的特性&#xff0c;HarmonyOS SDK等&#xff0c;可以按需查阅&#xff0c;需要开通白名单&#xff1a;应用开发导读…

2024版CorelDRAW中文破解授权码激活码!立即下载CorelDRAW中文版终身永久破解下载攻略

在设计领域&#xff0c;CorelDRAW一直以其强大的图形编辑和矢量绘图功能而受到专业用户的青睐。随着CorelDRAW 2024的发布&#xff0c;设计师们迎来了更加丰富的工具和更新的功能&#xff0c;使得创意实现更为轻松和精准。对于追求成本效益的用户而言&#xff0c;CorelDRAW 202…

【SpringBoot + Vue 尚庭公寓实战】房间支付方式管理接口实现(三)

【SpringBoot Vue 尚庭公寓实战】房间支付方式管理接口实现&#xff08;三&#xff09; 文章目录 【SpringBoot Vue 尚庭公寓实战】房间支付方式管理接口实现&#xff08;三&#xff09;1、查询全部支付方式列表2、保存或更新支付方式3、根据ID删除支付方式 房间支付方式管理…

express入门03增删改查

目录 1 搭建服务器2 静态文件托管3 引入bootstrap4 引入jquery5 编写后端接口5.1 添加列表查询方法5.2 添加路由5.3 添加数据表格 总结 我们前两篇介绍了如何利用express搭建服务器&#xff0c;如何实现静态资源托管。那利用这两篇的知识点&#xff0c;我们就可以实现一个小功能…

如何手动实现multiSetIfAbsent、multiExpire

👽System.out.println(“👋🏼嗨,大家好,我是代码不会敲的小符,目前工作于上海某电商服务公司…”); 📚System.out.println(“🎈如果文章中有错误的地方,恳请大家指正!共同进步,共同成长✊”); 🌟System.out.println(“💡如果文章对您有所帮助,希望您可以三…

Multimodal Dynamics:用于多模态融合背景下的分类

Multimodal Dynamics&#xff08;MD&#xff09;是可信赖的多模态分类算法&#xff0c;该算法动态评估不同样本的特征级和模态级信息量&#xff0c;从而可信赖地对多模态进行融合。 来自&#xff1a;Multimodal Dynamics: Dynamical Fusion for Trustworthy Multimodal Classi…

2、python 基础学习总结

文章目录 一、python 标识符和变量命名规则1、python 标识符2 python 变量和变量命名规则 二、数据类型2.1 Numbers&#xff08;数字类型&#xff09;2.2 String&#xff08;字符串类型&#xff09;2.2.1 单引号、双引号、三引号字符串之间的区别2.2.2 转义字符 在这里插入图片…

PDU模块中浪涌保护模块与空开模块的应用

由于PDU具体应用的特殊性&#xff0c;其在规划设计时具有应用场景的针对性&#xff0c;同时PDU的高度定制化的特点&#xff0c;是其他电气联接与保护产品所不具备的。 PDU基础的输出输入功能外&#xff0c;其电路的控制与电压保护器同时也极为重要。空气开关和浪涌保护器相关功…

自动驾驶场景下TCP协议参数优化调整案例分享

RTT 往返时间&#xff0c;从tcp协议栈决定发包&#xff0c;到收到回包的时间。 包含本地驱动&#xff0c;网卡硬件&#xff0c;网线&#xff0c;交换机&#xff0c;收包方处理的耗时。需注意如果开了delayed ack&#xff0c;协议栈未做特殊处理&#xff08;默认没做&#xff…

GEO ISP图像调试-PFC(蓝紫边校正)

目录 1、简单介绍 2、调试策略 3、输出结果 1、简单介绍 GEO中中调整图像蓝紫边可分为两步&#xff0c;第一步&#xff1a;调整蓝紫边检测区域&#xff0c;第二步&#xff1a;设置去蓝紫边强度。 2、调试策略 图1 该图像蓝紫边较严重 主要原因是由于蓝紫边检测不准导致的&…