#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))

<<:  Know all about types of research papers in Australia

>>:  Day22 - 前处理: 资料平衡&Label 调整

Ruby基本介绍(六)方法、类别、模组 && Reverse String

偶尔还是要听点抒情点的... 韩剧推荐 : Live 第一集男女主角警校考试准备的那段蛮激励人心的,...

23. 如何开启一段职涯对话?

前言 这篇文章超级适合给manager们,特别是那些非常重视团队成员成长的领导人们。或许你曾经尝试...

Day30. Model 与关联 - preload, join, includes 一次厘清

今天我们会用部落格跟使用者的关系来讲解关联,首先先做设定,部落格跟使用者的关系为 使用者对应多个部落...

day30: 完赛了,做个总结吧

今天终於来到终点拉! 前几届参加一直半途而废的我,这次因为有大团队的组队, 不管是激励或压力,都促使...

找LeetCode上简单的题目来撑过30天啦(DAY25)今天国庆放假啦

好啦,今天国庆日,我不想逼迫自己咩,其实是我今天写不出来,写不出的题号是56. Merge Inte...