python如何實(shí)現(xiàn)Dice系數(shù)
python實(shí)現(xiàn)Dice系數(shù)
維基百科,自由的百科全書(shū)
跳到導(dǎo)航跳到搜索
Disambig gray.svg 關(guān)于與“Dice系數(shù)”名稱(chēng)相近或相同的條目,請(qǐng)見(jiàn)“Dice”。
Dice系數(shù), 根據(jù) Lee Raymond Dice[1] 命名,是一種集合相似度度量函數(shù),通常用于計(jì)算兩個(gè)樣本的相似度:
{\displaystyle s={\frac {2|X\cap Y|}{|X|+|Y|}}} {\displaystyle s={\frac {2|X\cap Y|}{|X|+|Y|}}}
它和Sørensen 相似度指數(shù)相同, 也稱(chēng)作Sørensen-Dice系數(shù)。
它在形式上和Jaccard指數(shù)沒(méi)多大區(qū)別,但是有些不同的性質(zhì)。
和Jaccard類(lèi)似,它的范圍為0到1。 與Jaccard不同的是,相應(yīng)的差異函數(shù)
{\displaystyle d=1-{\frac {2|X\cap Y|}{|X|+|Y|}}} {\displaystyle d=1-{\frac {2|X\cap Y|}{|X|+|Y|}}}
不是一個(gè)合適的距離度量措施,因?yàn)樗鼪](méi)有三角形不等性的性質(zhì)。
例如給定 {a}, , 和 {a,b}, 前兩個(gè)集合的距離為1, 而第三個(gè)集合和其他任意兩個(gè)集合的距離為三分之一。
與Jaccard類(lèi)似, 集合操作可以用兩個(gè)向量 A 和B的操作來(lái)表示:
{\displaystyle s_{v}={\frac {2|A\cdot B|}{|A|^{2}+|B|^{2}}}} {\displaystyle s_{v}={\frac {2|A\cdot B|}{|A|^{2}+|B|^{2}}}}
上式給出了兩個(gè)向量的距離輸出,也給出了更一般情況下向量之間的相似度度量措施。
Dice 系數(shù)可以計(jì)算兩個(gè)字符串的相似度:Dice(s1,s2)=2*comm(s1,s2)/(leng(s1)+leng(s2))。
其中,comm (s1,s2)是s1、s2 中相同字符的個(gè)數(shù)leng(s1),leng(s2)是字符串s1、s2 的長(zhǎng)度。
在信息檢索中, 給定關(guān)鍵詞集合X 和Y ,相似度定義為兩倍的共同信息(重疊部分)除以基數(shù)的總和 :[2]
當(dāng)作為字符串之間的相似度度量時(shí), 計(jì)算兩個(gè)字符串之間的系數(shù), x 和y,使用 bigrams 公式如下:[3]
{\displaystyle s={\frac {2n_{t}}{n_{x}+n_{y}}}} {\displaystyle s={\frac {2n_{t}}{n_{x}+n_{y}}}}
其中nt 是兩個(gè)字符串共有的bigrams的個(gè)數(shù), nx 是 x中bigrams的個(gè)數(shù) ,ny 是 y中bigrams的個(gè)數(shù)。
例如:要計(jì)算下面兩個(gè)字符串之間的相似度:
night
nacht
我們可以在各個(gè)單詞中得出如下bigrams集合:
{ni,ig,gh,ht}
{na,ac,ch,ht}
每個(gè)集合有4個(gè)元素, 這個(gè)兩個(gè)集合只有一個(gè)相同的元素: ht.
代入公式我們可以計(jì)算出, s = (2 · 1) / (4 + 4) = 0.25.
Dice距離用于度量?jī)蓚€(gè)集合的相似性,因?yàn)榭梢园炎址斫鉃橐环N集合,因此Dice距離也會(huì)用于度量字符串的相似性。
此外,Dice系數(shù)的一個(gè)非常著名的使用即實(shí)驗(yàn)性能評(píng)測(cè)的F1值。
Dice系數(shù)定義
如下:
其中分子是A與B的交集數(shù)量的兩倍,分母為X和Y的長(zhǎng)度之和,所以他的范圍也在0到1之間。
從公式看,Dice系數(shù)和Jaccard非常的類(lèi)似。
Jaccard是在分子和分母上都減去了|A∩B|。
與Jaccard不同的是,相應(yīng)的差異函數(shù)
不是一個(gè)合適的距離度量措施,因?yàn)樗鼪](méi)有三角形不等性的性質(zhì)。
例如:
給定 {a}, , 和 {a,b}, 前兩個(gè)集合的距離為1, 而第三個(gè)集合和其他任意兩個(gè)集合的距離為三分之一。
與Jaccard類(lèi)似,集合操作可以用兩個(gè)向量A和B的操作來(lái)表示:
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)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
在Mac中PyCharm配置python Anaconda環(huán)境過(guò)程圖解
這篇文章主要介紹了在Mac中PyCharm配置python Anaconda環(huán)境過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Django配置跨域并開(kāi)發(fā)測(cè)試接口
這篇文章主要介紹了Django配置跨域并開(kāi)發(fā)測(cè)試接口,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11python基礎(chǔ)教程之lambda表達(dá)式使用方法
lambda表達(dá)式相當(dāng)于函數(shù)體為單個(gè)return語(yǔ)句的普通函數(shù)的匿名函數(shù),本文主要介紹lambda表達(dá)式使用方法2014-02-02Python??MkDocs優(yōu)雅地編寫(xiě)文檔
在軟件開(kāi)發(fā)過(guò)程中,編寫(xiě)文檔是非常重要的一環(huán),文檔不僅可以幫助用戶理解和使用你的軟件,還可以提高團(tuán)隊(duì)協(xié)作效率,然傳統(tǒng)的文檔寫(xiě)作方式往往繁瑣而復(fù)雜,不易于維護(hù)更新,MkDocs工具以簡(jiǎn)潔、優(yōu)雅的方式編寫(xiě)文檔,并且能夠輕松生成漂亮的靜態(tài)網(wǎng)站2024-01-01