Weiguo's Station

  • 博客首页

  • 文章归档

  • 分类专栏

  • 各种标签

  • 站点搜索

肯德尔Rank相关系数(Kendall rank correlation coefficient)

发表于 2020-05-21 更新于 2021-03-22 分类于 基础知识

肯德尔Rank相关系数(Kendall rank correlation coefficient), 又叫 Kendall's tau 是数学统计中一个常用的系数,用来描述两个序列的相关系数。 如果两个序列完全一致,则 Kendall's tau 值为1,两个毫不相关的序列的 Kendall's tau 值为0, 而两个互逆的序列的 Kendall's tau 系数为-1。

具体的计算方式为: $1 - 2 \cdot symDif / (n \cdot (n - 1))$, 其中 $n$ 为排列的长度(两个序列的长度相同),$symDif$为对称距离。

对称距离的计算方式如下:

  1. 对于两个给定的序列 $S1 = \lbrace a, b, c, d \rbrace; S2 = \lbrace a, c, b, d \rbrace $ 分别找出两个序列的二元约束集。
  2. $S1$的所有二元约束集为 $\lbrace (a,b), (a,c), (a,d), (b,c), (b,d), (c,d) \rbrace$,
  3. $S2$ 的所有二元约束集为 $\lbrace (a,c), (a,b), (a,d), (c,b), (c,d), (b,d) \rbrace $,
  4. 比较两个二元约束集,其中不同的二元约束有两个$(b,c)$和$(c,b)$,所以对称距离为$2$。

代入上面的计算公式可以得到这两个序列的相关系数为: $ 1 - 2 \cdot 2 / (4 \cdot 3) = 2 / 3 = 0.667 $

这是一个很有用的参数,可以用来比较两个序列的相似性,例如可以用于搜索引擎的排序结果的好坏。 比较一个序列与一个类似标准答案的排序序列的相似性(人工评价),得出排序序列的有效性。

计算的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def cal_kendall_tau(list_1 , list_2):
length = len(list_1)
if length != len(list_2):
return -1
set_1 = set()
set_2 = set()
for i in range(length):
for j in range(i+1,length):
set_1.add( (list_1[i],list_1[j]) )
set_2.add( (list_2[i],list_2[j]) )
count = len(set_1 & set_2)
return float(count)*2 / ((length-1)*length)

if __name__ == '__main__':
list_1 = ['a','b','c','d']
list_2 = ['c','b','a','d']
list_3 = list_1[:]
list_3.reverse()
print('sim of 1&2 : %s' % cal_kendall_tau(list_1,list_2))
# 排序 # 评估方法 # RankEvaluate
SSH远程执行任务
交叉熵损失函数区别及应用场景
WeiguoZHAO

WeiguoZHAO

Welcome to my blog~
87 日志
13 分类
49 标签
GitHub E-Mail
大牛们
  • colah's blog
  • 王喆的Github
  • 刘建平的Github
  • 美团技术团队
© 2021 WeiguoZHAO
0%