【Educoder数据挖掘实训】用广义Jaccard系数计算相似度

本文介绍了广义Jaccard系数的概念,它扩展了传统的二值Jaccard系数到整数集或实数集,用于衡量两个对象集合的相似程度。作者给出了一个Python函数`sim_tonimoto`的实现,并通过示例展示了如何计算两个数据集的相似度。
摘要由CSDN通过智能技术生成

【Educoder数据挖掘实训】用广义Jaccard系数计算相似度

开挖!!!!

相似度就是比较两个事物的相似性。一般通过计算事物的特征之间的距离,如果距离小,那么相似度大;如果距离大,那么相似度小。比如两种水果,将从颜色,大小,维生素含量等特征进行比较相似性。
这里的相似度有点类似于我们之前提到过用值域法筛选异常值时候的参数,当然还是有很大区别的。

首先介绍 J a c c a r d Jaccard Jaccard系数。
对于两个特征向量 A , B A,B A,B,定义 F x y F_{xy} Fxy为同位置下 A A A x x x B B B y y y的数量。
定义 A B AB AB的相似度 s = F 00 + F 11 F 00 + F 01 + F 10 + F 11 s = \frac{F_{00}+F_{11}}{F_{00}+F_{01}+F_{10}+F_{11}} s=F00+F01+F10+F11F00+F11
对于集合来讲,两个集合 x , y x,y x,y的相似度 s = ∣ x ∩ y ∣ ∣ x ∪ y ∣ s = \frac{|x\cap y|}{|x \cup y|} s=xyxy

对于广义 J a c c a r d Jaccard Jaccard系数,其不同点在于可能不止二值,可能是整数集或者实数集。
那么我们定义为 E j ( x , y ) = x y ∣ ∣ x ∣ ∣ 2 + ∣ ∣ y ∣ ∣ 2 − x y E_j(x,y) = \frac{xy}{||x||^2+||y||^2-xy} Ej(x,y)=∣∣x2+∣∣y2xyxy

代码实现就比较容易了

###-----------编写代码实现广义Jaccard系数的计算----------
def sim_tonimoto(user1, user2):
    common = 0

    #1.判断有没有相同的数据, 没有相同数据则返回0
    ################# Begin #################
    for i in user1 :
        if i in user2 :
            common += 1
    ################# End #################
    if common == 0:
        return 0

    common_num = common
    user1_num = len(user1)
    user2_num = len(user2)


    #2.广义Jaccard系数计算
    ################# Begin #################

    res = common_num / (user1_num + user2_num - common_num)

    ################# End #################

    return res

a = [10,20,30] #输入数据1
b = [10,0,30] #输入数据2

#3.调用自己实现的sim_tonimoto函数
################# Begin #################
result = sim_tonimoto(a, b)

################# End #################
print(result) #输出相似度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值