基于向量的jaccard与基于集合的jaccard计算辨析

 jaccard的计算方法辨析
  jaccard系数是在数据挖掘中常用的一个指标,但是对于基于向量的jaccard系数计算方法与基于集合的jaccard计算方法是不一样的。笔者也是在读一篇论文的代码时发现的这个差别,下面我将具体的探讨一下这两种计算方法的不同。以便在以后的矩阵或者向量计算中入坑导致实验的错误。
  因为我对基于向量的计算方法特别感兴趣,所以就首先介绍基于向量的jaccard系数计算方法。

1、  基于向量的jaccard系数计算方法
   向量的计算方法与集合的计算方法还是有差别的,如果两者用同样的方法计算做出来的结果就会有问题。下面我举例子说明: 假如 A=(1,0,0)B=(0,1,0)则A∩B=(0,0,0),A∪B=(1,1,0)。从结果我们可以看出对于向量的集合运算,两个向量取交集即为向量对应索引位置上的元素做与运算,两个向量取并集即为对应向量索引做或运算。那么在jaccard系数计算公式中在这里插入图片描述
|A∩B|的绝对值符号就表示经计算后向量中不为0元素的个数,所以最终J(A,B)= 0 / 2 = 0。
  接下来用代码展示一下:

from numpy import *
import scipy.spatial.distance as dist  # 导入scipy距离公式
matV = mat([[1, 1, 0, 1, 0, 1, 0, 0, 1],
            [0, 1, 1, 0, 0, 0, 1, 1, 1]])
print("dist.jaccard:", 1 - dist.pdist(matV, 'jaccard'))
dist.jaccard: [0.25]
# 下面使用集合运算方法做的错误示例,需要注意
a = [1, 1, 0, 1, 0, 1, 0, 0, 1]
b = [0, 1, 1, 0, 0, 0, 1, 1, 1]
c = len(set(a) & set(b))/len(set(a) | set(b))
print(c)

  本节内容主要参考了这位博主的资料,有兴趣的可以看一下这个博主的详细解释另一位博主的解释

2、  基于集合的jaccard系数计算方法
  下面是百度百科对jaccard的定义
在这里插入图片描述
  计算方式挺简单的就是集合的交和并操作,我在上面的实力代码中做的错误的示范就是基于集合的计算方法,因此在这里就不再赘述了。

3、  jaccard距离衡量数据相似性的思考
  jaccard距离的计算方法只适用于0-1矩阵,它在计算的过程中过滤了0-0匹配。除此之外,它与汉明距离的区别在与汉明距离关注0-0匹配。因为笔者是从事药物筛选研究,举个例子:如果两种药物都不能产生同一种副作用,你也不能认为这两种药物具有相关性或者它们存在相似的信息。所以在有些数据衡量的时候必须用jaccard距离并不是随便去尝试。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值