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相似系数定义为:
可以写成下面这种形式:
例:
(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)