ddtw_distance#

ddtw_distance(x: ndarray, y: ndarray, window: float | None = None, itakura_max_slope: float | None = None, bounding_matrix: ndarray | None = None, compute_derivative=None, **kwargs: Any) float[源代码][源代码]#

计算时间序列之间的导数动态时间规整(DDTW)距离。

DDTW 是 DTW 的一种改编,最初在 [1] 中提出。DDTW 试图通过更好地考虑时间序列的 ‘形状’ 来改进 dtw。这是通过将 y 轴数据点视为 ‘形状’ 的高级特征来实现的。为此,首先取序列的一阶导数,然后使用这个导出的序列进行 dtw 计算。

默认使用的派生是:

\[D_{x}[q] = \frac{{}(q_{i} - q_{i-1} + ((q_{i+1} - q_{i-1}/2)}{2}\]

其中 q 是原始时间序列,d_q 是派生的时间序列。

参数:
x: np.ndarray (1d 或 2d 数组)

第一个时间序列。

y: np.ndarray (1d 或 2d 数组)

第二个时间序列。

window: float, defaults = None

这是Sakoe-Chiba窗口的半径(如果使用Sakoe-Chiba下界)。值必须在0.和1.之间。

itakura_max_slope: float, 默认值 = None

Itakura 平行四边形的斜率梯度(如果使用 Itakura 平行四边形下界)。值必须在 0. 和 1. 之间。

bounding_matrix: np.ndarray (2d 大小为 mxn 的数组,其中 m 是 len(x),n 是 len(y))

defaults = None

自定义使用的边界矩阵。如果定义了,则忽略其他 lower_bounding 参数。矩阵的结构应使得被考虑在边界内的索引值为 0,而边界矩阵外的索引值应为无穷大。

compute_derivative: Callable[[np.ndarray], np.ndarray],

defaults = 平均坡度差异

计算导数的可调用对象。如果没有提供,则使用两点间斜率的平均值。

**kwargs: 任意

额外关键字参数。

返回:
浮动

x 和 y 之间的 Ddtw 距离。

引发:
ValueError

如果 sakoe_chiba_window_radius 不是浮点数。如果 itakura_max_slope 不是浮点数。如果提供的 x 或 y 的值不是 numpy 数组。如果 x 或 y 的值有超过 2 个维度。如果提供了度量字符串,并且不是定义的有效字符串。如果提供了度量对象(类的实例)并且不继承自 NumbaDistance。如果解析的度量或计算导数的可调用对象没有经过 no_python 编译。如果无法确定度量类型。如果计算导数的可调用对象没有经过 no_python 编译。如果同时设置了窗口和 itakura_max_slope。

参考文献

[1]

Keogh, Eamonn & Pazzani, Michael. (2002). 导数动态时间规整。第一届SIAM数据挖掘国际会议。1. 10.1137/1.9781611972719.1.

示例

>>> import numpy as np
>>> from sktime.distances import ddtw_distance
>>> x_1d = np.array([1, 2, 3, 4])  # 1d array
>>> y_1d = np.array([5, 6, 7, 8])  # 1d array
>>> ddtw_distance(x_1d, y_1d) 
0.0
>>> x_2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])  # 2d array
>>> y_2d = np.array([[9, 10, 11, 12], [13, 14, 15, 16]])  # 2d array
>>> ddtw_distance(x_2d, y_2d) 
0.0