【数据挖掘】机器学习中相似性度量方法-闵可夫斯基距离

news2025/2/28 20:16:54

写在前面:
首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。

路虽远,行则将至;事虽难,做则必成。只要有愚公移山的志气、滴水穿石的毅力,脚踏实地,埋头苦干,积跬步以至千里,就一定能够把宏伟目标变为美好现实。

“相似性度量(similarity measurement)”系列文章:、
【数据挖掘】机器学习中相似性度量方法-欧式距离
【数据挖掘】机器学习中相似性度量方法-余弦相似度
【数据挖掘】机器学习中相似性度量方法-曼哈顿距离
【数据挖掘】机器学习中相似性度量方法-切比雪夫距离

Hello,大家好。

继续更新"相似性度量(similarity measurement)"系列文章,今天介绍的是闵可夫斯基距离。多的不说,少的不唠,下面开始今天的教程。

以下内容,完全是我根据参考资料和个人理解撰写出来的,不存在滥用原创的问题。

闵可夫斯基距离

闵可夫斯基距离(Minkowski Distance),也称为闵氏距离,是一种在多维空间中衡量两点间距离的方法,它是对多个其他常见距离度量方法(如曼哈顿距离、欧式距离和切比雪夫距离)的一种概括和推广。闵可夫斯基距离可以将曼哈顿距离、欧式距离和切比雪夫距离总结为一个公式。

计算公式

两个向量或者两个点A( x 1 , x 2 , x 3 , . . . , x n x_ 1,x_ 2, x_ 3, ..., x_ n x1,x2,x3,...,xn)和B( y 1 , y 2 , y 3 , . . . , y n y_ 1,y_ 2, y_ 3,..., y_ n y1,y2,y3,...,yn)之间的闵可夫斯基距离定义公式为:

d ( A , B ) = ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 p d(A, B) = \left( \sum_{i=1}^{n} |x_i - y_i|^p \right)^{\frac{1}{p}} d(A,B)=(i=1nxiyip)p1

其中,p是一个正实数参数。

  • 当p=1时,闵可夫斯基距离退化为曼哈顿距离(绝对距离、城市街区距离),即:
    d ( A , B ) = ∑ i = 1 n ∣ x i − y i ∣ d(A, B) = \sum_{i=1}^{n} |x_i - y_i| d(A,B)=i=1nxiyi

  • 当p=2时,闵可夫斯基距离退化为欧几里得距离(欧氏距离),即:
    d ( A , B ) = ∑ i = 1 n ( x i − y i ) 2 d(A, B) = \sqrt{\sum_{i=1}^{n} (x_i - y_i)^2} d(A,B)=i=1n(xiyi)2

  • 当p → ∞ \to\infty 时,闵可夫斯基距离变为切比雪夫距离(棋盘距离),即两点在各维度上距离的最大值:
    d ( A , B ) = lim ⁡ p → ∞ ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 p = max ⁡ ( ∣ x i − y i ∣ ) d(A, B) = \lim_{{p \to \infty}} \left( \sum_{i=1}^{n} |x_i - y_i|^p \right)^{\frac{1}{p}} = \max(|x_i - y_i|) d(A,B)=plim(i=1nxiyip)p1=max(xiyi)

闵可夫斯基距离由于包含了多种距离度量,因此具有较广的适用范围。根据具体的应用场景和数据特性,可以选择合适的p值来定义距离。

代码实现

编写代码实现闵可夫斯基距离,下面是Python代码:

# -*- coding: utf-8 -*-
"""
Created on Sun Jun 23 16:45:37 2024

@author: AIexplore微信公众号
"""


import numpy as np  
  
def minkowski_distance(x, y, p=2):  
    """  
    计算两个点之间的闵可夫斯基距离  
      
    参数:  
    x, y: 数组或列表,代表两个点的坐标  
    p: 正实数,闵可夫斯基距离的指数  
      
    返回:  
    d: 闵可夫斯基距离  
    """  
    # 确保x和y是NumPy数组  
    x = np.array(x)  
    y = np.array(y)  
      
    # 检查x和y的维度是否相同  
    if x.shape != y.shape:  
        raise ValueError("输入的点必须具有相同的维度")  
      
    # 计算闵可夫斯基距离  
    diff = np.abs(x - y)  
    distance = np.sum(diff ** p) ** (1 / p)  
      
    return distance  
  
# data  
A = [1, 2, 3]  
B = [2, 3, 5]  
  
# 计算欧几里得距离 (p=2)  
euclidean_distance = minkowski_distance(A, B, p=2)  
print(f"欧几里得距离: {euclidean_distance}")  
  
# 计算曼哈顿距离 (p=1)  
manhattan_distance = minkowski_distance(A, B, p=1)  
print(f"曼哈顿距离: {manhattan_distance}")  
  
# 计算切比雪夫距离 (使用大的p值,例如1000,来近似)  
chebyshev_distance = minkowski_distance(A, B, p=10000)  # 注意:这不是严格的切比雪夫距离,近似  
print(f"切比雪夫距离近似: {chebyshev_distance}")

# 计算闵可夫斯基距离 (p=3)  
manhattan_distance = minkowski_distance(A, B, p=3)  
print(f"闵可夫斯基距离: {manhattan_distance}") 

输出结果:

欧几里得距离: 2.449489742783178
曼哈顿距离: 4.0
切比雪夫距离近似: 1.0000693171203765
闵可夫斯基距离: 2.154434690031884

参考文章

[1]https://blog.csdn.net/weixin_35757704/article/details/115437768
[2]https://mp.weixin.qq.com/s/g1-U59Xo7ScjscyrL61Ujw
[3]https://cloud.tencent.com/developer/article/2281505
[4]https://blog.csdn.net/qq_21484461/article/details/125357968

写在最后

作者介绍:CSDN人工智能领域优质创作者,CSDN博客专家,阿里云专家博主,阿里云技术博主,有机器学习、深度学习、OCR识别项目4年以上工作经验,专注于人工智能技术领域。会根据实际项目不定期输出一些非商业的技术,内容不限,欢迎各位朋友关注。
1、关注下方公众号,让我们共同进步。
2、需要技术指导、交流合作,点击"关于我-与我联系"添加微信交流。

都看到这里了,动动发财的小手点个赞再走吧。

微信扫码关注微信公众号,发现不一样的世界。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1853638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java周测总结(2)

1.什么是I0流. 是一串流动的字符从先进先出的方式发送信息的通道。 2.IO流共有多少种划分方式,分别都包含哪些流 三种 按流分 输出输入流 按处理单元分 字节和节符 按流的角色方 节点流和处理流 3.如何把字荐串交量str转换为字节数组,并且存入bytes数组当中 byt…

达梦8 通过SF_INJECT_HINT解决新排序机制下失控语句影响其他SQL执行的问题

达梦数据库有两种排序机制。当SORT_FLAG设置0时,采用旧排序机制;当SORT_FLAG1时,采用新排序机制。详见《达梦新老排序机制的对比》 两种排序机制各有优缺点。 新排序机制引入了全局排序区概念,虽然避免了内存溢出导致系统OOM&am…

【0-1系列】从0-1快速了解搜索引擎Scope以及如何快速安装使用(下)

前言 近日,社区版家族正式发布V2024.5版本,其中,社区开发版系列重磅发布Scope开发版以及StellarDB开发版。 为了可以让大家更进一步了解产品,本系列文章从背景概念开始介绍,深入浅出的为读者介绍Scope的优势以及能力…

OOM日志分析

目录 1. 日志分析2. MAT 工具2.1 日志打印方式2.1.1 HeapDumpOnOutOfMemoryError(推荐)2.1.2 jmp 命令 2.2 MAT分析方式2.2.1 饼图分析2.2.2 树形图分析2.2.2 泄漏疑点 3. 优化 首先说一下结论:通过MAT工具分析才是最精准的,直接通…

[数据概念]梅宏院士-数据要素化怎么办十问

“ 提出问题,才能解决问题。” 5月27日,2023中国国际大数据产业博览会“数据要素流通与价值化”论坛举行,中国科学院院士、中国计算机学会理事长梅宏发出数据要素化十问。 本文主要内容转自 数字化转型战略指南 01 第一问:能否以…

基于SpringBoot+Vue大学毕业设计管理系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还…

【深度学习实战(40)】可变形卷积

一、可变形卷积(DCN/DConv) (a)是普通的卷积操作 (b)、©、(d)是可变形卷积(deformable convolution,即DConv) 可变形卷积实际是指标准卷积操作中采样位置增加了一个偏移量offset,这样卷积核就能在训…

Git 冲突处理指南:恢复 Git Reset

⭐️我叫忆_恒心,一名喜欢书写博客的研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支…

市场情绪周期2024-6-12(无用之用篇)

佛学老指引人们去向内求,“灵山就在汝心头,人人有个灵山塔,好在灵山塔下修”,你跟佛有没有缘,在于你是某个阶段不用别人引导自己发现那些东西已经在等你很久了,为何向内求?因为内心才是人之主体…

react使用OpenLayers实现类似船某网在地图放大时展示具体船舶符号缩小时显示聚合小点效果

一、效果 如图所示,地图缩小(即比例尺放大)时,显示聚合小绿点; 地图放大(比例尺缩小)时,展示具体船舶符号: 二、思路 1)设置2个图层,一个展示…

【区块链】区块链架构设计:从原理到实践

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 区块链架构设计:从原理到实践引言一、区块链基础概念1.1 区块链定义…

解决:net8使用swagger的时候,调用接口401,Error: Unauthorized,无法通过验证,其实是因为没有Authorization头

目录 1. 背景2. 解决方案 1. 背景 上一篇文章讲了用net8JWTSwagger,尝试做一个demo,然后掉坑里,jwt能生成token,但是解析不正确,地址,这个demo还遇到一个奇怪的问题,一个demo遇到2个奇怪的问题…

Leetcode84 柱状图中最大的矩形

题目描述 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积 解题思路 思路一:暴力寻找,从每个位置出发,向左右两边扩…

上证所抓包实战

第 2 页jsonCallBack 回调函数Request Headers爬取股票列表下载时间戳Initiator在 Network 中抓到的包,有 Headers、Payload、Preview、Response、Initiator、Timing、Cookies 面板,从这些面板中获取有用的信息来写脚本。 上海证券交易所 https://www.sse.com.cn/assortment…

数据分析必备:一步步教你如何用matplotlib做数据可视化(10)

1、Matplotlib 二维箭头图 箭头图将速度矢量显示为箭头,其中分量(u,v)位于点(x,y)。 quiver(x,y,u,v)上述命令将矢量绘制为在x和y中每个对应元素对中指定的坐标处的箭头。 参数 下表列出了quiver()函数的参数 - x - 1D或2D阵列,…

示例:推荐一个基于第三方QRCoder.Xaml封装的二维码显示控件

一、目的:基于第三方QRCoder.Xaml封装的二维码控件,为了方便WPF调用 二、效果如下 功能包括:背景色,前景色,中心图片设置和修改大小,二维码设置等 三、环境 VS2022 四、使用方式 1、安装nuget包&#xf…

国产自研编程语言“仓颉”来了!

在 6.21 召开的华为开发者大会(HDC2024)上,华为自研的国产编程语言“仓颉”终于对外正式发布了! 随着万物互联以及智能时代的到来,软件的形态将发生巨大的变化。一方面,移动应用和移动互联网领域仍然强力驱动人机交互…

抖音多功能全自动引流工具,支持评论关注私信留痕点赞等,让你的抖音粉丝暴涨!

随着短视频行业的火爆,越来越多的人开始关注抖音这个平台。然而,如何在抖音上获得更多的关注和粉丝,成为了许多人面临的难题。为了帮助大家解决这个问题,今天我们将为大家推荐一款抖音多功能全自动引流脚本,这款脚本可…

【Python】已解决:ModuleNotFoundError: No module named ‘paddle’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:ModuleNotFoundError: No module named ‘paddle’ 一、分析问题背景 在Python编程中,ModuleNotFoundError是一个常见的错误,它通常发生…

Linux - 利用/proc/sys/vm/drop_caches实现手工清理系统缓存

文章目录 现象buff/cache 的作用和含义分析 buff/cache 占用大量内存的原因是否需要清理缓存及其方法 命令清理缓存方法1. sync 命令2. echo 3>/proc/sys/vm/drop_caches 命令 注意事项小结 现象 使用free 命令,看到 buff/cache 占用很多 。 free 命令用于显示系…