常见的几种距离

        在机器学习、数据挖掘等领域,常用的距离主要有欧氏距离、曼哈顿距离、切比雪夫距离、余弦距离四种,它们的计算逻辑和适用场景差异明显,核心是解决 “如何衡量两个数据点(或向量)的相似性 / 差异性” 的问题。

1. 欧氏距离(Euclidean Distance)

定义:在n维空间中,两点之间的直线距离。

公式:对于两点 A(x1​,x2​,...,xn​) 和 B(y1​,y2​,...,yn​),欧氏距离为:

        如:A(0,0),B(3,4),AB之间的欧式距离为(3^2+4^2)^(1/2)=5

适用场景:

        需衡量 “绝对空间距离” 的场景,如 K-Means 聚类、K-NN 分类。

2. 曼哈顿距离(Manhattan Distance)

        曼哈顿距离又称 “城市街区距离”,模拟在网格中沿坐标轴移动的总距离。

定义:两点在各维度上的坐标差的绝对值之和,是闵可夫斯基距离当 p=1 时的特殊情况。

公式:对于两点 A(x1​,x2​,...,xn​) 和 B(y1​,y2​,...,yn​),曼哈顿距离为:

        A(0,0),B(3,4),AB之间的曼哈顿距离为|3-0|+|4-0|=7

适用场景

        需忽略 “对角线捷径”、关注 “各维度累计差异” 的场景,如 L1 正则化(防止过拟合)。

        实际问题中的路径计算,如出租车在城市道路中的行驶距离、物流配送的路线长度。

3. 切比雪夫距离(Chebyshev Distance)

 定义:两点在所有维度上坐标差的最大值,是闵可夫斯基距离当 p→∞时的极限情况。

公式:对于两点 A(x1​,x2​,...,xn​) 和 B(y1​,y2​,...,yn​),切比雪夫距离为:

       如: A(3,4,5),B(6,8,10),AB之间的切比雪夫距离为:5

        |6-3|=3,|8-4|=4,|10-5|=5

适用场景:

        需关注 “最显著差异维度” 的场景,如多指标评价(如产品质量检测,只要某一项指标不达标即判定不合格)。

        棋盘游戏、机器人路径规划(如机器人需同时调整 x、y 方向位置,最大移动步长由差异最大的方向决定)。

4. 余弦距离(Cosine Distance)

        衡量 “向量方向的相似性”,而非 “空间位置的远近”,本质是基于余弦相似度推导。

定义:通过计算两个向量的夹角余弦值,再用 1 减去余弦相似度得到(余弦相似度越接近 1,余弦距离越接近 0,向量方向越一致)。

公式:对于两个向量 a(x1​,x2​,...,xn​) 和 b(y1​,y2​,...,yn​),余弦距离为:

        如:A=(8,2),B=(4,1)

        1.计算点积:A⋅B=(8×4)+(2×1)=32+2=34

        2.计算向量模长

                ∣A∣=82+22​=64+4​=68​≈8.246

                ∣B∣=42+12​=16+1​=17​≈4.123

        3.计算余弦相似度

        4.计算余弦距离:d=1−cosθ=1−1=0

适用场景

        需忽略 “向量长度(量级)”、仅关注 “方向” 的场景,如文本相似度计算(用 TF-IDF 向量表示文本,不关心文本长度,只关心主题是否一致)。

        图像特征匹配、推荐系统(如推荐 “兴趣方向相似” 的用户,不考虑用户活跃度的高低)。

图像距离变换有多种算法实现,常见的有以下几种: - **欧几里得距离变换**:计算每个像素到目标区域像素的欧几里得距离,即两点间的直线距离。该算法能精确反映像素间的实际距离,但计算复杂度相对较高,适用于对距离精度要求较高的场景。 ```python import cv2 import numpy as np # 读取二值图像 image = cv2.imread('binary_image.png', 0) # 进行欧几里得距离变换 dist_transform = cv2.distanceTransform(image, cv2.DIST_L2, 5) # 显示结果 cv2.imshow('Euclidean Distance Transform', dist_transform) cv2.waitKey(0) cv2.destroyAllWindows() ``` - **曼哈顿距离变换**:计算每个像素到目标区域像素在水平和垂直方向上的距离之和。其计算速度较快,但距离度量相对粗糙,常用于对计算效率要求较高的场景。 ```python import cv2 import numpy as np # 读取二值图像 image = cv2.imread('binary_image.png', 0) # 进行曼哈顿距离变换 dist_transform = cv2.distanceTransform(image, cv2.DIST_L1, 5) # 显示结果 cv2.imshow('Manhattan Distance Transform', dist_transform) cv2.waitKey(0) cv2.destroyAllWindows() ``` - **切比雪夫距离变换**:计算每个像素到目标区域像素在水平、垂直和对角线方向上的最大距离。这种距离度量在某些情况下能更好地反映像素间的连通性。 ```python import cv2 import numpy as np # 读取二值图像 image = cv2.imread('binary_image.png', 0) # 进行切比雪夫距离变换 dist_transform = cv2.distanceTransform(image, cv2.DIST_C, 5) # 显示结果 cv2.imshow('Chebyshev Distance Transform', dist_transform) cv2.waitKey(0) cv2.destroyAllWindows() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值