编程语言
首页 > 编程语言> > python – mlpy – 动态时间扭曲取决于x?

python – mlpy – 动态时间扭曲取决于x?

作者:互联网

我试图通过DTW获得下面显示的这两个数组之间的距离.

我正在使用提供的Python mlpy包

dist, cost, path = mlpy.dtw_std(y1, y2, dist_only=False)

据我所知,DTW确实照顾了“转移”.另外,从上面可以看出,mlpy.dtw_std()只接受2个1-D数组.所以我希望无论我如何左/右移动我的曲线,函数返回的dist都不会改变.

然而,在将我的绿色曲线向右移动一点之后,mlpy.dtw_std()返回的dist会发生变化!

在转移之前:Python mlpy.dwt_std报告dist = 14.014

转移后:Python mlpy.dwt_std报告dist = 38.078

显然,由于曲线仍然是那两条曲线,我不认为距离会有所不同!

为什么会这样?出了什么问题?

解决方法:

让我重申我的理解,如果我在任何地方出错,请纠正我.我观察到,在你的两个地块中,你的蓝色1D系列保持相同,而绿色则被拉伸.你是如何做到的,你在2013年9月19日9:36的帖子中解释过它.你的前提是,因为(1)DTW’照顾’时移;(2)你正在做的所有事情是延长一个时间序列长度,不影响y值,(推理:)你期望距离保持不变.

[(1),(2)]和[(推理)]之间有一点缺失的联系.也就是说,与映射相对应的单个距离值会随着您更改信号本身而发生变化.这将导致整体距离计算的差异.绘制翘曲路径,成本网格以便自己查看.

让我们看一个过于简单的案例……


 a =范围(0,101,5)= [0,5,10,15 … 95,100]

和b =范围(0,101,5)= [0,5,10,15 … 95,100].

现在直观地说,你/我希望2个信号之间一一对应(用于DTW映射),并且所有映射的距离都是0,信号看起来相同.

现在如果我们做,b =范围(0,101,4)= [0,4,8,12 … 96,100],
a和b之间的DTW映射仍然会以0映射到b的0开始,并以100的结束映射到b的100(边界约束).此外,由于DTW’负责’时移,我还希望两个信号中的20,40,60和80相互映射. (我没有试过DTWing这两个,从直觉上说,所以请检查.根据允许的步骤模式/全局限制,几乎不可能发生非直观的扭曲,但让我们直观的扭曲易于理解/简单的时刻).

对于剩余的数据点,显然,对应于映射的距离现在是非零的,因此总距离也是非零的.我们的距离/总成本值已从零变为非零值.

现在,当我们的信号过于简单,线性增加时就是这种情况.想象一下,当你拥有现实生活中非单调的信号,并且需要在它们之间找到时间扭曲时,会出现变化.

标签:python,algorithm,pattern-matching,machine-learning,data-mining
来源: https://codeday.me/bug/20190629/1325343.html