0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于距离计算的总结

电子工程师 来源:fqj 2019-05-14 09:52 次阅读

距离计算在自然语言处理中得到广泛使用,不同距离计算方式应用与不同的环境,其中也产生了很多不同的效果。

1 余弦距离

余弦夹角也可以叫余弦相似度。集合中夹角可以用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异。

余弦取值范围为[-1,1]。求得两个向量的夹角,并得出夹角对应的余弦值,词余弦值就可以用来表示这两个向量的相似性。夹角越小,趋近于0度,余弦值越接近于1,它们的方向就更加吻合,即更加相似。当两个向量的方向完全相反时,夹角的余弦取最小值-1。当余弦值为0时,两向量正交,夹角为90度。因此可以看出,余弦相似度于向量的幅值无关,于向量的方向相关。

公式描述:

关于距离计算的总结

Python代码实现:

import numpy as np# np.dot(vec1,vec2) 量向量(数组):两个数组的点积,即元素对应相乘后求和# np.linalg.norm(vec1):即求vec1向量的二范数(向量的模)vec1 = [1,2,3,4]vec2 = [5,6,7,8]dist1 = np.dot(vec1, vec2)/(np.linalg.norm(vec1)*np.linalg.norm(vec2))print("余弦距离测试结果为:\t"+str(dist1))

2 欧氏距离

欧几里得距离即欧几里得空间中两点间的直线距离。

关于距离计算的总结

Python实现:

import numpy as npvec1 = np.mat([1,2,3,4]) # 生成numpy矩阵vec2 = np.mat([5,6,7,8])# 根据公式求解1dist1 = np.sqrt(np.sum(np.square(vec1 - vec2)))print("欧式距离测试结果是:\t"+ str(dist1))dist2 = np.sqrt((vec1-vec2)*(vec1-vec2).T)# 根据公式求解2print("欧式距离测试结果是:\t"+ str(dist2))

3 曼哈顿距离

曼哈顿距离也成为城市街区距离。用来表示两个点在标准坐标系上的绝对轴距之和,即从一个路口到另外一个路口,驾驶距离不是两点之间的直线距离。

关于距离计算的总结

Python实现

import numpy as npvec1 = np.mat([1,2,3,4])vec2 = np.mat([6,7,8,9])dist = np.sum(np.abs(vec1 - vec2))print("曼哈顿距离测试结果是:\t"+str(dist))

4 明可夫斯基距离

明氏距离又叫明可夫斯基距离,是欧氏空间中的一种测度,被看作欧氏距离和曼哈顿距离的一种推广。

关于距离计算的总结

当p=1时,就是曼哈顿距离

当p=2时,就是欧氏距离

当p=3时,就是切比雪夫距离

python实现

可参照之前代码

5 切比雪夫距离

关于距离计算的总结

python实现

import numpy as npvec1 = np.mat([1,2,3,4])vec2 = np.mat([5,6,7,8])dist = np.max(np.abs(vec1 - vec2))print("切比雪夫距离测试结果是:\t" + str(dist))

6 杰卡德距离

杰卡德(Jaccard)相似系数:两个集合A和B的交集在元素在A、B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示。杰卡德距离:在占比中所取的是两个集合中不同元素。

关于距离计算的总结

Python实现:

import numpy as npv1 = np.random.random(10) > 0.5
# 生成10个true false数据(即0,1)v2 = np.random.random(10) > 0.5vec1 = np.asanyarray(v1, np.int32)
# 转换位0、1矩阵vec2 = np.asanyarray(v2, np.int32)# 距离计算up = np.double(np.bitwise_and((vec1 != vec2),np.bitwise_or(vec1 !=0,vec2!=0)).sum())
# 涉及到数学逻辑运算down = np.double(np.bitwise_or(vec1 !=0 ,vec2!=0).sum())
# 取并集, (vec1 !=0 ,vec2!=0)先转对应元素为true ,false的矩阵dist = (up/down)print("杰卡德距离测试结果是:\t"+str(dist))

7 汉明距离

信息论中,两个登场字符串之间的汉明距离对应位置上的不同字符的个数。也就是说,将一个字符串变换成另一个字符串所需要替换的字符个数。

例如:“toned”与“roses”之间的汉明距离就是3

python实现:

import numpy as npv1=np.random.random(10)>0.5v2=np.random.random(10)>0.5vec1=np.asarray(v1,np.int32)vec2=np.asarray(v2,np.int32)dist=np.mean(vec1!=vec2)
# 取均值print("汉明距离测试结果是:\t"+str(dist))

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    55

    文章

    4778

    浏览量

    84439

原文标题:距离计算总结

文章出处:【微信号:NLP_lover,微信公众号:自然语言处理爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    关于C++模板总结

    大家好,今天给大家分享一篇关于 C++ 模板总结概述。
    发表于 09-19 11:55 493次阅读

    关于TCP/IP协议的知识总结

    今天浩道跟大家分享关于TCP/IP协议的硬核干货总结,我常常跟小伙伴说,一个简短硬核的知识总结,可以让大家快速掌握这些知识体系,喜欢的小伙伴可以收藏起来,随时查看复习!
    的头像 发表于 10-31 11:48 1201次阅读
    <b class='flag-5'>关于</b>TCP/IP协议的知识<b class='flag-5'>总结</b>

    zz:关于PSoC的不错的总结

    关于PSoC的不错的总结
    发表于 11-19 11:30

    关于怎样提高无线通信距离

    关于怎样提高无线通信距离,请各位大神都发表一下看法最近新研发一款产品,通信距离1Km,还不能满足设计要求,所以关于怎样大幅度提高无线通信距离
    发表于 03-01 08:59

    关于电机选型的总结

    序:原先最初是没打算写电机选型总结的,而是准备写一些关于数字信号处理相关的东西,但是我的一个朋友提醒了我。他说,现在网上关于数字信号处理的东西写的太多了,特别是基础的知识都写烂了,你再写也没人看
    发表于 08-31 07:00

    关于计算机组成原理的知识点总结的太棒了

    关于计算机组成原理的知识点总结的太棒了
    发表于 10-27 07:27

    关于通信原理介绍总结

    关于通信原理介绍总结 学了通信原理这门课,一开始觉得很难,而且听学长们也总是告诫我们,通信原理是很难的课程,平时一定要好好学,不然自己复习的日
    发表于 02-24 10:47 41次下载

    计算转型技巧归纳总结

    计算专家和早期使用者为企业向云计算转型总结归纳了五大技巧。
    发表于 04-02 10:23 670次阅读

    无线传输距离计算

    无线传输距离计算详解
    发表于 11-11 17:57 186次下载

    DXP关于板层说明及总结

    DXP关于板层说明及总结DXP-设置板层(D+K )在PCB编辑 Design->layer Stack Manager(层管理)
    发表于 01-11 14:56 0次下载

    关于Linux下多线程编程技术学习总结

    Linux下多线程编程技术 作为一个IT人员,不断的学习和总结是我们这个职业习惯,所以我会将每个阶段的学习都会通过一点的总结来记录和检测自己的学习效果,今天为大家总结关于Linux下
    发表于 04-22 03:12 2184次阅读
    <b class='flag-5'>关于</b>Linux下多线程编程技术学习<b class='flag-5'>总结</b>

    LED投光灯的投射距离应该如何计算

    常用于景观照明的LED投光灯一般会根据投射距离的不同,选择适宜的瓦数。并且型号不同的投光灯投射距离也有所不同。那么LED投光灯投射距离应该怎么计算呢?  一般来说,照射
    的头像 发表于 12-24 09:50 6118次阅读

    基于曼哈顿距离的隐私安全计算协议综述

    安全多方计算是信息时代保护隐私和信息安全的一项关键技术。安全多方科学计算是安全多方计算十分重要的组成部分,目前已经有许多安全多方科学计算问题的解决方案,但还有更多的问题值得人们去研究。
    发表于 04-30 11:21 3次下载
    基于曼哈顿<b class='flag-5'>距离</b>的隐私安全<b class='flag-5'>计算</b>协议综述

    关于MATLAB求导实践的总结

    MATLAB是一个功能强大的数值计算软件,提供了多种方法来进行求导操作。在实践中使用MATLAB进行求导可以帮助我们解决各种科学、工程和数学问题。下面是一份关于MATLAB求导实践的总结与介绍。
    的头像 发表于 07-17 12:33 1719次阅读

    爬电距离和电气间隙计算

    爬电距离和电气间隙计算
    发表于 10-21 10:51 4次下载