用「城市导航」、「指南针」、「激光测距」的比喻,带你彻底理解三大距离度量的本质区别!
📊 核心对比表
指标 | 曼哈顿距离(L1) | 余弦相似度 | 欧式距离(L2) |
---|---|---|---|
数学本质 | 绝对差之和 | 向量夹角余弦值 | 平方差平方根 |
计算公式 | ( \sum |x_i - y_i| ) | ( \frac{\mathbf{x} \cdot \mathbf{y}}{|\mathbf{x}| |\mathbf{y}|} ) | ( \sqrt{\sum (x_i - y_i)^2} ) |
量纲敏感性 | 敏感 | 不敏感 | 敏感 |
计算复杂度 | O(n) | O(n) | O(n) |
适用维度 | 低维 | 高维 | 低维 |
空间类型 | 网格空间 | 方向空间 | 欧氏空间 |
🏙️ 曼哈顿距离(城市导航距离)
📍 核心特点
- 路径计算:只能沿坐标轴方向移动的距离总和
- 抗噪性:对异常值更鲁棒(绝对值抑制大偏差)
- 稀疏性:更容易产生稀疏解
🚕 典型应用场景
-
物流路径规划
- 计算仓库到商场的实际行驶距离(城市街道网格)
- 例:从(2,3)到(5,7)的曼哈顿距离 = |5-2| + |7-3| = 3+4=7
-
特征选择
- L1正则化(LASSO)产生稀疏权重矩阵
-
图像处理
- 计算两幅二值图像的差异像素数
⚠️ 使用注意
- 需先进行特征标准化(对量纲敏感)
- 高维数据中效果下降(维度诅咒)
🧭 余弦相似度(方向指南针)
📍 核心特点
- 方向敏感:只关注向量夹角,忽略模长差异
- 高维友好:适合稀疏高维数据(如文本TF-IDF)
- 归一化:结果范围[-1,1],1表示完全相同方向
📚 典型应用场景
-
文本相似度计算
- 比较两篇文章的TF-IDF向量
- 例:"猫"和"狗"的向量夹角小,"猫"和"汽车"夹角大
-
推荐系统
- 用户兴趣向量与商品特征向量的方向匹配
- 例:用户A的偏好向量[0.9,0.1,0.3] vs 商品B的特征向量[0.8,0.2,0.4]
-
人脸识别
- 比较人脸嵌入向量的方向一致性
⚠️ 使用注意
- 不适合需要关注向量模长的场景(如价格比较)
- 对零值敏感(需处理稀疏数据)
📏 欧式距离(激光测距仪)
📍 核心特点
- 几何直观:符合现实空间的直线距离认知
- 平方放大:对异常值敏感(平方项放大差异)
- 广泛适用:最基础的空间距离度量
🖼️ 典型应用场景
-
图像识别
- 比较两张图片的像素级差异
- 例:MNIST手写数字的28x28像素向量距离
-
聚类分析
- K-Means算法默认使用欧式距离
- 例:客户分群基于年龄、收入、消费频次的几何距离
-
物理仿真
- 计算粒子间的真实空间距离
- 例:分子动力学模拟中原子间距计算
⚠️ 使用注意
- 必须进行特征标准化(量纲不统一会导致失真)
- 高维数据中效果变差(需降维或改用余弦相似度)
🌰 对比案例:用户画像匹配
假设有三个用户的特征向量(已标准化):
用户A: [0.9, 0.2, 0.5]
用户B: [0.8, 0.3, 0.4]
用户C: [-0.5, 0.7, 0.1]
度量方式 | A vs B | A vs C | 结论 |
---|---|---|---|
曼哈顿距离 | 0.1+0.1+0.1=0.3 | 1.4+0.5+0.4=2.3 | A与B更相似 |
余弦相似度 | 0.995 | -0.254 | A与B方向几乎一致 |
欧式距离 | √(0.01+0.01+0.01)=0.173 | √(1.96+0.25+0.16)=1.54 | A与B更接近 |
🔧 使用场景决策树
是否关注方向而非大小? → 是 → 余弦相似度
↓否
是否需要抗异常值? → 是 → 曼哈顿距离
↓否
数据维度是否<50? → 是 → 欧式距离
↓否
使用余弦相似度或降维后欧式距离
🐍 Python代码实现
import numpy as np
from scipy.spatial import distance
# 样本数据
v1 = np.array([0.9, 0.2, 0.5])
v2 = np.array([0.8, 0.3, 0.4])
# 曼哈顿距离
manhattan = distance.cityblock(v1, v2) # 输出0.3
# 余弦相似度
cosine_sim = 1 - distance.cosine(v1, v2) # 输出0.995
# 欧式距离
euclidean = distance.euclidean(v1, v2) # 输出0.173
终极总结:
- 想计算实际路径距离 → 曼哈顿距离 🏙️
- 要比较方向相似性 → 余弦相似度 🧭
- 需测量直线几何距离 → 欧式距离 📏
选择正确的距离度量,就像为不同交通工具选择最佳导航模式! 🚕✈️🚀