Algorithm 如何计算两个数组之间的相似性?
我有两个这样的数组:a1=[8,6,4,8,8,9],a2=[7,3,8,4,3,9,9,5,8,3,5,8]。它们可能包含不同数量的可以重复的整数。我如何计算它们之间的相似性?我应该使用哪种度量标准 更新:数字代表从1票到10票。用户在一个特定类别中投票。我们不知道他们投票的项目。我们只知道这些物品属于同一类别。因此,我们在类别中有投票数组。问题是我们如何计算这些用户之间的相似性 将您的投票视为随机样本 如果你真的不知道他们投了什么票,你唯一能做的就是分配选票。也就是说,您有来自两个分布的两个样本,您需要评估分布之间的差异 最简单的方法是计算用户给出给定投票的次数,即将Algorithm 如何计算两个数组之间的相似性?,algorithm,similarity,cosine-similarity,Algorithm,Similarity,Cosine Similarity,我有两个这样的数组:a1=[8,6,4,8,8,9],a2=[7,3,8,4,3,9,9,5,8,3,5,8]。它们可能包含不同数量的可以重复的整数。我如何计算它们之间的相似性?我应该使用哪种度量标准 更新:数字代表从1票到10票。用户在一个特定类别中投票。我们不知道他们投票的项目。我们只知道这些物品属于同一类别。因此,我们在类别中有投票数组。问题是我们如何计算这些用户之间的相似性 将您的投票视为随机样本 如果你真的不知道他们投了什么票,你唯一能做的就是分配选票。也就是说,您有来自两个分布的两个
[8,6,4,8,8,9]
转换为[0,0,0,1,0,1,0,0,3,9,0]
(即8票中的3票表示第8位的3票)。现在向量的长度相同,可以使用余弦相似性
模糊你的数据
如果你有很多数据,例如,你真的需要比较投票1-2次的人,你可以尝试“模糊化投票”,即将投票给8
的人视为1/2投8票,7票和9票各1/4票。例如,你的向量[0,0,0,0,0,0,0,0,0,0,1]
和[0,0,0,0,0,0,0,0,1,0]
将变成[0,0,0,0,0,0,0,0,0,0,0.33,0.66]
和[0,0,0,0,0,0,0,0.25,0.5,0.25]
这相当于使用一个“不寻常”的点积:而不是简单的(v,u)=sum_i(v_i*u_i*)
,使用(Av,u)=sum_ij(a_ij*v_i*u_j)
,其中a
是一个几乎对角的矩阵(,a_ii=4
,a_ij=1
,如果i-j=1
,则
CS(u,v)=arccos( (Av,u) / sqrt( (Av,v) * (Au,u) ) )
例如
上面的公式如下所示:
(Av,u) = 4*sum(v_i,u_i) + sum(v_i,u_{i-1}) + (v_i,u_{i+1})
使用统计数据
如果您有大量数据,即每个人对每个数字的投票次数至少为5次(即每个长度为10的向量的所有分量>=5),则您可以使用或
推荐系统
您应该指定匹配的坐标(如果您,如我所怀疑的,正在执行推荐系统)。
例如,如果用户1的投票是[3]
而用户2的投票是[4,5]
,则您需要知道分数3
是否与分数4
或5
针对同一对象,或者针对完全不同的对象。将您的投票视为随机样本
如果你真的不知道他们投了什么票,你唯一能做的就是分配选票。也就是说,您有来自两个分布的两个样本,您需要评估分布之间的差异
最简单的方法是计算用户给出给定投票的次数,即将[8,6,4,8,8,9]
转换为[0,0,0,1,0,1,0,0,3,9,0]
(即8票中的3票表示第8位的3票)。现在向量的长度相同,可以使用余弦相似性
模糊你的数据
如果你有很多数据,例如,你真的需要比较投票1-2次的人,你可以尝试“模糊化投票”,即将投票给8
的人视为1/2投8票,7票和9票各1/4票。例如,你的向量[0,0,0,0,0,0,0,0,0,0,1]
和[0,0,0,0,0,0,0,0,1,0]
将变成[0,0,0,0,0,0,0,0,0,0,0.33,0.66]
和[0,0,0,0,0,0,0,0.25,0.5,0.25]
这相当于使用一个“不寻常”的点积:而不是简单的(v,u)=sum_i(v_i*u_i*)
,使用(Av,u)=sum_ij(a_ij*v_i*u_j)
,其中a
是一个几乎对角的矩阵(,a_ii=4
,a_ij=1
,如果i-j=1
,则
CS(u,v)=arccos( (Av,u) / sqrt( (Av,v) * (Au,u) ) )
例如
上面的公式如下所示:
(Av,u) = 4*sum(v_i,u_i) + sum(v_i,u_{i-1}) + (v_i,u_{i+1})
使用统计数据
如果您有大量数据,即每个人对每个数字的投票次数至少为5次(即每个长度为10的向量的所有分量>=5),则您可以使用或
推荐系统
您应该指定匹配的坐标(如果您,如我所怀疑的,正在执行推荐系统)。
例如,如果用户1的投票是[3]
而用户2的投票是[4,5]
,则您需要知道分数3
是否与分数4
或5
针对同一对象,或者针对完全不同的对象。将您的投票视为随机样本
如果你真的不知道他们投了什么票,你唯一能做的就是分配选票。也就是说,您有来自两个分布的两个样本,您需要评估分布之间的差异
最简单的方法是计算用户给出给定投票的次数,即将[8,6,4,8,8,9]
转换为[0,0,0,1,0,1,0,0,3,9,0]
(即8票中的3票表示第8位的3票)。现在向量的长度相同,可以使用余弦相似性
模糊你的数据
如果你有很多数据,例如,你真的需要比较投票1-2次的人,你可以尝试“模糊化投票”,即将投票给8
的人视为1/2投8票,7票和9票各1/4票。例如,你的向量[0,0,0,0,0,0,0,0,0,0,1]
和[0,0,0,0,0,0,0,0,1,0]
将变成[0,0,0,0,0,0,0,0,0,0,0.33,0.66]
和[0,0,0,0,0,0,0,0.25,0.5,0.25]
这相当于使用一个“不寻常”的点积:而不是简单的(v,u)=sum_i(v_i*u_i*)
,使用(Av,u)=sum_ij(a_ij*v_i*u_j)
,其中a
是一个几乎对角的矩阵(,a_ii=4
,a_ij=1
,如果i-j=1
,则
CS(u,v)=arccos( (Av,u) / sqrt( (Av,v) * (Au,u) ) )
例如
上面的公式如下所示:
(Av,u) = 4*sum(v_i,u_i) + sum(v_i,u_{i-1}) + (v_i,u_{i+1})
使用统计数据
<