七种距离度量全解析:从氏到汉明,算法选得好,模型搓澡不费脑!

大家好!今天我们来聊聊机器学习中的"距离"——不是你和女神的距离,而是数据点之间的数学距离!这些距离度量就像不同性格的朋友,有的直来直去,有的拐弯抹角,有的甚至自带"滤镜"。准备好你的计算器,让我们一起开启这场"距离社交"之旅吧!😎

📐 1. 欧氏距离 (Euclidean Distance) - 直男式距离

定义:两点之间的直线距离,就像你问路时得到的"直走500米右转"的回答。

公式

(简单来说,就是先平方,再求和,最后开根号)

举个栗子​​🌰:
二维点 A(1,2) 和 B(4,6) 的距离:

特点

  • 优点:直观易懂,计算简单
  • 缺点:对特征尺度敏感(身高和体重不能直接比)
  • 适合场景:低维空间,特征尺度相近时,KNN聚类、图像相似度计算

比喻:就像直男约会,直奔主题不绕弯子😏

🚦 2. 曼哈顿距离 (Manhattan Distance) - 出租车司机式距离

定义:两点在标准坐标系上的绝对轴距总和。就像在曼哈顿街区要从一个十字路口开车到另一个十字路口,驾驶距离显然不是两点间的直线距离。这个实际驾驶距离就是“曼哈顿距离”。曼哈顿距离也称为“城市街区距离”(City Block  distance)。

公式

(简单来说,就是各维度差值的绝对值之和)

举个栗子​​🌰:
从纽约路口(1,2)(4,6)

特点

  • 优点:计算简单,对异常值不敏感
  • 缺点:忽略了"对角线捷径"
  • 适合场景:高维数据,特征尺度差异大时

比喻:就像出租车司机,只走横平竖直的路🚖

🏰 3. 切比雪夫距离 (Chebyshev Distance) - 国际象棋王式距离

定义:国际象棋中,国王可以直行、横行、斜行,所以国王走一步可以移动到相邻8个方格中的任意一个。这个距离就叫切比雪夫距离。

公式

(简单来说,就是各维度差值的最大值)

​举个栗子​​🌰:
(1,2)(4,6)

特点

  • 优点:对极端值敏感
  • 缺点:忽略了其他维度的差异
  • 适合场景:棋盘游戏、某些特定优化问题

比喻:就像国际象棋王,只关心最远的那个威胁👑

🌌 4. 闵可夫斯基距离 (Minkowski Distance) - 距离界的变形金刚

定义:是以上欧氏距离、曼哈顿距离、切比雪夫距离的"超级赛亚人"形态,通过参数p控制变形。所以闵氏距离不是一种距离,而是一组距离的定义,是对多个距离度量公式的概括性的表述。

公式

(p=1时为曼哈顿距离,p=2时为欧氏距离,p=∞​​:切比雪夫距离)

特点

  • 优点:灵活多变,一统江湖
  • 缺点:需要调参p,可能过拟合
  • 适合场景:需要平衡各维度重要性时

比喻:就像变形金刚,想变啥样变啥样🤖

👗 5. 马氏距离 (Mahalanobis Distance) - 贵族式距离

定义:考虑了数据分布的距离,就像贵族社交圈,不仅看距离,还看"门当户对"。

公式

(其中Σ是协方差矩阵的逆)

举个栗子​​🌰:

上图有两个正态分布的总体,它们的均值分别为a和b,但方差不一样,则图中的A点离哪个总体更近?或者说A有更大的概率属于谁?

答案是:A离左边的更近,尽管A与b的欧式距离远一些,A属于左边总体的概率更大。

特点

  • 优点:考虑了特征间的相关性,尺度不变
  • 缺点:计算复杂,需要估计协方差矩阵
  • 适合场景:高维数据,特征相关性强时

比喻:就像贵族社交,不仅看距离,还要看家族背景👑

🧼 6. 标准化欧氏距离 (Standardized Euclidean Distance) - 健身达人式距离

定义:欧氏距离的"健身版",先对数据进行标准化处理。

公式


<img src="https://img-blog.csdnimg.cn/20230520123545678.png" />
(其中σ是各维度的标准差)

特点

  • 优点:解决了欧氏距离的尺度敏感问题
  • 缺点:需要先计算标准差
  • 适合场景:特征尺度差异大时

比喻:就像健身达人,先调整好体型再比距离💪

📡 7. 汉明距离 (Hamming Distance) - 二进制世界的距离

定义:两个等长字符串对应位置的不同字符数目,就像比较两个二进制数的差异。

公式
<img src="https://img-blog.csdnimg.cn/20230520123556789.png" />
(简单来说,就是对应位置不同的个数)

特点

  • 优点:计算简单,适合离散数据
  • 缺点:只适用于等长数据
  • 适合场景:编码理论、DNA序列比对

比喻:就像二进制世界的"找不同"游戏🕵️

🎯 距离度量选择指南:如何"撩"到合适的距离?

  1. 数据类型
    • 连续型:欧氏/曼哈顿/马氏
    • 离散型:汉明
    • 混合型:需要特殊处理
  2. 特征尺度
    • 尺度相近:欧氏
    • 尺度差异大:曼哈顿/标准化欧氏
  3. 特征相关性
    • 独立:欧氏/曼哈顿
    • 相关:马氏
  4. 计算效率
    • 高维数据:曼哈顿/切比雪夫
    • 低维数据:欧氏

💻 代码实战:Python中的距离计算

import numpy as np
from scipy.spatial import distance

# 定义两个点
point1 = np.array([1, 2, 3])
point2 = np.array([4, 6, 8])

# 1. 欧氏距离
euclidean_dist = distance.euclidean(point1, point2)
print(f"欧氏距离: {euclidean_dist:.2f}")  # 输出: 7.07

# 2. 曼哈顿距离
manhattan_dist = distance.cityblock(point1, point2)  # cityblock是曼哈顿距离的别名
print(f"曼哈顿距离: {manhattan_dist:.2f}")  # 输出: 11.00

# 3. 切比雪夫距离
chebyshev_dist = distance.chebyshev(point1, point2)
print(f"切比雪夫距离: {chebyshev_dist:.2f}")  # 输出: 5.00

# 4. 闵可夫斯基距离 (p=3)
minkowski_dist = distance.minkowski(point1, point2, p=3)
print(f"闵可夫斯基距离(p=3): {minkowski_dist:.2f}")  # 输出: 6.08

# 5. 标准化欧氏距离
# 先标准化数据
mean = np.mean([point1, point2], axis=0)
std = np.std([point1, point2], axis=0)
std_point1 = (point1 - mean) / std
std_point2 = (point2 - mean) / std
std_euclidean_dist = distance.euclidean(std_point1, std_point2)
print(f"标准化欧氏距离: {std_euclidean_dist:.2f}")

# 6. 汉明距离 (需要转换为二进制字符串)
# 这里简化处理,实际应比较等长二进制串
binary_str1 = '101'
binary_str2 = '110'
hamming_dist = sum(c1 != c2 for c1, c2 in zip(binary_str1, binary_str2))
print(f"汉明距离: {hamming_dist}")  # 输出: 2


📊 距离度量对比表

距离度量公式特点计算复杂度尺度敏感相关性敏感适用场景
欧氏距离平方和开根号低维,尺度相近
曼哈顿距离绝对值和高维,尺度差异大
切比雪夫距离最大值棋盘游戏,极端值敏感
闵可夫斯基距离p次方和开p次根号取决于p需要灵活调整
马氏距离考虑协方差矩阵高维,特征相关
标准化欧氏距离先标准化再欧氏距离尺度差异大
汉明距离对应位置不同数二进制/离散数据

🎭 总结:距离的哲学思考

选择距离度量就像选择朋友:

  • 欧氏距离:直来直去的老铁
  • 曼哈顿距离:靠谱的出租车司机
  • 切比雪夫距离:警惕的棋手
  • 闵可夫斯基距离:多变的变形金刚
  • 马氏距离:高冷的贵族
  • 标准化欧氏距离:健身达人
  • 汉明距离:二进制世界的极客

没有最好的距离,只有最适合的距离!下次当你构建模型时,不妨先想想:"我的数据更适合和哪种距离做朋友呢?"🤔


📌 关注我,获取更多机器学习硬核干货!如果你有想了解的算法或技术,欢迎在评论区留言,我会考虑把它变成下一篇"爆款"文章哦!👇

拓展阅读

1、机器学习KNN算法全解析:从原理到实战

2、机器学习大揭秘:从原理到实战,一篇搞定!

3、机器学习算法大分类,一篇读懂监督、无监督、半监督和强化学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI妈妈手把手

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

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

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

打赏作者

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

抵扣说明:

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

余额充值