Dice与Jaccard相似性系数

1.Dice系数
Dice距离主要是用来计算两个集合的相似性的(也可以度量字符串的相似性).
定义x和y两个集合的Dice相似系数为:其中|x|表示集合x的基数(即集合中元素个数),|y|表示集合y的基数。公式为:
在这里插入图片描述
可以写成下面这种形式:
在这里插入图片描述
Dice 系数也可以计算两个字符串的相似度:Dice(s1,s2)=2*comm(s1,s2)/(leng(s1)+leng(s2))。
其中,comm (s1,s2)是s1、s2 中相同字符的个数;leng(s1),leng(s2)是字符串s1、s2 的长度。

2.Jaccard系数
Jaccard系数(Jaccard similarity coefficient)只关心个体间共同具有的特征是否一致这个问题,用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。
Jaccard相似系数定义为:
在这里插入图片描述
可以写成下面这种形式:
Dice与Jaccard相似性系数_第1张图片
例:
(1)如果比较X与Y的Jaccard相似系数,只比较xn和yn中相同的个数,公式如下:
如集合A={1,2,3,4};B={3,4,5,6};
那么他们的J(X,Y)=1{3,4}/1{1,2,3,4,5,6}=1/3;
(2)假设arr1 = [11, 2, 3, 8, 10, 0, 2, 0, 0, 2, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1] ,长度为21
假设arr2 = [13, 5, 4, 7, 16, 1, 3, 1, 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1],长度为21
则arr1,arr2的公共部分arr_common = [3,0,0,0,1,0,0,0, 0, 0, 0, 0, 0, 1], 长度为14
arr1,arr2的相似度为:14 / (21+21-14) = 0.5

计算jaccard的Python代码如下:

def get_Jaccard(arr1,arr2):
    common = 0
    # 计算公共相似值的个数
    for item in arr1:
        if item in arr2:
            common += 1
    if common==0:
        return 0
    print(common)
    return float(common/(len(arr1) + len(arr2) - common))

a1 = [11, 2, 3, 8, 10, 0, 2, 0, 0, 2, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1]
a2 = [13, 5, 4, 7, 16, 1, 3, 1, 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1]
res = get_Jaccard(a1,a2)
print(res)

你可能感兴趣的:(初学图像处理,python,经验分享,其他)