tags: 2021IT
傑卡德相似係數:兩個集合$A$和$B$的交集元素在$A$、$B$的聯集中所佔的比例,稱為兩個集合的傑卡德相似係數,用符號$J(A,B)$表示
$J(A,B)=\dfrac{|A\cap B|}{|A\cup B|}$
傑卡德距離(Jaccard Distance):與傑卡德相似係數相反的的概念,用兩個集合中不同的元素的佔比來衡量兩個集合的區分度
$J_\delta(A,B)=1-J(A,B)=\dfrac{|A\cup B|-|A\cap B|}{|A\cup B|}$
傑卡德相似係數與傑卡德距離的應用:
可將傑卡德相似係數用在衡量樣本的相似度上
樣本$A$與樣本$B$是兩個n維向量,假設所有維度的設定值都是0或者1。舉例來說我們有兩個4維向量$A(0111)$和$B(1001)$,我們將這兩向量看成集合,1表示集合包含該元素,0則表示不包含。
那麼樣本A和B的傑卡德相似係數可以表示為:
$J=\dfrac{p}{p+q+r}$
用python實現
import numpy as np
def get_dist(a, b):
up = np.double(np.bitwise_and((a != b), np.bitwise_or(a != 0, b != 0)).sum())
print(up)
down = np.double(np.bitwise_or(a != 0, b != 0).sum())
dist = (up / down)
return dist
def get_coe(a, b):
p = np.double(np.bitwise_and(a, b).sum())
q = np.double(np.bitwise_and(a==1, b==0).sum())
r = np.double(np.bitwise_and(a==0, b==1).sum())
coe = p / (p + q + r)
return coe
if __name__ == '__main__':
x = np.random.random(10) > 0.5
y = np.random.random(10) > 0.5
print('傑卡德相似係數:', get_coe(x, y))
print('傑卡德距離:', get_dist(x, y))