erp_distance#
- erp_distance(x: ndarray, y: ndarray, window: float | None = None, itakura_max_slope: float | None = None, bounding_matrix: ndarray | None = None, g: float = 0.0, **kwargs: Any) float [source]#
计算两个时间序列之间的带真实惩罚的编辑距离(ERP)。
ERP,最早在 [1] 中提出,试图通过更好地考虑索引如何在成本矩阵中传递来对齐时间序列。通常在 DTW 成本矩阵中,如果找不到对齐,则会传递前一个值。ERP 则提出了“间隙”或没有匹配点的序列的概念。这些间隙会根据它们与“g”的距离受到惩罚。
- 参数:
- 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 (2维数组,大小为 mxn,其中 m 是 len(x),n 是 len(y)),
默认为 None
要使用的自定义边界矩阵。如果已定义,则忽略其他 lower_bounding 参数。矩阵的结构应使边界内的索引值为 0.,边界外的索引值为无穷大。
- g: float, 默认为 0.
用于惩罚间隙的参考值。
- kwargs: Any
额外关键字参数。
- 返回:
- float
x 和 y 之间的 ERP 距离。
- 引发:
- ValueError
如果 sakoe_chiba_window_radius 不是浮点数。如果 itakura_max_slope 不是浮点数。如果提供的 x 或 y 值不是 numpy 数组。如果 x 或 y 的值超过 3 维。如果提供了度量字符串,但它不是一个已定义的有效字符串。如果提供了度量对象(类实例),但它不是继承自 NumbaDistance。如果无法确定度量类型。如果 g 不是浮点数。如果同时设置了 window 和 itakura_max_slope。
参考文献
[1]Lei Chen 和 Raymond Ng. 2004。《论 Lp 范数与编辑距离的结合》。
- 载于《第三十届超大型数据库国际会议论文集》
第 30 卷 (VLDB ‘04)。VLDB Endowment,第 792-803 页。
示例
>>> import numpy as np >>> from sktime.distances import erp_distance >>> x_1d = np.array([1, 2, 3, 4]) # 1d array >>> y_1d = np.array([5, 6, 7, 8]) # 1d array >>> erp_distance(x_1d, y_1d) 16.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 >>> erp_distance(x_2d, y_2d) 45.254833995939045