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

时间:2013-09-19 06:03:39

标签: python algorithm machine-learning pattern-matching data-mining

我试图通过DTW获得下面显示的这两个数组之间的距离。 enter image description here

我正在使用提供

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

我知道DTW会照顾"转移"。另外,从上面可以看出,mlpy.dtw_std()仅接收2个1-D阵列。所以我希望无论我如何向左/右移动曲线,函数返回的dist都不应该改变。

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

转移之前:Python mlpy.dwt_std报告dist = 14.014 enter image description here

转移后:Python mlpy.dwt_std报告dist = 38.078 enter image description here 显然,由于曲线仍然是那两条曲线,我不希望距离不同!

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

2 个答案:

答案 0 :(得分:2)

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

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

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

a=range(0,101,5) = [0,5,10,15 ... 95,100]

b=range(0,101,5) = [0,5,10,15 ... 95,100]。

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

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

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

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

(PS:请不要忘记upvote回答:D)。感谢。

答案 1 :(得分:1)

显然,曲线不相同,因此距离函数不能为0(否则,根据定义,它不是距离)。

什么是“相对较大”?距离可能不是无限的,是吗?

140个时间点,每个点都有一个小的增量,这仍然是一个非零数字。

“纽约”到“北京”的距离约为11018公里。或1101800000毫米。

到半人马座阿尔法星的距离很小,仅为4.34 lj。那是我们最近的其他恒星系统...

与非相似系列的距离进行比较;那个距离应该大得多。