推荐算法基础--相似度计算方法汇总

推荐算法基础--相似度计算方法汇总

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/y990041769/article/details/77837915

推荐系统中相似度计算可以说是基础中的基础了,因为基本所有的推荐算法都是在计算相似度,用户相似度或者物品相似度,这里罗列一下各种相似度计算方法和适用点

余弦相似度

 

 
similarity=cos(θ)=ABAB=i=1nAi×Bii=1n(Ai)2−−−−−−−√×i=1n(Bi)2−−−−−−−√similarity=cos⁡(θ)=A⋅B‖A‖‖B‖=∑i=1nAi×Bi∑i=1n(Ai)2×∑i=1n(Bi)2

 

这个基本上是最常用的,最初用在计算文本相似度效果很好,一般像tf-idf一下然后计算,推荐中在协同过滤以及很多算法中都比其他相似度效果理想。 
由于余弦相似度表示方向上的差异,对距离不敏感,所以有时候也关心距离上的差异会先对每个值都减去一个均值,这样称为调整余弦相似度

欧式距离

 

 
d(x,y):=(x1y1)2+(x2y2)2++(xnyn)2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√=i=1n(xiyi)2−−−−−−−−−−√d(x,y):=(x1−y1)2+(x2−y2)2+⋯+(xn−yn)2=∑i=1n(xi−yi)2

 

基本上就是两个点的空间距离,下面这个图就能很明显的说明他和余弦相似度区别,欧式距离更多考虑的是空间中两条直线的距离,而余弦相似度关心的是空间夹角。所以

欧氏距离能够体现个体数值特征的绝对差异,所以更多的用于需要从维度的数值大小中体现差异的分析,如使用用户行为指标分析用户价值的相似度或差异。

余弦距离更多的是从方向上区分差异,而对绝对的数值不敏感,更多的用于使用用户对内容评分来区分兴趣的相似度和差异,同时修正了用户间可能存在的度量标准不统一的问题(因为余弦距离对绝对数值不敏感)。

这里写图片描述

皮尔逊相关性(PC)

 

 
ρX,Y=cov(X,Y)σXσY=E[(XμX)(YμY)]σXσYρX,Y=cov(X,Y)σXσY=E[(X−μX)(Y−μY)]σXσY

上面是总体相关系数,常用希腊小写字母 ρ (rho) 作为代表符号。估算样本的协方差和标准差,可得到样本相关系数(样本皮尔逊系数),常用英文小写字母 r 代表: 
 
r=i=1n(XiX¯¯¯¯)(YiY¯¯¯¯)i=1n(XiX¯¯¯¯)2−−−−−−−−−−√i=1n(YiY¯¯¯¯)2−−−−−−−−−−√r=∑i=1n(Xi−X¯)(Yi−Y¯)∑i=1n(Xi−X¯)2∑i=1n(Yi−Y¯)2

 

其实这个就是前面讲的调整的余弦相似度,因为在推荐系统中均值分为用户的均值和物品的均值,这里相当于是物品的均值。这个也是比较常用的。

斯皮尔曼等级相关系数

斯皮尔曼相关系数(Spearman Rank Correlation)被定义成 等级变量之间的皮尔逊相关系数。[1] 对于样本容量为 n的样本, n个 原始数据 Xi,YiXi,Yi被转换成等级数据 xi,yixi,yi, 相关系数ρ为

 

 
ρ=i(xix¯)(yiy¯)i(xix¯)2i(yiy¯)2−−−−−−−−−−−−−−−−−−−√ρ=∑i(xi−x¯)(yi−y¯)∑i(xi−x¯)2∑i(yi−y¯)2

实际应用中, 变量间的连结是无关紧要的, 于是可以通过简单的步骤计算 ρ.[1][2] 被观测的两个变量的等级的差值  di=xiyidi=xi−yi, 则 ρ 为

 

 

 
ρ=16d2in(n21)ρ=1−6∑di2n(n2−1)

 

看一个维基百科的例子:

智商, XiXi每周花在电视上的小时数, YiYi等级 xixi等级yiyididid2idi2
8601100
972026-416
992838-525
1002747-39
10150510-525
1032969-39
106773416
110178539
112692749
11312104636

根据 d2idi2 计算 d2i=194∑di2=194。 样本容量n为 10。 将这些值带入方程

 

 
ρ=16×19410(1021)ρ=1−6×19410(102−1)

 

得 ρ = −0.175757575…

这个值很小表明上述两个变量的关系很小。 原始数据不能用于此方程中,相应的, 应使用皮尔逊相关系数计算等级。

我们发现这个思路是不考虑数据本身,只考虑变量间的排名顺序,理论上SRC可以避免对rating进行标准化的问题

平均平方差异(MSD)

$$ \operatorname {MSE}(T)={\sqrt {(x_{1}-y_{1})^{2}+(x_{2}-y_{2})^{2}+\cdots +(x_{n}-y_{n})^{2}}}={\sqrt {\sum _{​{i=1}}^{n}(x_{i}-y_{i})^{2}}}$$

计算两个用户在打分中均方差,表现比PC差,因为它没有考虑到用户偏好或产品的被欣赏程度之间的负相关。

有论文比较过PC的MAE 要优于 MSD 和SRC

Jaccard 距离和Dice系数

 

 
J(X,Y)=|XY||X|U|Y|J(X,Y)=|X∩Y||X|U|Y|

 

意思是两个集合的交集除以并集,比如文本相似度可以用出现相同词个数进行计算。

转载于:https://www.cnblogs.com/think90/p/11499103.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: n-way-k-shot是一种机器学习方法,在这个过程中,我们需要从n个类别中选择k个样本进行学习。该方法的具体流程如下: 1. 首先,从n个分类中选择需要学习的k个样本。通常,这些样本是从许多不同的图像中挑选出来的。 2. 然后,使用这些样本来训练模型,以便让模型可以通过图像将不同的类别分类。 3. 在针对新数据集中的新类别进行分类时,模型可以使用其之前学习到的知识来进行分类。 总的来说,n-way-k-shot是一种有效的机器学习方法,可以使模型能够快速分类新的数据集并且准确地分类它们。 ### 回答2: n-way-k-shot是一种常见的多分类任务评估方法,其流程如下: 1. 数据准备:首先,我们需要准备用于训练和测试的数据集。数据集中的每个样本都有一个标签,表示其所属的类别。我们将数据集分为训练集和测试集,确保每个类别的样本数量均匀分布。 2. 模型训练:我们使用训练集来训练一个模型。在训练阶段,模型通过观察不同类别的样本来理解类别之间的区别和共性。可以使用各种机器学习算法或深度学习模型进行训练。 3. 模型评估:接下来,我们使用测试集来评估已经训练好的模型的性能。在传统的分类任务中,我们通常会计算准确率或混淆矩阵等评估指标。但在n-way-k-shot任务中,评估方法略有不同。 4. 测试样例的选择:在n-way-k-shot评估中,我们首先从测试集中选择n个类别(称为n-way),然后从这n个类别中随机选择k个样本(称为k-shot)。这些样本将用于评估模型。 5. 特征提取:随后,我们使用已经训练好的模型对测试样例进行特征提取。特征可以是模型的中间层输出或模型的某些参数。 6. 相似度度量:对于每个测试样例,我们计算其特征与训练集中每个类别的特征之间的相似度。通常使用欧式距离或余弦相似度等度量方法。 7. 预测结果:根据相似度度量的结果,我们选择与测试样例特征最相似的k个训练样例作为预测结果。这些训练样例所属的类别作为预测结果的输出。 8. 评估模型性能:最后,我们将预测结果与测试集的真实标签进行比较,计算模型在n-way-k-shot任务上的准确率或其他评估指标。 通过以上流程,n-way-k-shot任务能够更好地评估模型的泛化能力,即在少样本情况下对新类别的分类能力。 ### 回答3: N-way-k-shot是指在机器学习领域中用于评估和比较模型性能的一种方法。它的具体流程可以描述如下: 1. 数据准备:首先需要准备好用于训练和测试的数据集。数据集应该包含n个不同的类别,每个类别有k个样本。假设有m个类别,那么总的样本数量为n * k * m。 2. 划分训练集和测试集:将准备好的数据集划分为训练集和测试集。通常情况下,训练集用于训练模型,而测试集用于评估模型的性能。 3. 训练模型:使用划分好的训练集对模型进行训练。训练的过程可以根据具体的机器学习算法进行,例如神经网络、支持向量机等。 4. 测试模型:使用划分好的测试集对训练好的模型进行测试。对于每个测试样本,模型将预测它属于哪一个类别。 5. 性能评估:对模型的性能进行评估。常用的评估指标包括准确率、精确率、召回率等。可以计算每个类别的指标,以及整体的指标。 6. 重复步骤2至5:为了获得更具统计意义的评估结果,需要多次重复步骤2至5。每次重复时采用不同的训练集和测试集划分,以及不同的训练和测试样本。 7. 汇总结果:将多次重复得到的评估结果进行汇总,可以计算平均值和标准差,从而更准确地评估和比较模型的性能。 总之,N-way-k-shot方法通过多次划分训练集和测试集,并对模型进行多次训练和测试,以获得更具统计意义的性能评估结果。这种方法可以更全面地评估模型在多个类别上的性能,帮助选择最佳模型或算法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值