iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
自我挑戰組

終極大數據地獄系列 第 19

#19數據上的各種距離(4)

tags: tags: 2021IT

傑卡德相似係數(Jaccard Similarity Coefficient)

  • 傑卡德相似係數:兩個集合$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則表示不包含。

    • 用以下符號代表情況:
      p:樣本A與B都是1的維度的個數
      q:樣本A是1、樣本B是0的維度的個數
      r:樣本A是0、樣本B是1的維度的個數
      s:樣本A與B都是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))

上一篇
# 18 數據上的各種距離(3)
下一篇
#20 數據中的機率性(1)
系列文
終極大數據地獄24

尚未有邦友留言

立即登入留言