机器学习中的距离总结

在数据分析、机器学习、模式识别等领域,距离函数用于衡量两个对象(向量、集合、字符串等)之间的相似性或差异性。不同的距离函数适用于不同的数据类型和业务场景,以下是常见距离函数的总结,按应用场景分类整理:

一、适用于连续型向量的距离(数值型数据)

这类距离主要用于衡量欧几里得空间中两个点(向量)的距离,适用于连续数值特征(如身高、体重、像素值等)。

距离名称 定义与公式 适用场景 特点
欧几里得距离(Euclidean Distance) 两点之间的直线距离,是最常用的距离度量。 公式:对于向量 (a=(a_1,a_2,...,a_n)) 和 (b=(b_1,b_2,...,b_n)), (d(a,b) = \sqrt{\sum_{i=1}^n (a_i - b_i)^2}) 计算机视觉(如特征点匹配)、推荐系统(用户偏好向量比较)、聚类分析(K-Means默认距离) 直观且符合人类对"距离"的认知;但受量纲影响大(如厘米和米需先标准化)。
曼哈顿距离(Manhattan Distance) 各维度坐标差的绝对值之和,又称"城市街区距离"。 公式:(d(a,b) = \sum_{i=1}^n a_i - b_i )
切比雪夫距离(Chebyshev Distance) 各维度坐标差的最大值。 公式:(d(a,b) = \max_{i=1...n} a_i - b_i )
闵可夫斯基距离(Minkowski Distance) 欧几里得、曼哈顿、切比雪夫距离的推广,由参数 (p) 控制。 公式:(d(a,b) = (\sum_{i=1}^n a_i - b_i p){1/p})
标准化欧几里得距离 先对数据标准化(消除量纲),再计算欧几里得距离。 公式:(d(a,b) = \sqrt{\sum_{i=1}^n (\frac{a_i - b_i}{\sigma_i})^2}),其中 (\sigma_i) 是第 (i) 维度的标准差。 特征量纲差异大的场景(如"年龄(0-100)"和"收入(0-100万)") 解决了欧几里得距离的量纲问题,更适合跨维度比较。
马氏距离(Mahalanobis Distance) 考虑特征间协方差的距离,不受量纲影响,且能消除维度相关性。 公式:(d(a,b) = \sqrt{(a-b)^T \Sigma^{-1} (a-b)}),其中 (\Sigma) 是数据的协方差矩阵。 异常检测(如信用卡欺诈识别)、同一分布内的点距离度量 对高维、特征相关的数据更友好;但需已知数据分布(协方差矩阵)。

二、适用于向量方向的距离(不关注大小,仅关注方向)

这类距离更注重向量的"方向相似性",而非绝对数值大小,常用于文本、图像等高维稀疏数据。

距离名称 定义与公式 适用场景 特点
余弦距离(Cosine Distance) 基于余弦相似度的距离((1 - \text{余弦相似度}))。 余弦相似度公式:(\cos\theta = \frac{a \cdot b}{ a
角度距离(Angular Distance) 向量夹角的弧度值。 公式:(d(a,b) = \arccos(\cos\theta))((\cos\theta) 为余弦相似度) 需严格度量方向差异的场景(如方向传感器数据比较) 直接反映夹角大小,范围为 ([0, \pi]),比余弦距离更直观。

三、适用于集合或二进制数据的距离(0-1特征、布尔值)

这类数据通常表示"有无"(如"是否购买商品""基因是否表达"),距离需反映集合的重叠程度。

距离名称 定义与公式 适用场景 特点
杰卡德距离(Jaccard Distance) 基于杰卡德系数(集合交集与并集的比值),衡量两个集合的不相似度。 公式:(d(A,B) = 1 - \frac{ A \cap B }{
汉明距离(Hamming Distance) 两个等长字符串(或二进制向量)中,对应位置元素不同的数量。 公式:对二进制向量 (a,b),(d(a,b) = \sum_{i=1}^n a_i - b_i )
dice距离(Dice Distance) 基于Dice系数的距离((1 - \text{Dice系数}))。 Dice系数公式:(\frac{2 A \cap B }{

四、适用于字符串的距离(序列数据)

用于衡量两个字符串(或序列)的差异,需考虑插入、删除、替换等操作。

距离名称 定义与公式 适用场景 特点
编辑距离(Levenshtein Distance) 将一个字符串转换为另一个所需的最少插入、删除、替换操作次数。 (无简洁公式,需动态规划计算) 拼写纠错(如"teh"到"the"的距离为1)、自然语言处理(文本相似度)、DNA序列比对 灵活处理不同长度的字符串;但计算复杂度较高((O(nm)),(n,m) 为字符串长度)。
最长公共子序列距离(LCS Distance) 基于最长公共子序列(LCS)长度的距离:(d = 1 - \frac{ LCS(a,b) }{\max(len(a), len(b))})

五、选择距离函数的核心原则

  1. 数据类型优先:连续数值优先用欧几里得/曼哈顿;二进制/集合用杰卡德/汉明;字符串用编辑距离。
  2. 业务目标:关注"大小差异"用欧几里得;关注"方向差异"用余弦距离;关注"极端值"用切比雪夫。
  3. 数据特性:高维稀疏数据优先余弦距离(避免维度灾难);特征相关数据用马氏距离;量纲差异大时用标准化距离。

实际应用中,常需通过实验(如对比不同距离下模型的准确率)选择最优方案。

相关推荐
weixin_429630263 小时前
机器学习-第一章
人工智能·机器学习
大模型真好玩3 小时前
深入浅出LangGraph AI Agent智能体开发教程(五)—LangGraph 数据分析助手智能体项目实战
人工智能·python·mcp
IT_陈寒4 小时前
React性能优化:这5个Hook技巧让我的组件渲染效率提升50%(附代码对比)
前端·人工智能·后端
Captaincc4 小时前
9 月 20 日,TRAE Meetup@Guangzhou 相聚羊城
人工智能·后端
霍格沃兹软件测试开发4 小时前
快速掌握Dify+Chrome MCP:打造网页操控AI助手
人工智能·chrome·dify·mcp
张子夜 iiii4 小时前
4步OpenCV-----扫秒身份证号
人工智能·python·opencv·计算机视觉
华新嘉华DTC创新营销6 小时前
华新嘉华:AI搜索优化重塑本地生活行业:智能推荐正取代“关键词匹配”
人工智能·百度·生活
SmartBrain7 小时前
DeerFlow 实践:华为IPD流程的评审智能体设计
人工智能·语言模型·架构
l1t8 小时前
利用DeepSeek实现服务器客户端模式的DuckDB原型
服务器·c语言·数据库·人工智能·postgresql·协议·duckdb