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

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

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

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

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

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

  • 20
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器不学习我学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值