Kendall tau距离

定义:Kendall tau距离衡量两个序列的相似性,距离越大,相似性越小。具体可用序列a调正次序变为序列b所花费的步骤数来量化。要求序列a和序列b的长度以及元素是一样的。

如a={0,3,1,6,2,5,4}a=\{0, 3, 1, 6, 2, 5, 4\}a={0,3,1,6,2,5,4},b={1,0,3,6,4,2,5}b=\{1, 0, 3, 6, 4, 2, 5\}b={1,0,3,6,4,2,5},将a调整顺序化为b的距离

首先为序列 aaa 定义一个基准,用序列 aIndexaIndexaIndex 存放 aaa 各元素对应的索引,如下:

aaa 和 aIndexaIndexaIndex 满足: $ aIndex[a[i]] = i$ ,通过索引 iii 在 aaa 中找对应的值,通过值 a[i]a[i]a[i] 在 aIndexaIndexaIndex 中找对应的索引。

假若从 i=0i=0i=0 开始去遍历 a[i]a[i]a[i],然后返回 aIndex[a[i]]aIndex[a[i]]aIndex[a[i]], 正好可以得到一个有序的序列{0,1,2,3,4,5,6}\{0, 1, 2, 3, 4, 5, 6\}{0,1,2,3,4,5,6}。

如果b==ab == ab==a ,那么从从 i=0i=0i=0 开始去遍历 b[i]b[i]b[i],然后返回 aIndex[b[i]]aIndex[b[i]]aIndex[b[i]],也应是一个有序的序列。但当b≠ab \neq ab​=a 时,那么 aIndex[b[i]]aIndex[b[i]]aIndex[b[i]]便不是一个有序的序列。

令 $ bIndex[i] = aIndex[b[i]]$ ,将 $ bIndex[i] $ 从有序变无序的距离便是Kendall tau距离,也即是 $ bIndex[i] $ 中的逆序对数量。

通过上述推导,可将求两个序列的Kendall tau距离转为求映射变换后序列的逆序对数量,可通过归并排序求逆序对。代码如下:

class KendallTau:def __init__(self):self.count = 0def distance(self, a, b):if len(a) != len(b):return "a和b的数量不相等"n = len(a)aIndex = [0] * nfor i in range(n):aIndex[a[i]] = iprint(aIndex)bIndex = [0] * nfor j in range(n):bIndex[j] = aIndex[b[j]]print(bIndex)return self.mergeCount(bIndex)def mergeCount(self, a):self.count = 0self.mergeSort(a, 0, len(a) - 1)return self.countdef merge(self, a, l, mid, r):i = lj = mid + 1aux = []while i <= mid and j <= r:if a[i] > a[j]:aux.append(a[j])self.count += mid - i + 1j += 1else:aux.append(a[i])i += 1while i <= mid:aux.append(a[i])i += 1while j <= r:aux.append(a[j])j += 1i = lfor num in aux:a[i] = numi += 1def mergeSort(self, a, l, r):if l >= r:returnmid = l + r >> 1self.mergeSort(a, l, mid)self.mergeSort(a, mid + 1, r)self.merge(a, l, mid, r)if __name__ == '__main__':kt = KendallTau()a = [0, 3, 1, 6, 2, 5, 4]b = [1, 0, 3, 6, 4, 2, 5]res = kt.distance(a, b)print(res) # 4

Kendall tau距离相关推荐

  1. Kendall tau距离:求两个排列之间的逆序数

    Kendall tau距离的定义 以下定义取自wiki百科Kendall tau distance: The Kendall tau rank distance is a metric that co ...

  2. Kendall tau distance理解与分析

    简介 Kendall tau distance这个概念在平时如果不是专门接触到相关工作的话会显得比较陌生.它主要是一个用来比较两个向量之间相似度的概念.在一些数据分析和搜索引擎的结果相似度rankin ...

  3. Python:Kendall tau相关系数的计算

    关于Kendall correlation coefficient的介绍可参见: 维基百科:https://en.wikipedia.org/wiki/Kendall_rank_correlation ...

  4. 【2016年第4期】大数据时代的简约计算

    张家琳,孙晓明 中国科学院计算技术研究所,北京 100190 摘要:大数据存储和分析的能力是未来创新型国家的核心战略能力.当前关于大数据的理论研究在共性问题提炼.方法论框架和实时数据算法理论上仍存在一 ...

  5. Python计算数据相关系数(person、Kendall、spearman)

    pandas中DataFrame对象corr()方法的用法,该方法用来计算DataFrame对象中所有列之间的相关系数(包括pearson相关系数.Kendall Tau相关系数和spearman秩相 ...

  6. Python+pandas计算数据相关系数(person、Kendall、spearman)

    pandas中DataFrame对象corr()方法的用法,该方法用来计算DataFrame对象中所有列之间的相关系数(包括pearson相关系数.Kendall Tau相关系数和spearman秩相 ...

  7. python有哪些软件包用来考察变量之间的相关性_Python计算数据相关系数(person、Kendall、spearman)...

    pandas中DataFrame对象corr()方法的用法,该方法用来计算DataFrame对象中所有列之间的相关系数(包括pearson相关系数.Kendall Tau相关系数和spearman秩相 ...

  8. pearson, kendall 和spearman三种相关分析方法的区别

    1. Pearson相关 http://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient Pearson相关用于 ...

  9. python计算线性相关系数_Python+pandas计算数据相关系数(person、Kendall、spearman)

    pandas中DataFrame对象corr()方法的用法,该方法用来计算DataFrame对象中所有列之间的相关系数(包括pearson相关系数.Kendall Tau相关系数和spearman秩相 ...

最新文章

  1. BFS:南土所梁玉婷组综述促进土壤植物生态系统健康的微生物共存理论
  2. Hanlp分词实例:Java实现TFIDF算法
  3. python【蓝桥杯vip练习题库】ADV-281特等奖学金
  4. Calendar日历简单用法
  5. python简单的小程序_初学python的一些简单程序(1)
  6. java环境搭建_记一次阿里云服务器Java相关环境搭建的过程
  7. 谷歌浏览器下载的文件保存在哪里?
  8. java markdown转word_一键将 Word 转换为 Markdown
  9. 做的可视化大屏不好看?教你如何做出能快速开发又酷炫的大屏
  10. Go学习笔记(一)windows下的Go 语言环境安装,并运行第一个Hello World程序
  11. 乐华娱乐前训练生黄智博卖口罩诈骗案宣判:获刑三年三个月
  12. APT攻防整理-常用CVE
  13. vuejs2.0从入门到放弃--入门实例(四)
  14. Arduino基础学习
  15. 北大核心2020_2020年北大核心论文如何发表
  16. 记一次联通路由器劫持的分析过程
  17. Ubuntu 16.04设置定时任务
  18. 高等代数习题课(手写)
  19. android智能手机编程考试答案,Android智能手机编程形考作业
  20. LPDDR4 DRAM Memory Controller(Block Diagram)

热门文章

  1. 在线拍照的flash
  2. 测试内存超频软件,内存超频工具(SPDtool)
  3. 基于模型设计和机载软件
  4. 安装quagga与配置quagga ospf
  5. ArduinoNano卡在上传,无法烧录
  6. 新晋女院士:博毕两年后即任副教授和研究所所长!34岁成为当时中国最年轻女博导之一...
  7. 步进电机H桥驱动电路设计 【转】
  8. tcp灌包来包不够_LTE-UDP、TCP的上行下行灌包操作指导书.doc
  9. 响应式编程之三:RxJava应用:与Retrofit 结合的最佳实践
  10. js .style javaScript控制css属性