dtw_distance#
- dtw_distance(x: ndarray, y: ndarray, window: float | None = None, itakura_max_slope: float | None = None, bounding_matrix: ndarray = None, **kwargs: Any) float [source]#
计算两个时间序列之间的动态时间规整 (DTW) 距离。
DTW 最初由 [1] 提出,是一种弹性距离度量,即通过时间轴畸变 [2] 重新对齐(规整)两个时间序列以使其最佳匹配后计算出的距离。
此函数仅计算以下情况的时间规整距离:* 序列,忽略时间索引 * 两个等长的时间序列 * 欧几里得成对距离
对于不等长的时间序列,请使用带有时间规整对齐器(例如
sktime.aligners.AlignerDTW
)的sktime.dists_kernels.DistFromAligner
。要使用任意成对距离,请使用sktime.aligners.AlignerDTWfromDist
。数学上,对于两个序列 :math:’mathbf{a}={a_1,a_2,ldots,a_m}’ 和 :math:’mathbf{b}={b_1,b_2,ldots, b_n}’,(为简单起见假设长度相等),DTW 首先计算序列 :math:’mathbf{a}’ 和 :math:’mathbf{b}’ 之间的成对距离矩阵 :math:’M( mathbf{a},mathbf{b})’,即 :math:’m times n’ 矩阵,其中对于选定的距离度量 \(d: \mathbb{R}^h \times \mathbb{R}^h \rightarrow \mathbb{R}\),:math:’M_{i,j} = d(a_i, b_j)’。在此评估器中,使用平方欧几里得距离,即 \(d(x, y):= (x-y)^2\)。规整路径 .. math:: P=((i_1, j_1), (i_2, j_2), ldots, (i_s, j_s)) 是一个有序的索引元组 \(i_k \in \{1, \dots, m\}, j_k \in \{1, \dots, n\}\),它定义了矩阵 :math:’M’ 的遍历路径。此实现对规整路径假定:* 闭合路径:\(i_1 = j_1 = 1\);\(i_s = m, j_s = n\) * 单调路径:对于所有 \(k\),\(i_k \le i_{k+1}, j_k \le j_{k+1}\) * 严格单调路径:对于所有 \(k\),\((i_k, j_k) \neq (i_{k+1}, j_{k+1})\) 序列之间的 DTW 路径是遍历 :math:’M’ 的路径,该路径在所有有效路径(满足上述假设)中最小化给定序列的总距离。正式地:长度为 :math:’s’ 的规整路径 :math:’P’ 的距离为 .. math:: D_P(mathbf{a},mathbf{b}) = sum_{k=1}^s M_{i_k,j_k}. 如果 :math:’mathcal{P}’ 是所有可能路径的集合,则 DTW 路径 :math:’P^*’ 是其中距离最小的路径: .. math:: P^* = argmin_{Pin mathcal{P}} D_{P}(mathbf{a},mathbf{b}). 两个序列 :math:’mathbf{a},mathbf{b}’ 之间的 DTW 距离是最小规整路径距离: .. math:: d_{dtw}(mathbf{a}, mathbf{b}) = min_{Pin mathcal{P}} D_{P}(mathbf{a},mathbf{b}) = D_{P^*}(mathbf{a},mathbf{b}). 最优规整路径 $P^*$ 可以通过动态规划精确找到。这可能是一个耗时的操作,因此通常对允许的规整量施加限制。这通过
bounding_matrix
结构实现,该结构通过掩码限制允许的规整。常见的边界策略包括 Sakoe-Chiba 带 [R93974dace1e5-3] 和 Itakura 平行四边形 [4_]。Sakoe-Chiba 带创建一个沿 :math:’M’ 对角线具有相同宽度的规整路径窗口。Itakura 平行四边形允许序列开始或结束处的规整少于中间部分的规整。如果使用多元时间序列调用此函数,请注意矩阵 :math:’M’ 是使用多元平方欧几里得距离计算的,\(d(x, y):= (x-y)^2\) = sum_{i=1}^h (x_i - y_i)^2。这有时被称为 DTW 的“依赖”版本,即 DTW_D,参见 [R93974dace1e5-5]。
- 参数:
- x: np.ndarray (1维或2维数组)
第一个时间序列。
- y: np.ndarray (1维或2维数组)
第二个时间序列。
- window: float, 默认值 = None
浮点数,表示 Sakoe-Chiba 窗口的半径(如果使用 Sakoe-Chiba 下界)。值必须介于 0. 和 1 之间。
- itakura_max_slope: float, 默认值 = None
Itakura 平行四边形的斜率梯度(如果使用 Itakura 平行四边形下界)。值必须介于 0. 和 1 之间。
- bounding_matrix: np.ndarray (大小为 mxn 的2维数组,其中 m 是 len(x),n 是 len(y)),
默认值 = None
要使用的自定义边界矩阵。如果定义,则忽略其他 lower_bounding 参数。矩阵的结构应使得边界内的索引值为 0.,边界外的索引值为无穷大。
- kwargs: Any
额外的 kwargs。
- 返回:
- float
x 和 y 之间的 Dtw 距离。
- 引发:
- ValueError
如果 sakoe_chiba_window_radius 不是浮点数。如果 itakura_max_slope 不是浮点数。如果提供的 x 或 y 值不是 numpy 数组。如果 x 或 y 值维度超过 2。如果提供的度量字符串无效。如果提供了度量对象(类的实例)但未继承自 NumbaDistance。如果解析的度量未进行 no_python 编译。如果无法确定度量类型。如果同时设置了 window 和 itakura_max_slope。
参考文献
[1]H. Sakoe, S. Chiba, “Dynamic programming algorithm optimization for spoken word recognition,” IEEE Transactions on Acoustics, Speech and Signal Processing, vol. 26(1), pp. 43–49, 1978.
[2]Ratanamahatana C and Keogh E.: Three myths about dynamic time warping data
mining Proceedings of 5th SIAM International Conference on Data Mining, 2005 .. [R93974dace1e5-3] Sakoe H. and Chiba S.: Dynamic programming algorithm optimization for spoken word recognition. IEEE Transactions on Acoustics, Speech, and Signal Processing 26(1):43-49, 1978. .. [R93974dace1e5-4] Itakura F: Minimum prediction residual principle applied to speech recognition. IEEE Transactions on Acoustics, Speech, and Signal Processing 23( 1):67-72, 1975. .. [R93974dace1e5-5] Shokoohi-Yekta M et al.: Generalizing DTW to the multi-dimensional case requires an adaptive approach. Data Mining and Knowledge Discovery, 31, 1-31 (2017).
示例
>>> import numpy as np >>> from sktime.distances import dtw_distance >>> x_1d = np.array([1, 2, 3, 4]) # 1d array >>> y_1d = np.array([5, 6, 7, 8]) # 1d array >>> dtw_distance(x_1d, y_1d) np.float64(58.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 >>> dtw_distance(x_2d, y_2d) np.float64(512.0)