2025年20种数据相似性计算方法

20种数据相似性计算方法不同的相似性计算方法适用于不同类型的数据和问题 在选择相似性计算方法时 需根据数据的特性 问题的定义以及所关注的数据特点来做出合适的选择 本文归纳了 20 种数据相似性计算方法以及它们的特点和适用场景 并给出了参考 python 实现 相似性计算方法 欧几里德距离 Euclidean Distance

大家好,我是讯享网,很高兴认识大家。

相似性计算方法

  1. 欧几里德距离(Euclidean Distance)
    特点:简单易懂,适用于连续数值数据,关注绝对值的差异。
    适用场景:数值型数据相似性比较,如向量、时间序列等。
  2. 曼哈顿距离(Manhattan Distance)
    特点:考虑每个维度的绝对差异,不受尺度影响,适用于连续数值数据。
    适用场景:数值型数据相似性比较,如地理坐标、时间序列等。
  3. 余弦相似度(Cosine Similarity)
    特点:适用于稀疏数据,只关注方向而非大小,适合文本分类、推荐系统等。
    适用场景:文本数据、向量表示的数据相似性比较。
  4. 皮尔逊相关系数(Pearson Correlation Coefficient)
    特点:衡量线性关系,对尺度敏感,适合关注变量间的线性关联性。
    适用场景:变量之间的线性关系比较,如数据分析、金融领域等。
  5. 汉明距离(Hamming Distance)
    特点:适用于二进制数据,衡量位不同的数量。
    适用场景:比特串、二值序列等相似性比较。
  6. Jaccard相似系数(Jaccard Similarity)
    特点:适用于集合型数据,衡量共同元素的比例。
    适用场景:集合数据、文本分类、社交网络分析等。
  7. 编辑距离(Edit Distance)
    特点:衡量序列的相似性,适用于字符串、序列等。
    适用场景:字符串匹配、语音识别、生物序列比对等。
  8. 汉明权重(Hamming Weight)
    特点:用于二进制数据,衡量位为1的数量。
    适用场景:比特串、二值序列等相似性比较。
  9. Jensen-Shannon散度(Jensen-Shannon Divergence)
    特点:适用于概率分布的相似性比较,考虑概率分布之间的差异。
    适用场景:概率分布比较、文本分类、信息检索等。
  10. 汉明相似度(Hamming Similarity)
    特点:适用于二进制数据,衡量位相同的比例。
    适用场景:比特串、二值序列等相似性比较。
  11. KL散度(Kullback-Leibler Divergence)
    特点:衡量两个概率分布之间的差异,非对称。
    适用场景:概率分布比较、信息论领域。
  12. DTW(Dynamic Time Warping)动态时间规整
    特点:适用于序列数据,考虑时间轴的变化,捕捉序列的形状相似性。
    适用场景:时间序列比较、语音识别等。
  13. Gower距离
    特点:适用于混合型数据,考虑不同数据类型的权重。
    适用场景:多类型数据的相似性比较。
  14. 矩阵距离(Matrix Distance)
    特点:适用于矩阵数据,衡量矩阵之间的差异。
    适用场景:图像相似性比较、矩阵数据分析等。
  15. Czekanowski-Dice系数
    特点:适用于集合型数据,考虑共同元素的比例。
    适用场景:生态学、遗传学等领域。
  16. Minkowski距离
    特点:通用距离度量,包括曼哈顿和欧几里德距离作为特例。
    适用场景:数值型数据相似性比较。
  17. Tanimoto系数
    特点:适用于集合型数据,衡量共同元素的比例。
    适用场景:集合数据、生物信息学等。
  18. Spearman等级相关系数
    特点:非线性关系,考虑等级关系的相似性。
    适用场景:排序数据的相似性比较。
  19. Haversine距离
    特点:适用于地理坐标数据,考虑球面上的距离。
    适用场景:地理位置数据的相似性比较。
  20. Wasserstein距离
    特点:适用于概率分布的相似性比较,考虑分布之间的运输成本。
    适用场景:概率分布比较、图像生成等。

相似性算法的数学公式

下面是上述20种数据相似性计算方法的数学表达式:


讯享网

  1. 欧几里德距离(Euclidean Distance)
    Euclidean Distance = ∑ i = 1 n ( x i − y i ) 2 \text{Euclidean Distance} = \sqrt{\sum_{i=1}^{n} (x_i - y_i)^2} Euclidean Distance=i=1n(xiyi)2
  2. 曼哈顿距离(Manhattan Distance)
    Manhattan Distance = ∑ i = 1 n ∣ x i − y i ∣ \text{Manhattan Distance} = \sum_{i=1}^{n} |x_i - y_i| Manhattan Distance=i=1nxiyi
  3. 余弦相似度(Cosine Similarity)
    Cosine Similarity = ∑ i = 1 n x i ⋅ y i ∑ i = 1 n x i 2 ⋅ ∑ i = 1 n y i 2 \text{Cosine Similarity} = \frac{\sum_{i=1}^{n} x_i \cdot y_i}{\sqrt{\sum_{i=1}^{n} x_i^2} \cdot \sqrt{\sum_{i=1}^{n} y_i^2}} Cosine Similarity=i=1nxi2 i=1nyi2 i=1nxiyi
  4. 皮尔逊相关系数(Pearson Correlation Coefficient)
    Pearson Correlation = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 ⋅ ∑ i = 1 n ( y i − y ˉ ) 2 \text{Pearson Correlation} = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^{n} (x_i - \bar{x})^2} \cdot \sqrt{\sum_{i=1}^{n} (y_i - \bar{y})^2}} Pearson Correlation=i=1n(xixˉ)2 i=1n(yiyˉ)2 i=1n(xixˉ)(yiyˉ)
  5. 汉明距离(Hamming Distance)
    Hamming Distance = count ( x i ≠ y i ) \text{Hamming Distance} = \text{count}(x_i \neq y_i) Hamming Distance=count(xi=yi)
  6. Jaccard相似系数(Jaccard Similarity)
    Jaccard Similarity = count ( x i = y i ) count ( x i ∪ y i ) \text{Jaccard Similarity} = \frac{\text{count}(x_i = y_i)}{\text{count}(x_i \cup y_i)} Jaccard Similarity=count(xiyi)count(xi=yi)
  7. 编辑距离(Edit Distance)
    计算两个序列之间的最小操作数,如插入、删除和替换操作。(以字符串为例)
    编 辑 距 离 = 最 小 编 辑 操 作 次 数 编 辑 距 离 = 最 小 编 辑 操 作 次 数 编辑距离=最小编辑操作次数 编辑距离=最小编辑操作次数 ==
  8. 汉明权重(Hamming Weight)
    Hamming Weight = count ( x i = 1 ) \text{Hamming Weight} = \text{count}(x_i = 1) Hamming Weight=count(xi=1)
  9. Jensen-Shannon散度(Jensen-Shannon Divergence)
    JS ( P ∥ Q ) = 1 2 ∑ i = 1 n ( P i log ⁡ 2 2 P i P i + Q i + Q i log ⁡ 2 2 Q i P i + Q i ) \text{JS}(P \parallel Q) = \frac{1}{2} \sum_{i=1}^{n} \left( P_i \log_2 \frac{2P_i}{P_i + Q_i} + Q_i \log_2 \frac{2Q_i}{P_i + Q_i} \right) JS(PQ)=21i=1n(Pilog2Pi+Qi2Pi+Qilog2Pi+Qi2Qi)
  10. 汉明相似度(Hamming Similarity)
    Hamming Similarity = count ( x i = y i ) n \text{Hamming Similarity} = \frac{\text{count}(x_i = y_i)}{n} Hamming Similarity=ncount(xi=yi)
  11. KL散度(Kullback-Leibler Divergence)
    KL ( P ∥ Q ) = ∑ i = 1 n P i log ⁡ 2 P i Q i \text{KL}(P \parallel Q) = \sum_{i=1}^{n} P_i \log_2 \frac{P_i}{Q_i} KL(PQ)=i=1nPilog2QiPi
  12. DTW(Dynamic Time Warping)
    动态时间规整计算两个序列的**匹配。考虑两个序列之间的**匹配,可以允许时间轴的不同步长,捕捉序列之间的相似性。给出一个递归形式的表达式:
    DTW ( i , j ) = ∣ x [ i ] − y [ j ] ∣ + min ⁡ ( DTW ( i − 1 , j ) , DTW ( i , j − 1 ) , DTW ( i − 1 , j − 1 ) ) \text{DTW}(i, j) = |x[i] - y[j]| + \min(\text{DTW}(i-1, j), \text{DTW}(i, j-1), \text{DTW}(i-1, j-1)) DTW(i,j)=x[i]y[j]+min(DTW(i1,j),DTW(i,j1),DTW(i1,j1))
  13. Gower距离
    Gower Distance = 1 n ∑ i = 1 n d i j \text{Gower Distance} = \frac{1}{n} \sum_{i=1}^{n} d_{ij} Gower Distance=n1i=1ndij
  14. 矩阵距离(Matrix Distance)
    定义两个矩阵之间的距离度量方法。
    "矩阵距离"并不是一个常见的术语,可能会有不同的解释。如果您是指矩阵之间的距离或相似度计算,这可以用来比较两个矩阵的相似性或差异。如欧几里德距离(Euclidean Distance), 弗罗贝尼乌斯范数距离(Frobenius Norm Distance)等。
    弗罗贝尼乌斯范数是矩阵的一种范数,用于衡量矩阵的大小。弗罗贝尼乌斯范数距离衡量了两个矩阵之间的差异。如果有两个矩阵 A 和 B,其维度相同,弗罗贝尼乌斯范数距离的计算公式如下:
    Frobenius Norm Distance = ∑ i ∑ j ( A [ i , j ] − B [ i , j ] ) 2 \text{Frobenius Norm Distance} = \sqrt{\sum_{i}\sum_{j}(A[i, j] - B[i, j])^2} Frobenius Norm Distance=ij(A[i,j]B[i,j])2
    欧几里德距离考虑了每个元素之间的差异,而弗罗贝尼乌斯范数距离考虑了整个矩阵的差异。
  15. Czekanowski-Dice系数
    Czekanowski-Dice Coefficient = 2 × count ( x i = y i ) count ( x i ) + count ( y i ) \text{Czekanowski-Dice Coefficient} = \frac{2 \times \text{count}(x_i = y_i)}{\text{count}(x_i) + \text{count}(y_i)} Czekanowski-Dice Coefficient=count(xi)+count(yi)2×count(xi=yi)
  16. Minkowski距离
    Minkowski Distance = ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 p \text{Minkowski Distance} = \left( \sum_{i=1}^{n} |x_i - y_i|^p \right)^{\frac{1}{p}} Minkowski Distance=(i=1nxiyip)p1
  17. Tanimoto系数
    Tanimoto Coefficient = count ( x i = y i ) count ( x i ) + count ( y i ) − count ( x i = y i ) \text{Tanimoto Coefficient} = \frac{\text{count}(x_i = y_i)}{\text{count}(x_i) + \text{count}(y_i) - \text{count}(x_i = y_i)} Tanimoto Coefficient=count(xi)+count(yi)count(xi=yi)count(xi=yi)
  18. Spearman等级相关系数
    Spearman Rank Correlation = 1 − 6 ∑ i = 1 n d i 2 n ( n 2 − 1 ) \text{Spearman Rank Correlation} = 1 - \frac{6 \sum_{i=1}^{n} d_i^2}{n(n^2 - 1)} Spearman Rank Correlation=1n(n21)6i=1ndi2
  19. Haversine距离
    用于地理坐标数据的距离计算方法,基于球面距离的计算。
    Haversine Distance = 2 r arcsin ⁡ sin ⁡ 2 ( ϕ 2 − ϕ 1 2 ) + cos ⁡ ( ϕ 1 ) ⋅ cos ⁡ ( ϕ 2 ) ⋅ sin ⁡ 2 ( λ 2 − λ 1 2 ) \text{Haversine Distance} = 2r \arcsin \sqrt{\sin^2\left(\frac{\phi_2 - \phi_1}{2}\right) + \cos(\phi_1) \cdot \cos(\phi_2) \cdot \sin^2\left(\frac{\lambda_2 - \lambda_1}{2}\right)} Haversine Distance=2rarcsinsin2(2ϕ2ϕ1)+cos(ϕ1)cos(ϕ2)sin2(2λ2λ1)
    其中 r r r 为球体的半径,
    ϕ 1 , ϕ 2 \phi_1, \phi_2 ϕ1,ϕ2为两个点的纬度,
    λ 1 , λ 2 \lambda_1, \lambda_2 λ1,λ2为两个点的经度。
  20. Wasserstein距离
    衡量两个概率分布之间的距离,即将一个分布转移到另一个分布所需的最小成本。
    Wasserstein Distance = inf ⁡ γ ∈ Π ( P , Q ) ∑ i = 1 n ∑ j = 1 m γ i j ⋅ d ( x i , y j ) \text{Wasserstein Distance} = \inf_{\gamma \in \Pi(P, Q)} \sum_{i=1}^{n} \sum_{j=1}^{m} \gamma_{ij} \cdot d(x_i, y_j) Wasserstein Distance=γΠ(P,Q)infi=1nj=1mγijd(xi,yj)
    其中 Π ( P , Q ) \Pi(P, Q) Π(P,Q) 表示 P , Q P, Q P,Q 两个分布上的所有联合分布,
    d ( x i , y j ) d(x_i, y_j) d(xi,yj) 是数据点之间的距离。

算法的python参考实现

下面是20种数据相似性计算方法的Python参考实现代码:

import numpy as np from scipy.spatial.distance import pdist, squareform # 欧几里德距离 def euclidean_distance(x, y): return np.sqrt(np.sum((x - y)2)) # 曼哈顿距离 def manhattan_distance(x, y): return np.sum(np.abs(x - y)) # 余弦相似度 def cosine_similarity(x, y): return np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y)) # 皮尔逊相关系数 def pearson_correlation(x, y): return np.corrcoef(x, y)[0, 1] # 汉明距离 def hamming_distance(x, y): return np.sum(x != y) # Jaccard相似系数 def jaccard_similarity(x, y): intersection = np.sum(np.logical_and(x, y)) union = np.sum(np.logical_or(x, y)) return intersection / union # 编辑距离 def edit_distance(x, y): m, n = len(x), len(y) dp = np.zeros((m + 1, n + 1)) for i in range(m + 1): for j in range(n + 1): if i == 0: dp[i][j] = j elif j == 0: dp[i][j] = i elif x[i - 1] == y[j - 1]: dp[i][j] = dp[i - 1][j - 1] else: dp[i][j] = 1 + min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) return dp[m][n] # 汉明权重 def hamming_weight(x): return np.sum(x) # Jensen-Shannon散度 def jensen_shannon_divergence(p, q): m = 0.5 * (p + q) return 0.5 * (kl_divergence(p, m) + kl_divergence(q, m)) # 汉明相似度 def hamming_similarity(x, y): return np.sum(x == y) / len(x) # KL散度 def kl_divergence(p, q): return np.sum(p * np.log2(p / q)) # 动态时间规整(DTW) def dtw_distance(x, y): m, n = len(x), len(y) dp = np.zeros((m + 1, n + 1)) for i in range(1, m + 1): for j in range(1, n + 1): cost = abs(x[i - 1] - y[j - 1]) dp[i][j] = cost + min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) return dp[m][n] # Gower距离 def gower_distance(x, y, weights=None): if weights is None: weights = np.ones(len(x)) diff = np.abs(x - y) return np.sum(weights * diff) / np.sum(weights) # Matrix Distance: 矩阵距离的实现取决于具体用例。 # Czekanowski-Dice系数 def czekanowski_dice_coefficient(x, y): common_elements = np.sum(np.logical_and(x, y)) total_elements = np.sum(np.logical_or(x, y)) return 2 * common_elements / total_elements # Minkowski距离 def minkowski_distance(x, y, p=2): return np.power(np.sum(np.power(np.abs(x - y), p)), 1/p) # Tanimoto系数 def tanimoto_coefficient(x, y): common_elements = np.sum(np.logical_and(x, y)) total_elements = np.sum(np.logical_or(x, y)) return common_elements / (total_elements - common_elements) # Spearman等级相关系数 def spearman_rank_correlation(x, y): rank_x = np.argsort(np.argsort(x)) rank_y = np.argsort(np.argsort(y)) return 1 - (6 * np.sum((rank_x - rank_y)2)) / (len(x) * (len(x)2 - 1)) # Haversine距离: 实现取决于具体用例。 def haversine_distance(coord1, coord2): lat1, lon1 = coord1 lat2, lon2 = coord2 radius = 6371 # 地球半径(单位:公里) dlat = np.radians(lat2 - lat1) dlon = np.radians(lon2 - lon1) a = np.sin(dlat/2) * np.sin(dlat/2) + np.cos(np.radians(lat1)) * np.cos(np.radians(lat2)) * np.sin(dlon/2) * np.sin(dlon/2) c = 2 * np.arctan2(np.sqrt(a), np.sqrt(1-a)) distance = radius * c return distance # Wasserstein距离: 实现取决于具体用例。 

讯享网

矩阵距离和Wasserstein距离的实现因为涉及到更多的数据处理和计算,具体实现可能需要根据具体问题和数据类型进行调整。

小讯
上一篇 2025-03-29 13:26
下一篇 2025-02-18 16:42

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/69958.html