欧氏距离、余弦相似度、Jaccard相似度、皮尔逊的Python代码与实例

本文详细介绍了四种常用的Python计算相似度方法:欧氏距离、余弦相似度、皮尔逊相关系数和Jaccard相似度。通过实例展示它们在不同情境下的表现,以及各自关注的数据特征。了解这些概念有助于在实际项目中选择合适的相似度度量。

首先是一段计算4个相似度的Python代码。

需要注意的是,进行归一化操作后,4个函数取值范围都是0-1,而且都是数值越大表示相似性越高,数值为1代表完全相似。

import numpy as np

def CalSimEuD(dataA,dataB):
    '''【目的】计算欧氏距离(对应值的差平方之和再开方),注重数据之间的绝对位置而不是方向
       【输入】np.array
       【输出】已进行归一化,取值(0,1],数值越大表示相似性越高,数值为1代表完全相似'''
    #np.linalg.norm用于范数计算,默认二范数,相当于平方和开根号
    #原始取值为(0,正无穷),归一化到(0,1]区间:1/(1+原始值)
    return 1/(1+np.linalg.norm(dataA-dataB))

def CalSimCosine(dataA,dataB):
    '''【目的】计算余弦相似度,注重数据的方向而非绝对位置
       【输入】np.array
       【输出】已进行归一化,取值[0,1],数值越大表示相似性越高,数值为1代表完全相似'''
    sumData=np.dot(dataA,dataB)#公式中的分子,向量的内积
    #np.linalg.norm用于范数计算,默认二范数,相当于平方和开根号
    denom=np.linalg.norm(dataA)*np.linalg.norm(dataB)#公式中的分母
    #原始取值为[-1,1],归一化到[0,1]区间:0.5 + 0.5 * 原始值
    return 0.5+0.5*(sumData/denom)

def CalSimPearson(dataA,dataB):
    '''【目的】计算皮尔逊相关系数,是对余弦相似度的修正,分子和分母都需要减去输入数据集各自本身向量的均值,以达到中心化
       【输入】np.array,不可以输入常量数组如[1,1]
       【输出】已进行归一化,取值[0,1],数值越大表示相似性越高,数值为1代表完全相似'''
    # np直接计算出的皮尔逊相关系数取值范围[-1,1],归一化到[0,1]区间:0.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值