twe_distance#
- twe_distance(x: ndarray, y: ndarray, window: float | None = None, itakura_max_slope: float | None = None, bounding_matrix: ndarray = None, lmbda: float = 1.0, nu: float = 0.001, p: int = 2, **kwargs: Any) float [source]#
两个时间序列之间的时间扭曲编辑距离(TWE)。
时间扭曲编辑(TWE)距离是一种用于离散时间序列匹配并具有时间“弹性”的距离度量。与其他距离度量(例如 DTW (动态时间规整) 或 LCS (最长公共子序列问题))相比,TWE 是一个度量。其计算时间复杂度为 O(n^2),但在某些特定情况下,通过使用走廊来减小搜索空间,可以大幅降低复杂度。其内存空间复杂度可以降低到 O(n)。它最初在 [1] 中提出。
- 参数:
- 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 平行四边形下界,此参数表示斜率的梯度。值必须在 0 到 1 之间。
- bounding_matrix: np.ndarray (大小为 mxn 的 2维数组,其中 m 是 len(x),n 是 len(y)),
默认值 = None
要使用的自定义边界矩阵。如果已定义,则忽略其他 lower_bounding 参数。矩阵的结构应使边界内的索引值为 0,边界外的索引值为无穷大。
- lmbda: float, 默认值 = 1.0
一个常数惩罚项,用于惩罚编辑操作。必须 >= 1.0。
- nu: float, 默认值 = 0.001
一个非负常数,用于表征弹性 TWE 度量的刚度。必须 > 0。
- p: int, 默认值 = 2
局部成本的 p-范数阶数。
- kwargs: Any
额外关键字参数。
- 返回值:
- float
x 和 y 之间的 TWE 距离。
- 抛出:
- 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). “Time Warp Edit Distance with Stiffness Adjustment
for Time Series Matching”. IEEE Transactions on Pattern Analysis and Machine Intelligence. 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) np.float64(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) np.float64(78.37353236814714)