继续计算两个时间序列间的soft dtw
时间: 2023-05-26 20:05:22 浏览: 53
在继续计算两个时间序列间的soft dtw之前,我们需要了解一些参数和概念:
- Gamma:soft dtw的调节参数,用于平衡dtw路径长度和路径惩罚项的权重。Gamma越小,路径长度对距离的影响越大,路径惩罚项的影响越小,软化程度越低;Gamma越大,路径长度对距离的影响越小,路径惩罚项的影响越大,软化程度越高。
- Sigma:Gaussian核函数的方差参数,用于计算距离矩阵。
- Delta:相邻时间步之间的时间跨度,用于计算距离矩阵。
- 贪心策略:定义了在计算dtw过程中路径的选择方式。有两种贪心策略可选:1)dtw1策略,即每次只能向右、向下或右下移动一步;2)dtw2策略,即每次可以向右、向下或右下移动多步,但是只能从上一行、左侧或左上方的格子中选择。
接下来,我们可以按以下步骤计算两个时间序列间的soft dtw:
1. 计算距离矩阵
我们可以使用Gaussian核函数计算两个时间序列间的距离矩阵。假设我们有两个时间序列X和Y,其长度分别为n和m。则距离矩阵可以表示为:
D(i,j) = ||X(i) - Y(j)||^2
其中,i和j分别表示时间序列X和Y中的时间步位置。
为了计算距离矩阵,我们需要设定核函数的方差参数sigma和相邻时间步的时间跨度delta。则Gaussian核函数可以表示为:
K(i,j) = exp(-D(i,j)/(2*sigma^2*delta^2))
其中,sigma和delta都是超参数。
2. 计算累计距离矩阵
根据dtw的定义,我们可以使用动态规划算法计算两个时间序列的累计距离矩阵。在soft dtw中,我们需要将计算过程中的硬约束条件替换成软约束条件,即路径惩罚项。假设我们有两个时间序列X和Y,以及距离矩阵D和Gamma作为输入,则累计距离矩阵可以使用以下公式计算:
s(i,j) = D(i,j) + Gamma * K(i-1,j-1) * s(i-1,j-1) + Gamma * K(i,j-1) * s(i,j-1) + Gamma * K(i-1,j) * s(i-1,j)
其中,s(i,j)表示从X(1)到X(i)和从Y(1)到Y(j)的最小路径累计距离,K(i,j)表示Gaussian核函数的值。
3. 计算路径
在soft dtw中,路径的选择方式取决于贪心策略的选择。在本例中,我们选择了dtw1策略。假设我们已经计算出累计距离矩阵s,则路径可以使用以下公式计算:
D_soft = s(n,m)
k = n+m-2
path = [(n,m)]
while k > 0:
i, j = path[-1]
if i == 1 and j > 1:
path.append((i, j-1))
elif i > 1 and j == 1:
path.append((i-1, j))
else:
prev = [(i-1, j-1), (i-1, j), (i, j-1)]
prev_s = [s[p[0], p[1]] for p in prev]
min_index = np.argmin(prev_s)
path.append(prev[min_index])
k -= 1
其中,D_soft表示soft dtw距离,path表示路径。
4. 计算梯度
为了进行梯度下降优化,我们需要计算soft dtw距离关于距离矩阵D的梯度。根据链式法则,我们可以将该梯度分解为以下两个部分:
- 距离矩阵D关于s(i,j)的梯度
- s(i,j)关于累计距离矩阵s的梯度
由于距离矩阵D是对称的,我们只需要计算上三角部分的梯度即可。根据soft dtw的定义和求导法则,上述两个部分的梯度可以表示为:
grad_D(i,j) = 2 * Gamma * (s(i-1,j-1) * K(i-1,j-1) + s(i,j-1) * K(i,j-1) + s(i-1,j) * K(i-1,j)) * (X(i) - Y(j))
grad_s(i,j) = Gamma * K(i,j) * (grad_D(i,j) + grad_s(i-1,j-1) + grad_s(i,j-1) + grad_s(i-1,j))
其中,grad_D(i,j)表示距离矩阵D关于s(i,j)的梯度,grad_s(i,j)表示s(i,j)关于累计距离矩阵s的梯度,grad_D和grad_s都是需要计算的梯度。
5. 进行梯度下降优化
最后,我们可以使用梯度下降算法优化距离矩阵D,以使得soft dtw距离更接近于真实距离。在每一次更新距离矩阵之前,我们需要重新计算累计距离矩阵和路径。
更新距离矩阵的公式如下:
D(i,j) -= learning_rate * grad_D(i,j)
其中,learning_rate是学习率,需要手动设定。
至此,我们完成了两个时间序列间的soft dtw计算,并得到了优化后的距离矩阵D。