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

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

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

“相似性度量(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、需要技术指导、交流合作,点击"关于我-与我联系"添加微信交流。

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Typora最新安装教程2024

Typora是一款广受好评的跨平台Markdown编辑软件,支持Windows、MacOS和Linux操作系统。它的设计旨在提供一个无干扰、高效且直观的写作环境。户快速管理和查找文档,支持直接在软件内浏览和操作文件结构。 Typora以其简洁而强大的功能集合,成为…

html做一个画热图的软件

完整示例 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>热图生成器</title><script src"https://cdn.plot.ly/plotly-latest.min.js"></script><style>body …

基于SpringBoot+大数据城市景观画像可视化设计和实现

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

Kafka~基础原理与架构了解

Kafka是什么 Kafka我们了解一直认为是一个消息队列&#xff0c;但是其设计初&#xff0c;是一个&#xff1a;分布式流式处理平台。流平台具有三个关键功能&#xff1a; 消息队列&#xff1a;发布和订阅消息流&#xff0c;这个功能类似于消息队列&#xff0c;这也是 Kafka 也被…

数组的操作

数组的操作也可以大概分为增删查改。 Arrays.toString**&#xff1a;**把数组内的内容输出。 获取长度 获得数组的元素数量。 格式&#xff1a; 数组名.length注意&#xff0c;请不要写成 ** 数组名.length&#xff08;&#xff09;** 存数据 如果使用了动态初始化或者我们…

C++11 标准库头文件模拟实现

系列文章目录 文章目录 系列文章目录前言● 智能指针模板● Vector1. 简单版本2. X 总结 前言 暂不考虑支持多线程 常用STL的简单实现&#xff0c;主要内容百行左右完成&#xff0c;意在理解STL的原理 ● 智能指针模板 SharedPtr #include <assert.h> #include <ato…

c#使用自带库对字符串进行AES加密、解密

文章目录 1 代码1.1 定义Aes加密类块1.2 在主函数中调用 2 获取Key和IV2.1 基本方法2.2 自定义Key2.3 技术方面的原理 参考文章&#xff1a; C#软件加密实例&#xff1f; 。 参考官文&#xff1a; Aes 类。 在使用C#的自带的System.Security.Cryptography.Aes模块进行加密和解…

图的学习.

目录 一、图的基本概念 1.1图的种类 1.2顶点的度、入度和出度 1.3边的权和网 1.4路径、路径长度和回路 二、图的存储结构 2.1邻接矩阵法 2.2邻接表法 2.3十字链表 2.4邻接多重表 三、图的遍历 3.1广度优先搜索 3.2深度优先搜索 四、图的应用 4.1最小生成树 4.1.…

密码没有未来

无密码认证的好处 引领无密码未来之路万能钥匙 英国通过具体法律打击可预测密码 强密码是抵御网络威胁的第一道防线 如何破解价值百万美元的加密钱包密码 复制此链接到微信打开阅读全部以发布文章 新 GPU 在不到一小时内打开了网络上 59% 的密码。 现代计算机的能力不断增…

AGV机器人的调度开发分析(1)- 内核中的路线规划

准备开始写一个系列&#xff0c;介绍下AGV机器人的调度的开发和应用。 按照openTCS的核心内容&#xff0c;国内多家广泛应用于AGV的调度。那么架构图如下&#xff1a; Kernel中有一个是Routing&#xff0c;这是路由规划模块&#xff0c;需要实现的细节功能包括如下&#xff1a…

cesium 包络线

cesium 包络线 以下为源码直接复制可用 1、实现思路 通过turf.js中union方法来计算包络线官方地址:https://turfjs.fenxianglu.cn/ 闪烁线请查看cesium轨迹线(闪烁轨迹线) 2、示例代码 <!DOCTYPE html> <html lang="en"&g

Pwn刷题记录(不停更新)

1、CTFshow-pwn04&#xff08;基础canary&#xff09; ​ 好久没碰过pwn了&#xff0c;今天临时做一道吧&#xff0c;毕竟刚联合了WSL和VSCode&#xff0c;想着试着做一道题看看&#xff0c;结果随手一点&#xff0c;就是一个很少接触的&#xff0c;拿来刷刷&#xff1a; ​ …

计算机组成原理 —— 存储系统(DRAM和SRAM,ROM)

计算机组成原理 —— 存储系统&#xff08;DRAM和SRAM&#xff09; DRAM和SRAMDRAM的刷新DRAM地址复用ROM&#xff08;Read-Only Memory&#xff08;只读存储器&#xff09;&#xff09; 我们今天来看DRAM和SRAM&#xff1a; DRAM和SRAM DRAM&#xff08;动态随机存取存储器&…

springboot 酒庄内部管理系统(源码+sql+论文)

绪论 1.1 系统研究目的意义 随着信息技术的不断发展&#xff0c;我们现在已经步入了信息化的时代了&#xff0c;而信息时代的代表便是网络技术的日渐成熟&#xff0c;而现在网络已经和我们的生活紧密的联系起来了&#xff0c;我们不敢想象没有网络我们的生活会像怎么样&#…

六、资产安全—数据管理(CISSP)

目录 1.学习目标 2.数据管理最佳参考实践 3.数据质量维度:DAMA 4.数据生命周期控制 5.数据净化方式 6.生命周期安全控制 7.EOL、EOS、EOSL 1.学习目标 2.数据管理最佳参考实践 数据策略: 角色与责任: 数据所有权:

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

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

C语言中的进制转换

基础概念 进制又称数制&#xff0c;是指用一组固定的符号和统一的规则来表示数值的方法&#xff0c;在C语言中&#xff0c;可以使用不同的前缀来表示不同的进制&#xff1a; 二进制&#xff1a;以0b或0B为前缀&#xff08;部分编译器可能不支持&#xff09;八进制&#xff1a…

Go日常分享 - error类型是指针类型吗?

背景 这个问题的产生来源于小泉在开发rpc接口时返回error遇到的问题&#xff0c;开发时想在defer里对err进行最终的统一处理赋值&#xff0c;发现外层接收一直都未生效。问题可以简化为成下面的小demo。 func returnError() error {var err errordefer func() {//err errors…

物联网系统运维——数据库部署

一.MySQL 1.概要 MySQL是一种关联数据库管理系统&#xff0c;关联数据:而不是将所有数据放在一个大仓库内&#xff0c;这样就增加了速度并提高了灵活性库将数据保存在不同的表中。性能高、成本低、可靠性好&#xff0c;已经成为最流行的开源数据库。 二.MySQL安装与配置 1. …

38.MessageToMessageCodec线程安全可被共享Handler

handler被注解@Sharable修饰的。 这样的handler,创建一个实例就够了。例如: ByteToMessageCodec的子类不能被@Sharable修饰 如果自定义类是MessageToMessageCodec的子类就是线程共享的,可以被@Sharable修饰的 package com.xkj.protocol;import com.xkj.message.Message; i…