真的365会不会黑款-28365-365-365比分网

20种数据相似性计算方法

不同的相似性计算方法适用于不同类型的数据和问题。在选择相似性计算方法时,需根据数据的特性、问题的定义以及所关注的数据特点来做出

20种数据相似性计算方法

不同的相似性计算方法适用于不同类型的数据和问题。在选择相似性计算方法时,需根据数据的特性、问题的定义以及所关注的数据特点来做出合适的选择。

本文归纳了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):

特点:衡量两个概率分布之间的差异,非对称。

适用场景:概率分布比较、信息论领域。

DTW(Dynamic Time Warping)动态时间规整:

特点:适用于序列数据,考虑时间轴的变化,捕捉序列的形状相似性。

适用场景:时间序列比较、语音识别等。

Gower距离:

特点:适用于混合型数据,考虑不同数据类型的权重。

适用场景:多类型数据的相似性比较。

矩阵距离(Matrix Distance):

特点:适用于矩阵数据,衡量矩阵之间的差异。

适用场景:图像相似性比较、矩阵数据分析等。

Czekanowski-Dice系数:

特点:适用于集合型数据,考虑共同元素的比例。

适用场景:生态学、遗传学等领域。

Minkowski距离:

特点:通用距离度量,包括曼哈顿和欧几里德距离作为特例。

适用场景:数值型数据相似性比较。

Tanimoto系数:

特点:适用于集合型数据,衡量共同元素的比例。

适用场景:集合数据、生物信息学等。

Spearman等级相关系数:

特点:非线性关系,考虑等级关系的相似性。

适用场景:排序数据的相似性比较。

Haversine距离:

特点:适用于地理坐标数据,考虑球面上的距离。

适用场景:地理位置数据的相似性比较。

Wasserstein距离:

特点:适用于概率分布的相似性比较,考虑分布之间的运输成本。

适用场景:概率分布比较、图像生成等。

相似性算法的数学公式

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

欧几里德距离(Euclidean Distance):

Euclidean Distance=∑i=1n(xi−yi)2 \text{Euclidean Distance} = \sqrt{\sum_{i=1}^{n} (x_i - y_i)^2} Euclidean Distance=i=1∑n​(xi​−yi​)2​

曼哈顿距离(Manhattan Distance):

Manhattan Distance=∑i=1n∣xi−yi∣\text{Manhattan Distance} = \sum_{i=1}^{n} |x_i - y_i| Manhattan Distance=i=1∑n​∣xi​−yi​∣

余弦相似度(Cosine Similarity):

Cosine Similarity=∑i=1nxi⋅yi∑i=1nxi2⋅∑i=1nyi2 \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=1n​xi2​​⋅∑i=1n​yi2​​∑i=1n​xi​⋅yi​​

皮尔逊相关系数(Pearson Correlation Coefficient):

Pearson Correlation=∑i=1n(xi−xˉ)(yi−yˉ)∑i=1n(xi−xˉ)2⋅∑i=1n(yi−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​(xi​−xˉ)2​⋅∑i=1n​(yi​−yˉ​)2​∑i=1n​(xi​−xˉ)(yi​−yˉ​)​

汉明距离(Hamming Distance):

Hamming Distance=count(xi≠yi) \text{Hamming Distance} = \text{count}(x_i \neq y_i) Hamming Distance=count(xi​​=yi​)

Jaccard相似系数(Jaccard Similarity):

Jaccard Similarity=count(xi=yi)count(xi∪yi)\text{Jaccard Similarity} = \frac{\text{count}(x_i = y_i)}{\text{count}(x_i \cup y_i)} Jaccard Similarity=count(xi​∪yi​)count(xi​=yi​)​

编辑距离(Edit Distance):

计算两个序列之间的最小操作数,如插入、删除和替换操作。(以字符串为例)

编辑距离=最小编辑操作次数编辑距离=最小编辑操作次数编辑距离=最小编辑操作次数

编辑距离=最小编辑操作次数编辑距离=最小编辑操作次数编辑距离=最小编辑操作次数

汉明权重(Hamming Weight):

Hamming Weight=count(xi=1) \text{Hamming Weight} = \text{count}(x_i = 1) Hamming Weight=count(xi​=1)

Jensen-Shannon散度(Jensen-Shannon Divergence):

JS(P∥Q)=12∑i=1n(Pilog⁡22PiPi+Qi+Qilog⁡22QiPi+Qi) \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(P∥Q)=21​i=1∑n​(Pi​log2​Pi​+Qi​2Pi​​+Qi​log2​Pi​+Qi​2Qi​​)

汉明相似度(Hamming Similarity):

Hamming Similarity=count(xi=yi)n \text{Hamming Similarity} = \frac{\text{count}(x_i = y_i)}{n} Hamming Similarity=ncount(xi​=yi​)​

KL散度(Kullback-Leibler Divergence):

KL(P∥Q)=∑i=1nPilog⁡2PiQi \text{KL}(P \parallel Q) = \sum_{i=1}^{n} P_i \log_2 \frac{P_i}{Q_i} KL(P∥Q)=i=1∑n​Pi​log2​Qi​Pi​​

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(i−1,j),DTW(i,j−1),DTW(i−1,j−1))

Gower距离:

Gower Distance=1n∑i=1ndij \text{Gower Distance} = \frac{1}{n} \sum_{i=1}^{n} d_{ij} Gower Distance=n1​i=1∑n​dij​

矩阵距离(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=i∑​j∑​(A[i,j]−B[i,j])2​

欧几里德距离考虑了每个元素之间的差异,而弗罗贝尼乌斯范数距离考虑了整个矩阵的差异。

Czekanowski-Dice系数:

Czekanowski-Dice Coefficient=2×count(xi=yi)count(xi)+count(yi) \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​)​

Minkowski距离:

Minkowski Distance=(∑i=1n∣xi−yi∣p)1p \text{Minkowski Distance} = \left( \sum_{i=1}^{n} |x_i - y_i|^p \right)^{\frac{1}{p}} Minkowski Distance=(i=1∑n​∣xi​−yi​∣p)p1​

Tanimoto系数:

Tanimoto Coefficient=count(xi=yi)count(xi)+count(yi)−count(xi=yi) \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​)​

Spearman等级相关系数:

Spearman Rank Correlation=1−6∑i=1ndi2n(n2−1) \text{Spearman Rank Correlation} = 1 - \frac{6 \sum_{i=1}^{n} d_i^2}{n(n^2 - 1)} Spearman Rank Correlation=1−n(n2−1)6∑i=1n​di2​​

Haversine距离:

用于地理坐标数据的距离计算方法,基于球面距离的计算。

Haversine Distance=2rarcsin⁡sin⁡2(ϕ2−ϕ12)+cos⁡(ϕ1)⋅cos⁡(ϕ2)⋅sin⁡2(λ2−λ12) \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​为两个点的经度。

Wasserstein距离:

衡量两个概率分布之间的距离,即将一个分布转移到另一个分布所需的最小成本。

Wasserstein Distance=inf⁡γ∈Π(P,Q)∑i=1n∑j=1mγij⋅d(xi,yj) \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)inf​i=1∑n​j=1∑m​γij​⋅d(xi​,yj​)

其中 Π(P,Q) \Pi(P, Q) Π(P,Q) 表示 P,QP, Q P,Q 两个分布上的所有联合分布,

d(xi,yj) 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距离的实现因为涉及到更多的数据处理和计算,具体实现可能需要根据具体问题和数据类型进行调整。

← 上一篇: 彻底卸载KingRoot
下一篇: 解斷尾求生之謎 台師大證實尾巴是蜥蜴存活關鍵 →

相关推荐

《女医明妃传》谈允贤的历史原型介绍
电系宝可梦图鉴大全分享(十大最强电系宝可梦实力排名)
骨粉养花的正确用法(骨粉的正确施肥方法)
太诡异了!有人开发出仿人皮手机壳,它还会被晒伤
2025家用打印机推荐 这几款性价比高质量稳定
look直播怎么开守护,如何开启直播守护功能
越劇流派
旎的字典解释
关注:御夫之术是什么意思?御夫之术还是驭夫之术?
日语入门
【小灵通呼叫转移设置】自助服务
健身房如何成功做好预售?掌握这4点关键技巧!