twe_distance#

twe_distance(x: ndarray, y: ndarray, window: float | None = None, itakura_max_slope: float | None = None, bounding_matrix: ndarray | None = None, lmbda: float = 1.0, nu: float = 0.001, p: int = 2, **kwargs: Any) float[源代码][源代码]#

两个时间序列之间的 Time Warp Edit (TWE) 距离。

时间扭曲编辑(TWE)距离是一种具有时间’弹性’的离散时间序列匹配的距离度量。与其他距离度量(例如DTW(动态时间扭曲)或LCS(最长公共子序列问题))相比,TWE是一种度量。其计算时间复杂度为O(n^2),但在某些特定情况下可以通过使用通道来大幅减少搜索空间。其内存空间复杂度可以减少到O(n)。它首次在[1]中提出。

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

第一个时间序列。

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

第二个时间序列。

window: float, 默认值 = 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,而边界矩阵外的索引值应为无穷大。

lmbda: float, 默认值 = 1.0

一个恒定的惩罚值,用于惩罚编辑操作。必须 >= 1.0。

nu: float, 默认值 = 0.001

一个表征弹性测量刚度的非负常数。必须大于0。

p: int, 默认值 = 2

局部成本的p-范数顺序。

**kwargs: 任何

额外的关键字参数。

返回:
浮动

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]

Marteau, P.; F. (2009). “带有刚度调整的时间扭曲编辑距离”

用于时间序列匹配”。IEEE模式分析与机器智能汇刊。31 (2): 306-318.

示例

>>> import numpy as np
>>> from sktime.distances import twe_distance
>>> x_1d = np.array([1, 2, 3, 4])  # 1d array
>>> y_1d = np.array([5, 6, 7, 8])  # 1d array
>>> twe_distance(x_1d, y_1d)
28.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
>>> twe_distance(x_2d, y_2d)
78.37353236814714