时间序列预测之--时序误差处理(1)

DTW、TDI、DILATE

通过调整损失函数来处理时延问题,最早处理这种time difference问题的可以追溯到上个世纪70年代的Spoken Word Recognition的应用。在这种语音识别的问题中,时序问题是提高准确性的最重要的因素。我去看了一篇相应的文章,《Dynamic Programming Algorithm Optimization for Spoken Word Recognition》,也就是最原始的DTW。

但是基于这种Spoken Word Recognition应用,我还不理解整体的处理方式,我看完之后没法将文中提出的方案和文章研究的实际问题结合起来,理解不到位,所以先放着去看了别的应用。另一个在DILATE(NIPS2019)中提到的是TDI。

先回看一下DILATE中的temporal loss,这个temporal loss是基于TDI改变过来的,所以我又去看了TDI的相关文章,在一篇文章中,对TDI有着详细的描述。这篇文章也是用TDI来做能源预测的。

《Assessing energy forecasting inaccuracy by simultaneously considering temporal and absolute errors》

TDI的思想也是源于DTW。时序上的滞后其实是一种时序的畸变(temporal distortion),TDI是一种通过动态规划进行畸变的调整。如下图所示,正确地进行畸变的调整,可以改善误差。目前这篇文章我还没吃透,后面的理论有点复杂,我看到的这一部分TDI,应该是等预测结果出来之后才能进行调整。以下是实际效果。

时间序列预测之--时序误差处理(1)_第1张图片

但是在DILATE这篇文章中,将TDI改写到损失函数中,并不能提升曲线拟合的效果,看一下DILATE的结果:
时间序列预测之--时序误差处理(1)_第2张图片

其实DILATE的temporal loss并没有改善MSE。

TDI算法

先是定义一下预测值和真实值, T = ( T 1 , . . . , T i , . . , T N ) , R = ( R 1 , . . . , R j , . . , R N ) {T=(T_1,...,T_i,..,T_N)},{R=(R_1,...,R_j,..,R_N)} T=(T1,...,Ti,..,TN),R=(R1,...,Rj,..,RN)

TDI大致的意思:比如下面这张图,横坐标是预测值的时间轴,纵坐标是真实值的时间轴。对应的 i , j {i,j} i,j 分别是横纵坐标。网格上的每个点代表着, T i {T_i} Ti R j {R_j} Rj是相关的,换句话说就是, T i {T_i} Ti应该是 j {j} j 时刻的预测值,只不过我们预测的时序发生了偏移。全部的相关点连起来就是一条路线,蓝线就是最理想的情况,每个时间点都没发生偏移。通过找到最优的匹配情况,将这些点连起来就成为一条最优路径。只要根据这条路径,做一些调整,就能修饰整体的曲线拟合情况。

时间序列预测之--时序误差处理(1)_第3张图片
以上是大概的流程,接下来看看具体情况。

1)代价定义

d ( T i , R j ) = ∣ T i − R j ∣ {d(T_i,R_j)=|T_i-R_j|} d(Ti,Rj)=TiRj,简写为 d ( i , j ) {d(i,j)} d(i,j)。两个序列间的MAE如下:

在这里插入图片描述

2)路径定义

路径=匹配,最优路径=最优匹配结果。 w = ( w 1 , . . . , w l , . . . , w k ) , w l = ( i l , j l ) {w=(w_1,...,w_l,...,w_k),w_l=(i_l,j_l)} w=(w1,...,wl,...,wk),wl=(il,jl)。路径并不是随便取出来的,有以下几个约束:

  • 边界约束: w 1 = ( 1 , 1 ) , w k = ( N , N ) {w_1=(1,1)},w_k=(N,N) w1=(1,1),wk=(N,N)

  • 单调性: i l − i l − 1 ≥ 0 , j l − j l − 1 ≥ 0 {i_l-i_{l-1}≥0,j_l-j_{l-1}≥0} ilil10,jljl10,这一点保证了最后能走到 ( N , N ) {(N,N)} (N,N)

  • 连续性: i l − i l − 1 ≤ 1 , j l − j l − 1 ≤ 1 {i_l-i_{l-1}≤1,j_l-j_{l-1}≤1} ilil11,jljl11,这一点是为了保证不会出现非常大的跳跃,如果出现非常大的跳跃,就会导致调整过头。比如时刻1的值跟时刻100的值相等,但这个可能因为预测的原始值就是相等的。其实这是不可能得,预测不会偏差这么多,顶多在两三个时刻内有偏差。并且文中还提到,连续性的约束可以放宽,不一定非得局限在相邻时刻,可以是附近的三四个时刻之内。

    根据以上约束,大约能知道一个路径是什么样的,其实这样也存在一些问题,比如 R 2 {R_2} R2 T 2 , T 3 {T_2,T_3} T2,T3都相关,就还是有点问题。

时间序列预测之--时序误差处理(1)_第4张图片

3)代价计算

在这里插入图片描述

​ 对于所有的可能路径而言,都计算一个代价,找出代价最小的路径,就是最优路径。

在这里插入图片描述

4)求解过程

动态规划求解最优路径。定义动态规划数组 D {D} D,是一个N×N的数组。

时间序列预测之--时序误差处理(1)_第5张图片
每一个选项代表一种步进方式:

时间序列预测之--时序误差处理(1)_第6张图片
通过求取每一步的最小值,获得最后的最小值,获得这个最小值的路径就是最优路径。

5)序列调整

​ 调整主要使用插值函数进行调整。

在这里插入图片描述
在这里插入图片描述

你可能感兴趣的:(pytorch,神经网络)