做网站的公司首选智投未来,网站规划和建设的基本步骤,微信红包建设网站,wordpress怎么建淘宝客不同的相似性计算方法适用于不同类型的数据和问题。在选择相似性计算方法时#xff0c;需根据数据的特性、问题的定义以及所关注的数据特点来做出合适的选择。 本文归纳了20种数据相似性计算方法以及它们的特点和适用场景#xff0c;并给出了参考python实现。
相似性计算方法…不同的相似性计算方法适用于不同类型的数据和问题。在选择相似性计算方法时需根据数据的特性、问题的定义以及所关注的数据特点来做出合适的选择。 本文归纳了20种数据相似性计算方法以及它们的特点和适用场景并给出了参考python实现。
相似性计算方法 欧几里德距离Euclidean Distance 特点简单易懂适用于连续数值数据关注绝对值的差异。 适用场景数值型数据相似性比较如向量、时间序列等。 曼哈顿距离Manhattan Distance 特点考虑每个维度的绝对差异不受尺度影响适用于连续数值数据。 适用场景数值型数据相似性比较如地理坐标、时间序列等。 余弦相似度Cosine Similarity 特点适用于稀疏数据只关注方向而非大小适合文本分类、推荐系统等。 适用场景文本数据、向量表示的数据相似性比较。 皮尔逊相关系数Pearson Correlation Coefficient 特点衡量线性关系对尺度敏感适合关注变量间的线性关联性。 适用场景变量之间的线性关系比较如数据分析、金融领域等。 汉明距离Hamming Distance 特点适用于二进制数据衡量位不同的数量。 适用场景比特串、二值序列等相似性比较。 Jaccard相似系数Jaccard Similarity 特点适用于集合型数据衡量共同元素的比例。 适用场景集合数据、文本分类、社交网络分析等。 编辑距离Edit Distance 特点衡量序列的相似性适用于字符串、序列等。 适用场景字符串匹配、语音识别、生物序列比对等。 汉明权重Hamming Weight 特点用于二进制数据衡量位为1的数量。 适用场景比特串、二值序列等相似性比较。 Jensen-Shannon散度Jensen-Shannon Divergence 特点适用于概率分布的相似性比较考虑概率分布之间的差异。 适用场景概率分布比较、文本分类、信息检索等。 汉明相似度Hamming Similarity 特点适用于二进制数据衡量位相同的比例。 适用场景比特串、二值序列等相似性比较。 KL散度Kullback-Leibler Divergence 特点衡量两个概率分布之间的差异非对称。 适用场景概率分布比较、信息论领域。 DTWDynamic Time Warping动态时间规整 特点适用于序列数据考虑时间轴的变化捕捉序列的形状相似性。 适用场景时间序列比较、语音识别等。 Gower距离 特点适用于混合型数据考虑不同数据类型的权重。 适用场景多类型数据的相似性比较。 矩阵距离Matrix Distance 特点适用于矩阵数据衡量矩阵之间的差异。 适用场景图像相似性比较、矩阵数据分析等。 Czekanowski-Dice系数 特点适用于集合型数据考虑共同元素的比例。 适用场景生态学、遗传学等领域。 Minkowski距离 特点通用距离度量包括曼哈顿和欧几里德距离作为特例。 适用场景数值型数据相似性比较。 Tanimoto系数 特点适用于集合型数据衡量共同元素的比例。 适用场景集合数据、生物信息学等。 Spearman等级相关系数 特点非线性关系考虑等级关系的相似性。 适用场景排序数据的相似性比较。 Haversine距离 特点适用于地理坐标数据考虑球面上的距离。 适用场景地理位置数据的相似性比较。 Wasserstein距离 特点适用于概率分布的相似性比较考虑分布之间的运输成本。 适用场景概率分布比较、图像生成等。
相似性算法的数学公式
下面是上述20种数据相似性计算方法的数学表达式 欧几里德距离Euclidean Distance Euclidean Distance ∑ i 1 n ( x i − y i ) 2 \text{Euclidean Distance} \sqrt{\sum_{i1}^{n} (x_i - y_i)^2} Euclidean Distancei1∑n(xi−yi)2 曼哈顿距离Manhattan Distance Manhattan Distance ∑ i 1 n ∣ x i − y i ∣ \text{Manhattan Distance} \sum_{i1}^{n} |x_i - y_i| Manhattan Distancei1∑n∣xi−yi∣ 余弦相似度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_{i1}^{n} x_i \cdot y_i}{\sqrt{\sum_{i1}^{n} x_i^2} \cdot \sqrt{\sum_{i1}^{n} y_i^2}} Cosine Similarity∑i1nxi2 ⋅∑i1nyi2 ∑i1nxi⋅yi 皮尔逊相关系数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_{i1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i1}^{n} (x_i - \bar{x})^2} \cdot \sqrt{\sum_{i1}^{n} (y_i - \bar{y})^2}} Pearson Correlation∑i1n(xi−xˉ)2 ⋅∑i1n(yi−yˉ)2 ∑i1n(xi−xˉ)(yi−yˉ) 汉明距离Hamming Distance Hamming Distance count ( x i ≠ y i ) \text{Hamming Distance} \text{count}(x_i \neq y_i) Hamming Distancecount(xiyi) 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 Similaritycount(xi∪yi)count(xiyi) 编辑距离Edit Distance 计算两个序列之间的最小操作数如插入、删除和替换操作。以字符串为例 编 辑 距 离 最 小 编 辑 操 作 次 数 编 辑 距 离 最 小 编 辑 操 作 次 数 编辑距离最小编辑操作次数 编辑距离最小编辑操作次数 编辑距离最小编辑操作次数编辑距离最小编辑操作次数 汉明权重Hamming Weight Hamming Weight count ( x i 1 ) \text{Hamming Weight} \text{count}(x_i 1) Hamming Weightcount(xi1) 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_{i1}^{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(P∥Q)21i1∑n(Pilog2PiQi2PiQilog2PiQi2Qi) 汉明相似度Hamming Similarity Hamming Similarity count ( x i y i ) n \text{Hamming Similarity} \frac{\text{count}(x_i y_i)}{n} Hamming Similarityncount(xiyi) KL散度Kullback-Leibler Divergence KL ( P ∥ Q ) ∑ i 1 n P i log 2 P i Q i \text{KL}(P \parallel Q) \sum_{i1}^{n} P_i \log_2 \frac{P_i}{Q_i} KL(P∥Q)i1∑nPilog2QiPi DTWDynamic 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(i−1,j),DTW(i,j−1),DTW(i−1,j−1)) Gower距离 Gower Distance 1 n ∑ i 1 n d i j \text{Gower Distance} \frac{1}{n} \sum_{i1}^{n} d_{ij} Gower Distancen1i1∑ndij 矩阵距离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 Distancei∑j∑(A[i,j]−B[i,j])2 欧几里德距离考虑了每个元素之间的差异而弗罗贝尼乌斯范数距离考虑了整个矩阵的差异。 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 Coefficientcount(xi)count(yi)2×count(xiyi) Minkowski距离 Minkowski Distance ( ∑ i 1 n ∣ x i − y i ∣ p ) 1 p \text{Minkowski Distance} \left( \sum_{i1}^{n} |x_i - y_i|^p \right)^{\frac{1}{p}} Minkowski Distance(i1∑n∣xi−yi∣p)p1 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 Coefficientcount(xi)count(yi)−count(xiyi)count(xiyi) Spearman等级相关系数 Spearman Rank Correlation 1 − 6 ∑ i 1 n d i 2 n ( n 2 − 1 ) \text{Spearman Rank Correlation} 1 - \frac{6 \sum_{i1}^{n} d_i^2}{n(n^2 - 1)} Spearman Rank Correlation1−n(n2−1)6∑i1ndi2 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 Distance2rarcsinsin2(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为两个点的经度。 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_{i1}^{n} \sum_{j1}^{m} \gamma_{ij} \cdot d(x_i, y_j) Wasserstein Distanceγ∈Π(P,Q)infi1∑nj1∑mγij⋅d(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] jelif j 0:dp[i][j] ielif 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, weightsNone):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, p2):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 coord1lat2, lon2 coord2radius 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 * creturn distance# Wasserstein距离: 实现取决于具体用例。矩阵距离和Wasserstein距离的实现因为涉及到更多的数据处理和计算具体实现可能需要根据具体问题和数据类型进行调整。