曲线相似度计算方法用于衡量两个或多个曲线之间的相似程度,不同的曲线相似度计算方法适用于不同的数据类型和应用场景。

选择合适的曲线相似度计算方法取决于数据的性质、应用场景以及相似性的定义方式。有些方法适用于时间序列数据,有些则适用于图像、形状等不同类型的数据。了解每种方法的特点和适用场景,可以在具体应用中选择合适的计算方法来衡量曲线之间的相似性。

七种曲线相似度算法的适用场景

  1. 欧几里德距离(Euclidean Distance)
    特点:简单易懂,计算方法直观。
    适用场景:适用于曲线样本数相同的情况,当曲线具有明显的平移和缩放变换时表现较好。

  2. 动态时间规整(Dynamic Time Warping,DTW)
    特点:考虑了时间轴的变化,能够捕捉曲线的形状相似性。对于时间轴缩放和平移具有一定的容忍性。
    适用场景:适用于曲线在时间上存在变换、平移、扭曲等情况,比如语音识别、时间序列数据分析等。

  3. 余弦相似度(Cosine Similarity)
    特点:忽略了曲线的振幅,只关注其方向。适用于振幅不重要的情况。
    适用场景:文本分类、推荐系统中用户兴趣相似性等。

  4. 皮尔逊相关系数(Pearson Correlation Coefficient)
    特点:衡量线性相关性,取值范围在-1到1之间。
    适用场景:适用于评估两个变量之间的线性关系,不仅限于时间序列数据。

  5. 曼哈顿距离(Manhattan Distance)
    特点:考虑了各维度之间的差异,适用于具有多维度的曲线数据。
    适用场景:图像识别、多维时间序列分析等。

  6. 动态核相关(Dynamic Kernel Correlation,DKC)
    特点:将时间序列映射到高维特征空间中,计算相关性。可以捕获非线性关系。
    适用场景:适用于非线性关系较为复杂的时间序列数据。

  7. 平均绝对误差(Mean Absolute Error,MAE)
    特点:衡量实际值和预测值之间的差异。
    适用场景:用于衡量预测模型的精度,例如回归模型的性能评估。

七种曲线相似度算法的计算公式

  1. 欧几里德距离(Euclidean Distance)
    计算两个向量(或曲线)之间的欧几里德距离,即两点之间的直线距离。

    计算公式:
    \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 ) )

  2. 余弦相似度(Cosine Similarity)
    衡量两个向量(或曲线)之间的夹角,而不考虑振幅。

    计算公式:
    \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 = 1 n x i 2 i = 1 n y i 2 i = 1 n x i y i

  3. 皮尔逊相关系数(Pearson Correlation Coefficient)
    衡量两个变量之间的线性关系程度。

    计算公式:
    \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 = 1 n ( x i x ˉ ) 2 i = 1 n ( y i y ˉ ) 2 i = 1 n ( x i x ˉ ) ( y i y ˉ )

  4. 曼哈顿距离(Manhattan Distance)
    计算两个向量(或曲线)之间的绝对差值之和。

    计算公式:
    MAE = n 1 i = 1 n x i y i

曲线相似度计算方法的Python实现

只是给出了一个简化实例,没使用任何外部库,仅使用标准库中的基本数学函数。对于一些方法,如动态时间规整(DTW)和动态核相关(DKC),需要进行更详细的数学计算。

import numpy as np
# 欧氏距离
euclidean_distance = np.sqrt(np.sum((x - y)**2))
# 动态时间规整(DTW)
def dtw_distance(x, y):
    n, m = len(x), len(y)
    dtw_matrix = np.zeros((n + 1, m + 1))
    for i in range(1, n + 1):
        for j in range(1, m + 1):
            cost = abs(x[i - 1] - y[j - 1])
            dtw_matrix[i, j] = cost + min(dtw_matrix[i - 1, j], dtw_matrix[i, j - 1], dtw_matrix[i - 1, j - 1])
    return dtw_matrix[n, m]
# 余弦相似度
cosine_similarity = np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))
# 皮尔逊相关系数
pearson_correlation = np.corrcoef(x, y)[0, 1]
# 曼哈顿距离
manhattan_distance = np.sum(np.abs(x - y))
# 动态核相关(DKC)
def dkc_distance(x, y):
    sigma = 1.0  # 高斯核的带宽
    k_x = np.exp(-np.sum((x - x)**2) / (2 * sigma**2))
    k_y = np.exp(-np.sum((y - y)**2) / (2 * sigma**2))
    dkc_distance = np.dot(k_x, k_y)
    return dkc_distance
# 平均绝对误差(MAE)
mae = np.mean(np.abs(x - y))
print("MAE:", mae)
                                    1. 什么条件下两条曲线最相似
那肯定是在定义域[a, b]中,两条曲线完全重合。用数学语言
∀x∈[a,b],f1(x)=f2(x)\forall x \isin [a, b], f_1(x) =f_2(x)∀x∈[a,b],f1​(x)=f2​(x)或者∀x∈[a,b],f1(x)−f2(x)=0(1)\forall x \isin [a, b], f_1(x) -f_2(x)=0 \tag{1}∀x∈[a,b],f1​(x)−f2​(x)=0(1) 然而,∀\forall∀符号是不利于我们计算的,因.
                                    时间序列相似性属于曲线相似性/曲线匹配(curve matching)领域的内容,在这一领域,有许多有用的方法,但是国内的博客上鲜有这方面的内容,因此我选取了几种常用的方法进行一下综述性的阐述。衡量相似性之前,我们首先定义“相似”。正常情况下,我们认为x,y,z是形状相似的,在这三条曲线中,我们认为y,z是最相似的两条曲线(因为y,z的距离最近)。ok,那我们先来看看寻常意义上的相似:距离最近且形...
2. 基于形状的方法
衡量两条曲线f1(x,y)f_1(x,y)f1​(x,y)与f2(x,y)f_2(x,y)f2​(x,y)的相似度,从传统特征工程的角度来讲,思路无外乎是设计不同的特征空间,将曲线映射到特征空间里面再进行相似度的对比,这种相似度的对比实际上就是在特征空间里面的欧式距离了。目前而言,常用的设计思路主要是出于两个方面设计,一个是从...
便于计算的离散距离求解
Alt, Helmut, and Michael Godau. “Computing the Fréchet distance between two polygonal curves.” International Journal of Computational Geometry &am
                                    曲线相似性计算,如果两条之间存在直接影响,更要关注特征的连续性,如果两条受同一条影响,更要关注特征的离散最大性。
设xn为A的波动数据序列,yn为B的波动数据序列,其中n=1…N。A与B的相关系数可以通过如下公式计算:
                                    本文内容来自知乎:医小咖里面有许多关于医学统计方法,非常实用,转载以方便查阅多图实例:教你绘制ROC曲线   在选择诊断试验时,许多研究者会在灵敏度和特异度之间进行艰难的取舍。那么,是否可以综合考虑灵敏度和特异度的特点,根据一个指标评价诊断试验的准确性呢?Lusted于1971年提出受试者工作特征曲线(receiver operating characteristic curve...
对于初学者,从David G.Lowe的论文到实现,有许多鸿沟,本文帮你跨越。
1、SIFT综述
尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由 David Lowe在1999年所发表,20
而寻找图像特征点,我们要先知道一个概念,就是“图像尺度空间”。
平时生活中,用人眼去看一张照片时,随着观测距离的增加,图像会逐渐变得模糊。那么计算机在“看”一张照片时,会从不同的“尺度”去观测照片,尺度越大,图像越模糊。
那么这里的“尺度”就是二维高斯函数当中的σ值,一张照片与二维高斯...