python如何实现Dice系数

 更新时间:2023年10月27日 10:08:51   作者:码奋  
这篇文章主要介绍了python如何实现Dice系数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

python实现Dice系数

维基百科,自由的百科全书

跳到导航跳到搜索

Disambig gray.svg  关于与“Dice系数”名称相近或相同的条目,请见“Dice”。

Dice系数, 根据 Lee Raymond Dice[1] 命名,是一种集合相似度度量函数,通常用于计算两个样本的相似度: 

{\displaystyle s={\frac {2|X\cap Y|}{|X|+|Y|}}} {\displaystyle s={\frac {2|X\cap Y|}{|X|+|Y|}}}

它和Sørensen 相似度指数相同, 也称作Sørensen-Dice系数。

它在形式上和Jaccard指数没多大区别,但是有些不同的性质。 

和Jaccard类似,它的范围为0到1。 与Jaccard不同的是,相应的差异函数 

{\displaystyle d=1-{\frac {2|X\cap Y|}{|X|+|Y|}}} {\displaystyle d=1-{\frac {2|X\cap Y|}{|X|+|Y|}}}

不是一个合适的距离度量措施,因为它没有三角形不等性的性质。

例如给定 {a}, {b}, 和 {a,b}, 前两个集合的距离为1, 而第三个集合和其他任意两个集合的距离为三分之一。 

与Jaccard类似, 集合操作可以用两个向量 A 和B的操作来表示:

 {\displaystyle s_{v}={\frac {2|A\cdot B|}{|A|^{2}+|B|^{2}}}} {\displaystyle s_{v}={\frac {2|A\cdot B|}{|A|^{2}+|B|^{2}}}}

上式给出了两个向量的距离输出,也给出了更一般情况下向量之间的相似度度量措施。

Dice 系数可以计算两个字符串的相似度:Dice(s1,s2)=2*comm(s1,s2)/(leng(s1)+leng(s2))。

其中,comm (s1,s2)是s1、s2 中相同字符的个数leng(s1),leng(s2)是字符串s1、s2 的长度。

在信息检索中, 给定关键词集合X 和Y ,相似度定义为两倍的共同信息(重叠部分)除以基数的总和 :[2]

当作为字符串之间的相似度度量时, 计算两个字符串之间的系数, x 和y,使用 bigrams 公式如下:[3]

 {\displaystyle s={\frac {2n_{t}}{n_{x}+n_{y}}}} {\displaystyle s={\frac {2n_{t}}{n_{x}+n_{y}}}}

其中nt 是两个字符串共有的bigrams的个数, nx 是 x中bigrams的个数 ,ny 是 y中bigrams的个数。

例如:要计算下面两个字符串之间的相似度:

  • night
  • nacht

我们可以在各个单词中得出如下bigrams集合:

  • {ni,ig,gh,ht}
  • {na,ac,ch,ht}

每个集合有4个元素, 这个两个集合只有一个相同的元素: ht. 

代入公式我们可以计算出, s = (2 · 1) / (4 + 4) = 0.25.

Dice距离用于度量两个集合的相似性,因为可以把字符串理解为一种集合,因此Dice距离也会用于度量字符串的相似性。

此外,Dice系数的一个非常著名的使用即实验性能评测的F1值。

Dice系数定义

如下:

其中分子是A与B的交集数量的两倍,分母为X和Y的长度之和,所以他的范围也在0到1之间。

从公式看,Dice系数和Jaccard非常的类似。

Jaccard是在分子和分母上都减去了|A∩B|。

与Jaccard不同的是,相应的差异函数

不是一个合适的距离度量措施,因为它没有三角形不等性的性质。

例如:

给定 {a}, {b}, 和 {a,b}, 前两个集合的距离为1, 而第三个集合和其他任意两个集合的距离为三分之一。

与Jaccard类似,集合操作可以用两个向量A和B的操作来表示:

  

 
def dice_coefficient(a, b):
    """dice coefficient 2nt/na + nb."""
    a_bigrams = set(a)
    b_bigrams = set(b)
    overlap = len(a_bigrams & b_bigrams)
    return overlap * 2.0/(len(a_bigrams) + len(b_bigrams))
 
if __name__ == '__main__':
    a=dice_coefficient('你好daadsffda','你你好ihiuhiihibiuhiuhiuhiuhiuhiuhuya妹aaa')
    print(a)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Django集成Celery实现高效的异步任务处理的全过程

    Django集成Celery实现高效的异步任务处理的全过程

    Django 作为一个强大的 Python Web 框架,可以通过集成 Celery 这一异步任务队列来优化这些任务的处理,本文将深入探讨如何在 Django 项目中集成 Celery,包括 Celery 的基本配置、定义任务、以及监控任务执行,需要的朋友可以参考下
    2023-11-11
  • Python Opencv提取图片中某种颜色组成的图形的方法

    Python Opencv提取图片中某种颜色组成的图形的方法

    这篇文章主要介绍了Python Opencv提取图片中某种颜色组成的图形的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 如何在Python中安装GDAL库

    如何在Python中安装GDAL库

    这篇文章主要介绍了如何在Python中安装GDAL库,GDAL是一个在X/MIT许可协议下的开源栅格空间数据转换库,需要的朋友可以参考下
    2023-04-04
  • python 存储变量的几种方法(推荐)

    python 存储变量的几种方法(推荐)

    这篇文章主要介绍了python 存储变量的几种方法,包括numpy 自带方法,pandas 自带方法,sklearn 的自带方法和pickle 库操作方法,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • 解决tensorflow 与keras 混用之坑

    解决tensorflow 与keras 混用之坑

    这篇文章主要介绍了解决tensorflow 与keras 混用之坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • pyqt5数据库使用详细教程(打包解决方案)

    pyqt5数据库使用详细教程(打包解决方案)

    这篇文章主要介绍了pyqt5数据库使用教程(打包解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • python实现下载整个ftp目录的方法

    python实现下载整个ftp目录的方法

    这篇文章主要介绍了python实现下载整个ftp目录的方法,文中给出了详细的示例代码,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友可以一起来学习学习。
    2017-01-01
  • python数据类型之间怎么转换技巧分享

    python数据类型之间怎么转换技巧分享

    在本篇文章里小编给大家分享的是关于python数据类型之间怎么转换实例以及小技巧内容,有兴趣的朋友们参考下。
    2019-08-08
  • python 使用 with open() as 读写文件的操作方法

    python 使用 with open() as 读写文件的操作方法

    这篇文章主要介绍了python 使用 with open()as 读写文件的操作代码,写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件,需要的朋友可以参考下
    2022-11-11
  • 只需要100行Python代码就可以实现的贪吃蛇小游戏

    只需要100行Python代码就可以实现的贪吃蛇小游戏

    贪吃蛇小游戏相信80、90后小时候肯定都玩过,那么你知道如果通过Python来实现吗?今天就来教大家,文中有非常详细的代码示例,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05

最新评论