两个用户的选择相似程度如何评分?有哪些好的计算方法?

3
例如,如果是选择巧克力、冰淇淋、甜甜圈等,按照他们的偏好排序。
如果用户1进行选择:
A B C D E F G H I J

用户2选择

J A B C I G F E D H

有哪些好的方法可以计算得分从0到100,以告诉我们选择的接近程度?这必须是有意义的,例如如果大多数答案相同,只有1或2个答案不同,得分不能被降低到极低。或者,如果大多数答案只是“移动了1个位置”,那么我们不能将它们视为“完全不同”,并且对于仅相差1个位置的差异,不能给予0分。

3个回答

3

将每个字母项分配一个整数值,从1开始计数 A=1,B=2,C=3,D=4,E=5,F=6(为简单起见停止于F) 然后考虑项目放置的顺序,将其用作倍数 因此,如果数字是第一个项目,则其乘数为1,如果是第6个项目,则乘数为6 找出您可能拥有的最高得分(基本上是当所有内容都按连续顺序排列时)

item  a  b  c  d  e  f 
order 1 2 3 4 5 6 
value 1 2 3 4 5 6 
score 1 4 9 16 25 36 Sum = 91, Score = 100% (MAX)

item a b d c e f    
order 1 2 3 4 5 6        
value 1 2 4 3 5 6    
score 1 4 12 12 25 36 Sum =  90 Score = 99%

=======================

order 1 2 3 4 5 6    
item  f  d  b  c  e  a    
value 6 4 2 3 5 1    
score 6 8 6 12 25 6 Sum =  63 Score =  69%



order 1 2 3 4 5 6    
item  d  f  b  c  e  a    
value 4 6 2 3 5 1    
score 4 12 6 12 25 6 Sum =  65 Score =  71%

显然这只是我想出来的一个非常粗糙的实现。它可能不适用于所有情况。例如3和4交换了一个位置,但分数偏差达到了2%(与例1和2相比,其偏差为1%)。这只是一个想法。我不是算法专家。您可以使用最终数字并对其进行其他操作以获得更好的数值比较。


2
你可以:
  1. 计算序列之间的编辑距离;
  2. 将编辑距离从序列长度中减去;
  3. 将结果除以序列长度;
  4. 将结果乘以100。

Score = 100 * (SequenceLength - Levenshtein( Sequence1, Sequence2 ) ) / SequenceLength

编辑距离基本上是将序列一转换为序列二所需的操作次数。因此,一个算法就是Levenshtein距离算法。(了解更多)
例子:

Weights
  insert: 1
  delete: 1
  substitute: 1

Seq 1: ABCDEFGHIJ
Seq 2: JABCIGFEDH

Score = 100 * (10-7) / 10 = 30

Seq 1: ABCDEFGHIJ
Seq 2: ABDCFGHIEJ

Score = 100 * (10-3) / 10 = 70

2
最直接的计算方法是Levenshtein距离,它是将一个字符串转换为另一个字符串所需更改的次数。
Levenshtein距离在您的任务中的缺点是它不能衡量产品之间的相似性。也就是说,您将不知道A和J彼此之间有多接近。例如,用户1可能喜欢甜甜圈,而用户2可能喜欢馒头,您知道大多数喜欢前者的人也喜欢后者。从这些信息中,您可以推断出用户1做出的选择与用户2的选择相似,尽管它们没有相同的元素。
如果这是您的情况,您将必须使用以下两种方法之一:统计方法来推断选择之间的相关性或推荐引擎

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接