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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章