机器学习中的数学---常用距离计算方法详解
在机器学习中,距离度量是衡量样本间相似性或差异性的核心工具。无论是聚类(如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 |
汉明距离 | 二进制/离散数据 | 编码校验 |
杰卡德距离 | 集合相似性 | 社交网络分析 |
信息熵 | 数据分布不确定性 | 特征选择、决策树 |