20种数据相似性计算方法

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

相似性计算方法

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/62330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows10默认浏览器总是自动更改为Edge浏览器

在设置的默认应用设置中把默认浏览器改为chrome或其他之后他自动又会改回Edge。不得不说*软真的狗。 解决办法: 后来发现在Edge浏览器的设置中有这么一个选项,会很无耻的默认是Edge。把它关掉后重新设置就行了。

NPM 常用命令(一)

目录 1、npm 1.1 简介 1.2 依赖性 1.3 安装方式 2、npm access 2.1 命令描述 2.2 详情 3、npm adduser 3.1 描述 4、npm audit 4.1 简介 4.2 审计签名 4.3 操作示例 4.4 配置 audit-level dry-run force json package-lock-only omit foreground-scripts …

软考-中级-软件设计师之路

前言:两个月时间复习软考基本知识,下面做知识总结。 1. 计算机概论 第1章主要介绍计算机系统基础知识、计算机体系结构以及安全性、可靠性和系统性能评测基础。 2. 程序设计语言基础知识 第2章主要介绍程序设计语言的基本概念与基本成分,…

从项目中突显技能:在面试中讲述你的编程故事

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

mongodb建用户

玛德折腾了2个小时,、mongodb 建用户。艹 [rootk8-master mongodb]# cat docker-compose.yaml version: 2 services: mongodb: container_name: mongodb_2.0 image: mongo:4.4 restart: always environment: TZ: Asia/Shanghai MONGO_INITDB_ROOT_USERNAME: admin M…

【飞书ChatGPT机器人】飞书接入ChatGPT,打造智能问答助手

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话,在下面操作步骤中…

reduxreact-redux

redux redux组成部分:state,action,reducer,store store主要职责: 维持应用的state 提供getState()方法获取state 提供dispatch()方法发送action 通过subscribe()来注册监听 通过subscribe()返回值来注销监听 用法: action:必须要有return返…

TDengine函数大全-字符串函数

以下内容来自 TDengine 官方文档 及 GitHub 内容 。 以下所有示例基于 TDengine 3.1.0.3 TDengine函数大全 1.数学函数 2.字符串函数 3.转换函数 4.时间和日期函数 5.聚合函数 6.选择函数 7.时序数据库特有函数 8.系统函数 字符串函数 TDengine函数大全CHAR_LENGTHCONCATCONCA…

结构体的简单介绍

目录 概念: 与数组类比: 结构体声明: 注意: 结构体变量、全局变量、局部变量: 结构体声明中包含其他结构体变量: 结构体变量的初始化: 包含了其他结构体变量的初始化: 结构体…

SPI2外设驱动-W25Q64 SPI接口初始化

前言 (1)本系列是基于STM32的项目笔记,内容涵盖了STM32各种外设的使用,由浅入深。 (2)小编使用的单片机是STM32F105RCT6,项目笔记基于小编的实际项目,但是博客中的内容适用于各种单片…

carbondata优化小姐

一,carbondata高效原因 carbondata文件是hdfs的列式存储格式 查询速度是spark SQL的10倍,通过多种索引技术和多次push down优化,对TB级别数据快速响应 高效的压缩,使用轻量级和和重量级压缩组合的方式,减少60~80%的空间…

【FlowDroid】一、处理流程学习

FlowDroid 一、处理流程学习 下载配置源码概况代码逻辑分析analyzeAPKFilerunInfoflowprocessEntryPointcalculateCallbacks(sourcesAndSinks)再次回到processEntryPoint 自己做一些笔记 下载配置 参照我前面的文章可以使用FlowDroid安装初体验 为了看代码了解FlowDroid如何处…

homeassistant ubuntu自启动 网络设置

命令行安装virtualbox 或者安装包 hass官网下载 haos_ova-10.4.vdi virtualbox 装hass 最少2G内存 其他省略 自启动: gnome-session-properties 添加 VBoxManage startvm hass --type headless hass为自己的虚拟机名字 网络配置如下: 要全部打开

【云原生】Kubernetes容器编排工具

目录 1. K8S介绍 1.1 k8s的由来 下载地址 1.2 docker编排与k8s编排相比 1.3 传统后端部署与k8s 的对比 传统部署 k8s部署 ​2. k8s的集群架构与组件 (1) Kube-apiserver (2)Kube-controller-manager (3&a…

微信小程序开发教学系列(9)- 小程序页面优化

第9章 小程序页面优化 在开发小程序时,页面性能优化是非常重要的一项任务。优化页面性能可以提升用户体验,使小程序更加流畅和高效。本章将介绍一些常见的页面优化方法和技巧,帮助您提升小程序的性能。 9.1 页面性能优化的基本原则 页面性…

vue实现按需加载的多种方式

1.import动态导入 const Home () > import( /* webpackChunkName: "Home" */ /views/Home.vue); 2.使用vue异步组件resolve 这种方式没有成功 //const 组件名 resolve > require([‘组件路径’],resolve) //(这种情况下一个组件生成一个js文件…

vue+elementui前端rules校验缓存问题

场景: 最近公司要求项目前端不要用element-ui,改为使用公司其他组开发的ui组件。 这个ui组件使用基本就是安装后,直接全局替换elementui的el-前缀为公司开发的xx-前缀。 替换之后,发现替换倒是很丝滑,问题不大。可以运…

大场景图片切图python脚本

大场景图片切图python脚本 同时对原图和xml标注进行切割 优点: 1、使用了overlap的分割方法 2、对边界的小目标框进行了省略 # -*- coding: utf-8 -*- """ Author : zengwb Time : 2021/4/17 Software: PyCharm """ import os i…

Python项目日志打点功能实现方法

一、入门介绍 1.1 logging和logger的区别 logging和logger是Python的logging模块中的两个关键概念,它们在功能和用途上有明显的区别。 logging是一个Python标准库,是一个用于记录日志的标准模块。它提供了一个灵活的框架,可以用来记录不同级…

Qt应用开发(基础篇)——对话框窗口 QDialog

一、前言 QDialog类继承于QWidget,是Qt基于对话框窗口(消息窗口QMessageBox、颜色选择窗口QColorDialog、文件选择窗口QFileDialog等)的基类。 QDialog窗口是顶级的窗口,一般情况下,用来当做用户短期任务(确认、输入、选择)或者和用户交流(提…