R dtw包:累积成本矩阵在路径上的某些点减少?

R dtw包:累积成本矩阵在路径上的某些点减少?,r,statistics,R,Statistics,我正在探索dtw包中实现的动态时间扭曲的结果。在做一些精神检查时,我遇到了一个我无法合理解释的结果。在沿扭曲路径的某些点上,累积距离似乎会减小。示例如下: mat= structure(c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.01,0.01,0.02,0.03,0.04,0.06,0.09,0.11,0.13,0.16,0.18,0.2,0.22,0.24,0.24,0.22,0.22,0.22,0.22,0.21,0.

我正在探索dtw包中实现的动态时间扭曲的结果。在做一些精神检查时,我遇到了一个我无法合理解释的结果。在沿扭曲路径的某些点上,累积距离似乎会减小。示例如下:

mat= structure(c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.01,0.01,0.02,0.03,0.04,0.06,0.09,0.11,0.13,0.16,0.18,0.2,0.22,0.24,0.24,0.22,0.22,0.22,0.22,0.21,0.2,0.19,0.2,0.23,0.29,0.34,0.41,0.51,0.62,0.73,0.82,0.9,0.95,1,1,1,0.92,0.92,0.89,0.89,0.84,0.79,0.7,0.53,0.37,0.23,0.17,0.13,0.11,0.09,0.08,0.07,0.07,0.07,0.07,0.07,0.07,0.08,0.08,0.08,0.09,0.1,0.13,0.15,0.19,0.22,0.27,0.29,0.34,0.35,0.36,0.35,0.38,0.37,0.37,0.32,0.3,0.26,0.24,0.21,0.19,0.17,0.15,0.14,0.12,0.1,0.09,0.09,0.08,0.08,0.07,0.07,0.07,0.07,0.06,0.06,0.06,0.05,0.05,0.05,0.05,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.03,0.04,0.04,0.04,0.03,0.03,0.03,0.04,0.04,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.01,0.01,0.01,0.02,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.1,0.12,0.12,0.13,0.14,0.15,0.17,0.19,0.2,0.21,0.22,0.24,0.23,0.24,0.26,0.3,0.32,0.33,0.35,0.39,0.44,0.49,0.55,0.61,0.67,0.71,0.76,0.83,0.9,0.97,1,0.99,0.86,0.68,0.5,0.41,0.33,0.28,0.23,0.2,0.17,0.15,0.13,0.12,0.1,0.1,0.1,0.11,0.11,0.11,0.11,0.11,0.11,0.11,0.13,0.15,0.17,0.18,0.2,0.21,0.24,0.25,0.28,0.29,0.32,0.35,0.36,0.34,0.32,0.3,0.3,0.28,0.26,0.23,0.22,0.19,0.17,0.15,0.14,0.12,0.1,0.09,0.09,0.08,0.08,0.07,0.07,0.07,0.06,0.06,0.05,0.05,0.05,0.05,0.05,0.05,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04),.Dim=c(149L,2L))
tw = dtw(mat[,1], mat[,2], keep.internals = T, step.pattern = asymmetricP05)

如果这是DP算法采用的实际路径,那么在这些点上沿该路径的累积距离如何减少


这是由于使用了类似于
不对称p05的“多步”递归。这种模式允许弯曲路径由长段组成,例如骑士的动作

为了验证单调性,你应该只考虑每个“骑士运动”的起始位置-而不是所有的细胞通过。

index1
index2
属性包含中间单元格(以提供更平滑的曲线),这可以解释您的观察结果

说服自己:(1)尝试另一种更直观的模式,如
不对称
;和(2)注意
stepsTaken
属性的长度如何不同于
index1/2

d.phi = tw$costMatrix[ cbind(tw$index1, tw$index2) ]

which(diff(d.phi) < 0)
# 45  50  53  54  61  70  72  73  80  81 101 115 117 120 124 125 129 139 184 189 191 193

plot(diff(d.phi))
i = 45:55
i1 = tw$index1[i]
i2 = tw$index2[i]
r= range(c(i1,i2))
s = r[1]:r[2]

ccm <- tw$costMatrix[s,s]
image(x=1:nrow(ccm),y=1:ncol(ccm),ccm)
text(row(ccm),col(ccm),label=round(ccm,3))
lines(i1-r[1]+1,i2-r[1]+1)