wdtw_distance#
- wdtw_distance(x: ndarray, y: ndarray, window: float | None = None, itakura_max_slope: float | None = None, bounding_matrix: ndarray | None = None, g: float = 0.05, **kwargs: Any) float[源代码][源代码]#
计算时间序列之间的加权动态时间规整(WDTW)距离。
首次在 [1] 中提出,WDTW 增加了一个基于扭曲距离的乘法权重惩罚。这意味着相位差较小的时序序列施加的权重较小(即惩罚较小),而相位差较大的时序序列施加的权重较大(即惩罚较大)。
正式地,这可以描述为:
\[d_{w}(x_{i}, y_{j}) = ||w_{|i-j|}(x_{i} - y_{j})||\]其中 d_w 是应用了权重的距离,用于点 i, j,其中 w(|i-j|) 是两个点 x_i 和 y_j 之间的正权重。
- 参数:
- 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,边界矩阵外的索引应为无穷大。
- g: float, 默认值 = 0.
控制函数曲率(斜率)的常数;即,g 控制具有较大相位差的点的惩罚水平。
- **kwargs: 任意
额外的关键字参数。
- 返回:
- float
x 和 y 之间的 Wdtw 距离。
- 引发:
- ValueError
如果 sakoe_chiba_window_radius 不是浮点数。如果 itakura_max_slope 不是浮点数。如果提供的 x 或 y 的值不是 numpy 数组。如果 x 或 y 的值有超过 2 个维度。如果提供了度量字符串,但不是定义的有效字符串。如果提供了度量对象(类的实例)并且不继承自 NumbaDistance。如果无法确定度量类型。如果同时设置了 window 和 itakura_max_slope。
参考文献
[1]Young-Seon Jeong, Myong K. Jeong, Olufemi A. Omitaomu, 加权动态时间
时间序列分类的扭曲,模式识别,第44卷,第9期,2011年,第2231-2240页,ISSN 0031-3203,https://doi.org/10.1016/j.patcog.2010.09.022。
示例
>>> import numpy as np >>> from sktime.distances import wdtw_distance >>> x_1d = np.array([1, 2, 3, 4]) # 1d array >>> y_1d = np.array([5, 6, 7, 8]) # 1d array >>> wdtw_distance(x_1d, y_1d) 27.975712863958133
>>> 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 >>> wdtw_distance(x_2d, y_2d) 243.2106560107827