在机器学习中,距离度量是衡量样本间相似性或差异性的核心工具。无论是聚类(如K-Means、DBSCAN)、分类(如KNN)、还是特征选择(如马氏距离),距离计算都扮演着关键角色。本文将系统性地介绍机器学习中常用的10种距离定义、数学公式及其适用场景,帮助读者深入理解其原理与应用。


一、欧氏距离(Euclidean Distance)

定义
欧氏距离是最直观的距离度量方式,基于几何学中两点之间的直线距离。在n维空间中,两点 A(x1,x2,...,xn)与 B(y1,y2,...,yn) 的欧氏距离为:

特点

  • 优点:简单高效,适用于低维数据。
  • 缺点:对高维数据敏感(“维度灾难”),且未考虑特征尺度差异。

应用场景

  • 图像处理(像素点相似性)。
  • 低维空间的聚类分析(如K-Means)。

代码示例(Python)

import numpy as np
def euclidean_distance(a, b):
    return np.sqrt(np.sum((a - b)**2))

二、曼哈顿距离(Manhattan Distance)

定义
曼哈顿距离模拟了在网格状路径(如城市街区)中移动的距离,计算公式为:

特点

  • 优点:对离群点鲁棒,适合稀疏数据。
  • 缺点:忽略特征间的相关性。

应用场景

  • 交通路径规划。
  • 高维稀疏数据的相似性计算(如文本分类)。

代码示例(Python)

def manhattan_distance(a, b):
    return np.sum(np.abs(a - b))

三、切比雪夫距离(Chebyshev Distance)

定义
切比雪夫距离关注最大维度差异,公式为:

特点

  • 优点:适用于最大偏差分析。
  • 缺点:忽略其他维度的差异。

应用场景

  • 国际象棋中王的移动距离。
  • 需要快速判断最大差异的场景。

代码示例(Python)

def chebyshev_distance(a, b):
    return np.max(np.abs(a - b))

四、闵可夫斯基距离(Minkowski Distance)

定义
闵可夫斯基距离是欧氏距离和曼哈顿距离的泛化形式,通过参数 pp 控制计算方式:

  • p=1p=1:曼哈顿距离。
  • p=2p=2:欧氏距离。
  • p→∞p→∞:切比雪夫距离。

特点

  • 灵活性:通过调整 pp 适应不同场景需求。

应用场景

  • 自定义距离度量的场景(如动态调整 pp)。

代码示例(Python)

def minkowski_distance(a, b, p):
    return np.power(np.sum(np.power(np.abs(a - b), p)), 1/p)

五、标准化欧氏距离(Standardized Euclidean Distance)

定义
标准化欧氏距离对数据进行标准化处理,消除特征尺度影响:

其中 sisi​ 为第 ii 个特征的标准差。

特点

  • 优点:解决特征尺度不一致问题。
  • 缺点:需预先计算特征标准差。

应用场景

  • 特征尺度差异较大的数据集(如身高与体重)。

代码示例(Python)

def standardized_euclidean_distance(a, b, std_devs):
    return np.sqrt(np.sum(((a - b) / std_devs)**2))

六、马氏距离(Mahalanobis Distance)

定义
马氏距离通过协方差矩阵衡量数据分布下的距离,公式为:

其中 SS 为协方差矩阵。

特点

  • 优点:考虑特征相关性,对异常值敏感。
  • 缺点:计算协方差矩阵开销大。

应用场景

  • 异常检测(如工业设备故障监测)。

代码示例(Python)

from scipy.spatial.distance import mahalanobis
def mahalanobis_distance(a, b, inv_cov):
    return mahalanobis(a, b, inv_cov)

七、余弦相似度(Cosine Similarity)

定义
余弦相似度衡量向量方向的相似性,而非长度:

特点

  • 优点:对向量长度不敏感,适合文本分类。
  • 缺点:忽略特征权重差异。

应用场景

  • 文本挖掘(如文档相似性)。
  • 推荐系统(用户/物品向量匹配)。

代码示例(Python)

from sklearn.metrics.pairwise import cosine_similarity
def cosine_sim(a, b):
    return cosine_similarity([a], [b])[0][0]

八、汉明距离(Hamming Distance)

定义
汉明距离用于比较等长字符串的差异,计算不同位置的数量:

特点

  • 优点:适合二进制或离散数据。
  • 缺点:仅适用于相同长度的序列。

应用场景

  • 错误检测(如通信编码)。
  • 基因序列对比。

代码示例(Python)

def hamming_distance(a, b):
    return np.sum(np.array(a) != np.array(b))

九、杰卡德距离(Jaccard Distance)

定义
杰卡德距离衡量集合差异,公式为:

特点

  • 优点:适合集合或稀疏数据。
  • 缺点:忽略元素频率。

应用场景

  • 社交网络中好友关系相似性。
  • 推荐系统(物品集合匹配)。

代码示例(Python)

def jaccard_distance(a, b):
    intersection = len(set(a) & set(b))
    union = len(set(a) | set(b))
    return 1 - intersection / union

十、信息熵(Information Entropy)

定义
信息熵衡量数据的不确定性,公式为:

特点

  • 优点:反映数据分布的复杂性。
  • 缺点:仅适用于概率分布。

应用场景

  • 特征选择(高熵特征更具区分性)。
  • 决策树分裂依据。

代码示例(Python)

import math
def entropy(probabilities):
    return -np.sum([p * math.log(p) for p in probabilities])

总结:如何选择合适的距离?

距离类型 适用场景 典型算法
欧氏距离 低维数据相似性分析 K-Means、KNN
曼哈顿距离 高维稀疏数据 KNN、文本分类
切比雪夫距离 最大偏差分析 图像处理
闵可夫斯基距离 动态调整距离度量 自定义算法
马氏距离 异常检测 工业监测
余弦相似度 文本或高维向量相似性 推荐系统、NLP
汉明距离 二进制/离散数据 编码校验
杰卡德距离 集合相似性 社交网络分析
信息熵 数据分布不确定性 特征选择、决策树
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐