Algorithm 如何计算两个数组之间的相似性?

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票。用户在一个特定类别中投票。我们不知道他们投票的项目。我们只知道这些物品属于同一类别。因此,我们在类别中有投票数组。问题是我们如何计算这些用户之间的相似性 将您的投票视为随机样本 如果你真的不知道他们投了什么票,你唯一能做的就是分配选票。也就是说,您有来自两个分布的两个

我有两个这样的数组: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})
使用统计数据 <