如何计算数字的相似度(在列表中)
How to calculate similarity of numbers (in list)
我正在寻找一种计算数字列表相似度分数的方法。理想情况下,该方法应在固定范围内给出结果。例如从 0 到 1,其中 0 完全不相似,1 表示所有数字都相同。
为了清楚起见,让我举几个例子:
0 1 2 3 4 5 6 7 8 9 10 => the similarity should be 0 or close to zero as all numbers are different
1 1 1 1 1 1 1 => 1
10 9 11 10.5 => close to 1
1 1 1 1 1 1 1 1 1 1 100 => score should be still pretty high as only the last value is different
我曾尝试根据归一化和平均值来计算相似度,但是当存在一个 'bad number' 时,这给了我非常糟糕的结果。
谢谢。
相似性测试总是非常主观,正确使用它在很大程度上取决于您尝试使用它的目的。我们已经有了三种典型的集中趋势度量(均值、中位数、众数)。很难说哪种测试对你有用,因为有不同的测量方法可以满足你的要求,但对其他列表(如 [1]*7 + [100] * 7
)有截然不同的测量方法。这是一种解决方案:
import statistics as stats
def tester(ell):
mode_measure = 1 - len(set(ell))/len(ell)
avg_measure = 1 - stats.stdev(ell)/stats.mean(ell)
return max(avg_measure, mode_measure)
我正在寻找一种计算数字列表相似度分数的方法。理想情况下,该方法应在固定范围内给出结果。例如从 0 到 1,其中 0 完全不相似,1 表示所有数字都相同。
为了清楚起见,让我举几个例子:
0 1 2 3 4 5 6 7 8 9 10 => the similarity should be 0 or close to zero as all numbers are different
1 1 1 1 1 1 1 => 1
10 9 11 10.5 => close to 1
1 1 1 1 1 1 1 1 1 1 100 => score should be still pretty high as only the last value is different
我曾尝试根据归一化和平均值来计算相似度,但是当存在一个 'bad number' 时,这给了我非常糟糕的结果。
谢谢。
相似性测试总是非常主观,正确使用它在很大程度上取决于您尝试使用它的目的。我们已经有了三种典型的集中趋势度量(均值、中位数、众数)。很难说哪种测试对你有用,因为有不同的测量方法可以满足你的要求,但对其他列表(如 [1]*7 + [100] * 7
)有截然不同的测量方法。这是一种解决方案:
import statistics as stats
def tester(ell):
mode_measure = 1 - len(set(ell))/len(ell)
avg_measure = 1 - stats.stdev(ell)/stats.mean(ell)
return max(avg_measure, mode_measure)