tslearn.metrics.lcss_path_from_metric¶
- tslearn.metrics.lcss_path_from_metric(s1, s2=None, eps=1, metric='euclidean', global_constraint=None, sakoe_chiba_radius=None, itakura_max_slope=None, be=None, **kwds)[source]¶
计算使用用户定义的距离度量在多维时间序列之间的最长公共子序列(LCSS)相似度,并返回路径和相似度。
拥有两个时间序列之间最长公共子序列的长度,相似度计算为该值相对于最短时间序列长度的百分比。
不要求两个时间序列的大小相同,但它们必须具有相同的维度。LCSS最初在[1]中提出。
metric 的有效值与 scikit-learn 的 pairwise_distances 函数相同,即一个字符串(例如“euclidean”、“sqeuclidean”、“hamming”)或用于计算成对距离的函数。有关可用指标的更多信息,请参阅 scikit 和 scipy 文档。
- Parameters:
- s1array-like, shape=(sz1, d) or (sz1,) if metric!=”precomputed”, (sz1, sz2) otherwise
一个时间序列或样本之间的成对距离数组。 如果形状是(sz1,),则假定时间序列是单变量的。
- s2array-like, shape=(sz2, d) or (sz2,), optional (default: None)
第二个时间序列,仅在 metric != “precomputed” 时允许。 如果形状为 (sz2,),则假定时间序列是单变量的。
- epsfloat (default: 1.)
最大匹配距离阈值。
- metricstring or callable (default: “euclidean”)
用于计算s1和s2中每个点之间的成对距离的函数。 如果metric是“precomputed”,则假定s1为距离矩阵。 如果metric是其他字符串,则必须是与sklearn.metrics.pairwise_distances兼容的选项之一。 另外,如果metric是可调用函数,则在s1和s2的行对上进行调用。该可调用函数应接受两个一维数组作为输入,并返回一个表示它们之间距离的值。
- global_constraint{“itakura”, “sakoe_chiba”} or None (default: None)
全局约束以限制LCSS的可接受路径。
- sakoe_chiba_radiusint or None (default: None)
用于Sakoe-Chiba带全局约束的半径。 如果为None且global_constraint设置为“sakoe_chiba”,则使用半径为1。 如果同时设置了sakoe_chiba_radius和itakura_max_slope, 则使用global_constraint来推断在这两者中使用哪个约束。 在这种情况下,如果global_constraint不对应任何全局约束, 则会引发RuntimeWarning并且不使用任何全局约束。
- itakura_max_slopefloat or None (default: None)
Itakura平行四边形约束的最大斜率。 如果为None且global_constraint设置为“itakura”,则使用最大斜率为2。 如果同时设置了sakoe_chiba_radius和itakura_max_slope, 则使用global_constraint来推断使用哪种约束。在这种情况下,如果global_constraint不对应任何全局约束,则会引发RuntimeWarning并且不使用任何全局约束。
- beBackend object or string or None
后端。如果 be 是类 NumPyBackend 的实例或字符串 “numpy”,则使用 NumPy 后端。 如果 be 是类 PyTorchBackend 的实例或字符串 “pytorch”,则使用 PyTorch 后端。 如果 be 是 None,则后端由输入数组决定。 更多信息请参阅我们的 专用用户指南页面。
- **kwds
传递给sklearn pairwise_distances以计算成对距离的额外参数。
- Returns:
- list of integer pairs
匹配路径表示为索引对的列表。在每一对中,第一个索引对应于s1,第二个索引对应于s2。
- float
相似度分数。
注释
通过使用如上所示的平方欧几里得距离度量,输出路径和相似性与使用lcss_path(使用欧几里得距离)获得的结果相同,这仅仅是因为平方距离的总和仍未达到匹配阈值。此外,与动态时间规整及其变体不同,LCSS路径不需要是连续的。
参考文献
[1]M. Vlachos, D. Gunopoulos, 和 G. Kollios. 2002. “发现相似的多维轨迹”,在第十八届国际数据工程会议(ICDE '02)的会议录中。IEEE计算机协会,美国,673页。
示例
让我们创建2个numpy数组来包装:
>>> import numpy as np >>> rng = np.random.RandomState(0) >>> s1, s2 = rng.rand(5, 2), rng.rand(6, 2)
可以通过传递一个指示要传递给scikit-learn pairwise_distances的指标的字符串来完成包装:
>>> lcss_path_from_metric(s1, s2, ... metric="sqeuclidean") ([(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)], 1.0)
或者通过定义一个自定义的距离函数:
>>> sqeuclidean = lambda x, y: np.sum((x-y)**2) >>> lcss_path_from_metric(s1, s2, metric=sqeuclidean) ([(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)], 1.0)
或者通过使用预先计算的距离矩阵作为输入:
>>> from sklearn.metrics.pairwise import pairwise_distances >>> dist_matrix = pairwise_distances(s1, s2, metric="sqeuclidean") >>> lcss_path_from_metric(dist_matrix, ... metric="precomputed") ([(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)], 1.0)