人工智能/机器学习基础知识——时间相似性度量(DTW)

时间序列相似度度量

Temporal Sequences Similarity Measurement

Dynamic Time Warping(DTW)

CSDN

CSDN

知乎

动态时间归整

  • Key Idea

    • 两段时间序列可能存在一定的时间轴方向飘移,在这种情况下,若在同一坐标系下使用欧氏距离衡量两段序列对应逐点距离,则不能很好地反应两段时间序列的相似度

    • 在大多数情况下,两个序列整体上具有非常相似的情况,但这些情况在时间轴上并不是对齐的。所以在比较它们之间相似度之前,需要将其中一个或两个序列在时间轴下扭曲(Warping)以达到对齐

    • DTW通过把时间序列进行延伸和缩短,来计算两个时间序列之间的相似性

    在这里插入图片描述

  • Algorithm

    • 现有两个时间序列 Q Q Q C C C,一段长为 m m m,一段长为 n n n,每个序列中的元素可以看作是序列的特征向量

    • n = m n=m n=m,直接逐点计算序列距离即可

    • n ≠ m n \neq m n=m,为了对齐序列,构造一个 n × m n×m n×m的矩阵,其元素 ( i , j ) (i,j) (i,j)表示 q i q_i qi c j c_j cj两个点之间的距离(一般为欧氏距离),距离越小相似度越高。DTW的目的就是寻找一条通过此网格中若干格点的路径,路径通过的格点即为两个序列进行序列对齐的点。这条最佳路径称为规整路径(Warping Path)

      W = w 1 , w 2 , … , w k , … , w k W=w_{1}, w_{2}, \ldots, w_{\mathrm{k}}, \ldots, w_{\mathrm{k}} W=w1,w2,,wk,,wk

      max ⁡ ( m , n ) ≤ K < m + n − 1 \max (m, n) \leq \mathrm{K}<m+n-1 max(m,n)K<m+n1

    • 其中规整路径需满足如下三个条件

      • 边界条件:必须从左下角出发,在右上角结束

      • 连续性:不能跨点匹配,一次网格移动只能相邻网格

      • 单调性:随时间单调进行,即只能往右或者往上或者往右上对角线

    • 我们关心的是使规整代价最小的规整路径

      D T W ( Q , C ) = min ⁡ { ∑ k = 1 K w k / K } D T W(Q, C)=\min \left\{\sqrt{\sum_{k=1}^{K} w_{k}} / K\right\} DTW(Q,C)=min k=1Kwk /K
      分母 K K K对不同长度的规整路径作Normalize

    • 可用DP求解

      γ ( i , j ) = d ( q i , c j ) + min ⁡ { γ ( i − 1 , j − 1 ) , γ ( i − 1 , j ) , γ ( i , j − 1 ) } \gamma(\mathrm{i}, \mathrm{j})=d\left(q_{\mathrm{i}}, c_{\mathrm{j}}\right)+\min \{\gamma(i-1, j-1), \gamma(i-1, j), \gamma(i, j-1)\} γ(i,j)=d(qi,cj)+min{γ(i1,j1),γ(i1,j),γ(i,j1)}

    在这里插入图片描述

  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在日常的生活中我们最经常使用的距离毫无疑问应该是欧式距离,但是对于一些特殊情况,欧氏距离存在着其很明显的缺陷,比如说时间序列,举个比较简单的例子,序列A:1,1,1,10,2,3,序列B:1,1,1,2,10,3,如果用欧氏距离,也就是distance[i][j]=(b[j]-a[i])*(b[j]-a[i])来计算的话,总的距离和应该是128,应该说这个距离是非常大的,而实际上这个序列的图像是十分相似的,这种情况下就有人开始考虑寻找新的时间序列距离的计算方法,然后提出了DTW算法,这种方法在语音识别,机器学习方便有着很重要的作用。 这个算法是基于动态规划(DP)的思想,解决了发音长短不一的模板匹配问题,简单来说,就是通过构建一个邻接矩阵,寻找最短路径和。 还以上面的2个序列作为例子,A中的10和B中的2对应以及A中的2和B中的10对应的时候,distance[3]以及distance[4]肯定是非常大的,这就直接导致了最后距离和的膨胀,这种时候,我们需要来调整下时间序列,如果我们让A中的10和B中的10 对应 ,A中的1和B中的2对应,那么最后的距离和就将大大缩短,这种方式可以看做是一种时间扭曲,看到这里的时候,我相信应该会有人提出来,为什么不能使用A中的2与B中的2对应的问题,那样的话距离和肯定是0了啊,距离应该是最小的吧,但这种情况是不允许的,因为A中的10是发生在2的前面,而B中的2则发生在10的前面,如果对应方式交叉的话会导致时间上的混乱,不符合因果关系。 接下来,以output[6][6](所有的记录下标从1开始,开始的时候全部置0)记录A,B之间的DTW距离,简单的介绍一下具体的算法,这个算法其实就是一个简单的DP,状态转移公式是output[i] [j]=Min(Min(output[i-1][j],output[i][j-1]),output[i-1][j-1])+distance[i] [j];最后得到的output[5][5]就是我们所需要的DTW距离.
在Matlab中,你可以使用以下代码计算两个时间序列之间的DTW(Dynamic Time Warping)相似性度量: ```matlab function distance = dtwDistance(series1, series2) n = length(series1); m = length(series2); % 计算两个序列之间的距离矩阵 distanceMatrix = zeros(n, m); for i = 1:n for j = 1:m distanceMatrix(i, j) = (series1(i) - series2(j))^2; end end % 初始化累计距离矩阵 accumulatedCost = zeros(n, m); accumulatedCost(1, 1) = distanceMatrix(1, 1); % 计算累计距离矩阵 for i = 2:n accumulatedCost(i, 1) = distanceMatrix(i, 1) + accumulatedCost(i-1, 1); end for j = 2:m accumulatedCost(1, j) = distanceMatrix(1, j) + accumulatedCost(1, j-1); end for i = 2:n for j = 2:m accumulatedCost(i, j) = distanceMatrix(i, j) + min([accumulatedCost(i-1, j), accumulatedCost(i, j-1), accumulatedCost(i-1, j-1)]); end end % 计算最小距离路径 i = n; j = m; distance = 0; while(i > 1 && j > 1) distance = distance + distanceMatrix(i, j); if(accumulatedCost(i-1, j) == min([accumulatedCost(i-1, j), accumulatedCost(i, j-1), accumulatedCost(i-1, j-1)])) i = i - 1; elseif(accumulatedCost(i, j-1) == min([accumulatedCost(i-1, j), accumulatedCost(i, j-1), accumulatedCost(i-1, j-1)])) j = j - 1; else i = i - 1; j = j - 1; end end distance = distance + distanceMatrix(1, 1); % 返回DTW相似性度量 distance = sqrt(distance); end ``` 你可以通过将两个时间序列 `series1` 和 `series2` 作为参数传递给 `dtwDistance` 函数来计算它们之间的DTW相似性度量。注意,这里的时间序列应该是一维向量。函数将返回DTW相似性度量的结果。 请注意,这个示例代码中的DTW实现是简化的,仅用于说明目的。在实际应用中,你可能需要考虑优化的方法,以提高计算效率和处理大型时间序列数据的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值