我有两个这样的数组:a1 = [8,6,4,8,8,9],a2 = [7,3,8,4,3,9,9,5,8,3,5 ,8]。它们可能包含可以重复的不同数量的整数。如何计算这些之间的相似度?我应该使用哪个指标?
更新:数字代表从1到10的投票。用户在一个特定类别中投票。我们不知道他们被投票的物品。我们只知道这些物品属于同一类别。所以我们在类别中有投票数组。问题是我们如何计算这些用户之间的相似性。
答案 0 :(得分:0)
如果你真的不知道他们投了什么票,你唯一拥有的就是票数的分配。即,您有两个分布的两个样本,您需要评估分布之间的差异。
最简单的方法是计算用户给出给定投票的次数,即将[8,6,4,8,8,9]
转换为[0,0,0,1,0,1,0,3,9,0]
(即,8投3票意味着在第8位投票3)。现在你的矢量具有相同的长度,你可以使用余弦相似性。
如果您不有大量数据,即您真的需要比较投票1-2次的人,您可以尝试“模糊投票”,即对{{ 1}}为1/2投票,8投票,每对7投9票。例如,您的向量8
和[0,0,0,0,0,0,0,0,0,1]
将变为[0,0,0,0,0,0,0,0,1,0]
和{{1} }。
这相当于使用“不寻常”的点积:而不是简单的[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*)
是一个几乎对角矩阵(e.g.,{ {1}},(Av,u)=sum_ij(a_ij*v_i*u_j)
如果A
,则a_ii=4
。然后将新的余弦相似度定义为
a_ij=1
对于tridiagonal示例 上面,公式如下:
|i-j|=1
如果你做有很多数据,也就是说,每个人都有至少5次每个数字的投票(即,每个长度为10的向量都包含所有组件> = 5),那么你可以使用Chi-squared test或,better yet,Likelihood-ratio test。
您应该指定哪些坐标匹配(如果您怀疑,请执行推荐系统)。
例如,如果用户1投票为a_ij=0
而用户2投票为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})
是否与得分[3]
或{{1}相同的对象或者对于一个完全不同的对象。