工具类|常见的距离算法和相似度计算方法

在探讨距离算法和相似度计算方法时,我们首先接触的是常见的几种距离算法。
1.1 欧几里得距离(Euclidean Distance)是数学中衡量两点之间“普通”距离的基本方法,它在m维空间中计算两点之间的实际距离。公式为:d = sqrt(Σ(xi - yi)^2),其中xi和yi分别代表两个点在m维空间中的坐标。
1.2 Earth Mover s Distance (EMD距离)则是一种衡量两个分布之间距离的方法,主要应用于图像处理和语音信号处理领域。通过线性规划方法求解,EMD问题可以直观地解释为将一个分布的“土”以最小代价搬运到另一个分布中。
1.3 曼哈顿距离(Manhattan Distance)则是在标准坐标系中计算两个点间横平竖直距离的总和,公式为:d = Σ|xi - yi|。它在计算城市网格中两点间的最短路径时特别有用。
1.4 杰卡德距离(Jaccard Distance)用于衡量两个集合的差异性,它是杰卡德相似系数的补集,公式为:d = 1 - J(A,B),其中J(A,B)表示两个集合的交集元素在并集中所占的比例。
1.5 马氏距离(Mahalanobis distance)考虑了数据点与分布之间的联系,适用于多维空间中计算两个未知样本集的相似度。公式为:d = sqrt((x - y)^T * S^-1 * (x - y)),其中S^-1是协方差矩阵S的逆。
在相似度算法方面,我们有:
2.1 余弦相似度(Cosine Similarity)用于计算两个向量之间的角度余弦值,公式为:sim = Σ(xi * yi) / (sqrt(Σxi^2) * sqrt(Σyi^2))。它不考虑向量的大小,仅比较方向。
2.2 皮尔森相关系数(Pearson Correlation Coefficient)衡量两个变量之间的线性相关性,公式为:r = Σ(xi - x̄)(yi - ȳ) / sqrt(Σ(xi - x̄)^2 * Σ(yi - ȳ)^2)。它适用于计算变量之间的依赖关系,具有平移不变性和尺度不变性。
2.3 KL散度(Kullback-Leibler Divergence)衡量两个概率分布之间的差异,公式为:Dkl(P||Q) = Σp(x) * log(p(x) / q(x))。KL散度越小,表示两个分布越接近。
2.4 Jaccard相似系数(Jaccard Coefficient)用于计算两个集合之间的相似度,公式为:J(A,B) = |A∩B| / |A∪B|。它适用于比较集合元素的交集和并集。
2.5 Tanimoto系数(广义Jaccard相似系数)在集合元素取值为[0, 1]区间时计算相似度,公式为:T(A,B) = (Σ(xi * yi)) / (Σ(xi + yi))。它提供了更广泛的集合比较方法。
2.6 互信息(Mutual Information)衡量两个随机变量之间的依赖程度,公式为:I(X;Y) = ΣxΣy p(x,y) * log(p(x,y) / (p(x)p(y)))。它提供了关于随机变量间信息的定量描述。
在比较欧氏距离和余弦相似度时,欧氏距离强调的是空间各点的实际距离,而余弦相似度关注的是向量间的角度关系。若保持点A位置不变,点B沿原方向远离坐标轴原点,则欧氏距离会增加,而余弦相似度保持不变,这是两者的关键区别。