在深度学习中,距离计算是许多核心算法的基石。无论是图像识别中的特征比对、推荐系统中的相似度匹配,还是聚类任务中的样本分组,距离度量都扮演着关键角色。不同的场景需要不同的距离衡量方式,本文将介绍深度学习中常用的几种距离计算方法,并附上代码示例,助你快速掌握它们的应用场景。
1. 欧氏距离( )
定义:欧氏距离是最直观的“直线距离”,用于衡量多维空间中两点的实际距离。
公式:
应用场景:图像特征匹配、K-Means聚类、回归问题。
代码示例:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
distance = np.linalg.norm(a - b)
print("欧氏距离:", distance) # 输出 5.196
2. 曼哈顿距离( )
定义:也称为“城市街区距离”,模拟网格路径的行走距离。
公式:
应用场景:文本分类、稀疏高维数据。
代码示例:
distance = np.sum(np.abs(a - b))
print("曼哈顿距离:", distance) # 输出 9
3. 余弦相似度( )
定义:衡量两个向量的方向差异,忽略大小。
公式:
应用场景:文本相似度(如TF-IDF向量)、推荐系统。
代码示例:
dot_product = np.dot(a, b)
norm_a = np.linalg.norm(a)
norm_b = np.linalg.norm(b)
similarity = dot_product / (norm_a * norm_b)
print("余弦相似度:", similarity) # 输出 0.974
4. 马氏距离( )
定义:考虑数据协方差结构的距离,消除特征相关性影响。
公式:
其中是协方差矩阵。
应用场景:分类任务(如LDA)、异常检测。
代码示例:
from scipy.spatial.distance import mahalanobis
# 假设数据已计算协方差矩阵的逆 S_inv
S_inv = np.linalg.inv(np.cov(data, rowvar=False))
distance = mahalanobis(a, b, S_inv)
5. 汉明距离( )
定义:比较两个等长字符串在相同位置上不同字符的数量。
应用场景:错误检测、DNA序列比对、二进制编码(如哈希编码)。
代码示例:
def hamming_distance(a, b):
return np.sum(a != b)
a = np.array([1, 0, 1, 1])
b = np.array([0, 0, 1, 0])
print("汉明距离:", hamming_distance(a, b)) # 输出 2
6. KL散度(- )
定义:衡量两个概率分布之间的差异,非对称性。
公式:
应用场景:变分自编码器(VAE)、生成对抗网络(GAN)。
代码示例:
from scipy.special import kl_div
p = np.array([0.4, 0.6])
q = np.array([0.5, 0.5])
kl = np.sum(kl_div(p, q))
print("KL散度:", kl) # 输出约 0.02
如何选择合适的距离度量?
距离类型适用场景特点
欧氏距离
连续特征、几何空间距离
对量纲敏感
余弦相似度
高维稀疏数据(如文本)
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
加入IP合伙人(站长加盟) | 全面包装你的品牌,搭建一个全自动交付的网赚资源独立站 | 晴天实测8个月运营已稳定月入3W+
限时特惠:本站每日持续更新海量内部创业教程,一年会员只需98元,全站资源免费无限制下载点击查看会员权益
站长微信: qtw123cn
