edr_distance#

edr_distance(x: ndarray, y: ndarray, window: float | None = None, itakura_max_slope: float | None = None, bounding_matrix: ndarray | None = None, epsilon: float = None, **kwargs: Any) float[source]#

计算两条时间序列之间的实数序列编辑距离(EDR)。

EDR 计算必须从 x 和 y 中删除的最小元素数量(以百分比表示),以便剩余信号元素之间的距离总和在容差 (epsilon) 范围内。EDR 最初在 [1] 中提出。

返回的值介于每条时间序列的 0 到 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 数组), 默认为 None

要使用的自定义边界矩阵。如果已定义,则忽略其他 lower_bounding 参数。矩阵的结构应使得边界内考虑的索引值为 0.,边界外的索引值为无穷大。

epsilonfloat, 默认为 None

匹配阈值,用于确定两个子序列是否足够接近而被视为“共同”。如果未指定,根据原始论文,epsilon 设置为最大标准差的四分之一。

kwargs: Any

额外的关键字参数。

返回值:
float

x 和 y 之间的 EDR 距离。值介于 0.0 和 1.0 之间,其中 0.0 表示时间序列完全匹配(即它们相同),1.0 表示没有匹配的子序列。

引发:
ValueError

如果 sakoe_chiba_window_radius 不是浮点数。如果 itakura_max_slope 不是浮点数。如果提供的 x 或 y 值不是 numpy 数组。如果 x 或 y 的维度超过 3。如果提供的指标字符串不是定义的有效字符串。如果提供的指标对象(类实例)没有继承自 NumbaDistance。如果无法确定指标类型。如果同时设置了 window 和 itakura_max_slope。

参考文献

[1]

Lei Chen, M. Tamer Özsu, and Vincent Oria. 2005. Robust and fast similarity

search for moving object trajectories. In Proceedings of the 2005 ACM SIGMOD international conference on Management of data (SIGMOD ‘05). Association for Computing Machinery, New York, NY, USA, 491-502. DOI:https://doi.org/10.1145/1066157.1066213

示例

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