时序相似性方法盘点:DTW、矩阵轮廓与学习表示该怎么选
从比较对象、数学假设到 Python 工具。 核查日期:2026 年 10 月 29 日。English
想逐步查看一种方法如何计算,可以打开方法动图详解:现有方法页的 137 个条目均配有 GIF、静态总结、四步说明、明确的示例输入和解释边界,可按方法名称查找。
两条曲线可以形状一致,实际能耗相差很大;两段记录可以包含相同的短事件,整体变化却完全不同;两个数据集也可以具有相近的频谱,却来自不同的生成机制。选择相似性方法,首先需要说明我们关心其中哪一种关系。
本文采用一个明确的选型顺序:先确定比较对象,再决定哪些差异必须保留,最后选择表示、比较规则与实现。 这是本文提出的决策框架。下文的方法介绍依据原始论文与官方文档,本文没有开展新的速度或精度排行榜实验。
一、先把“匹配”定义清楚
| 你要回答的问题 | 实际比较对象 | 应当评价的输出 |
|---|---|---|
| 哪段完整记录与这段记录相似? | 整条序列,或事先明确切分的完整过程 | 候选记录排序及其相关性 |
| 这个短模式在哪里再次出现? | 查询片段与候选子序列 | 匹配位置、持续时间和距离 |
| 哪些数据集具有可比较的时间结构? | 序列集合的分布或结构摘要 | 具体哪些性质相近、哪些性质不同 |
| 模型应当最小化什么误差? | 预测与观测,或学习到的表示 | 优化行为及下游任务表现 |
整段平均得分可能掩盖一个很短的事件;子序列搜索可能在整体差异很大的记录中找到局部匹配;数据集画像能够支持探索性分组,但单凭画像无法证明具体轨迹一一对应。把输出区分清楚,才能解释算法回答了什么。aeon 的相似性搜索接口也明确区分整序列搜索与子序列搜索。
一个可操作的需求可以写成:“检索同一种设备运行周期,允许适度的速度变化,同时保留正常振动与过强振动之间的区别。”这句话同时给出了需要容忍的变化,以及预处理必须保留的差异。
二、每一种不变性都会舍弃信息
对非常数序列 $x$,正比例缩放和平移满足 $z(3x+7)=z(x)$。这是减去均值、除以标准差的直接结果。如果传感器增益和零点偏移与任务无关,这个性质很有用;如果目标是比较绝对负荷,它恰好丢失了需要保留的信息。
| 处理或比较方式 | 可能弱化的信息 | 使用前需要回答的问题 |
|---|---|---|
| 每条序列分别做 z 标准化 | 平均水平、正比例幅度差异 | 绝对水平或波动幅度是否决定匹配? |
| 全局位移匹配 | 整个波形共同提前或延后 | 事件发生时间本身是否重要? |
| 局部时间规整 | 部分局部持续时间和速度差异 | 哪些时间变形在物理上可以接受? |
| 幅值频谱比较 | 傅里叶相位 | 事件顺序和准确发生时刻是否重要? |
| 统计特征比较 | 特征没有保留的细节 | 关键反例能否具有相同的这些摘要? |
| 学习表示 | 训练与池化压缩掉的差异 | 本次检索要区分的信息是否还存在? |
这里还有一个容易忽略的数学边界:若表示映射 $\phi$ 把两条不同序列映成同一个向量,它们在特征空间的欧氏距离就是零。欧氏距离仍然是特征空间上的度量,但无法分开原序列空间中的所有对象。这个性质限定了结果能够支持的结论。
三、主要方法家族分别比较什么
逐点距离与相关系数
当观测位于共同时间网格时,欧氏距离或绝对误差保留每个对应位置上的数值差异。相关系数描述中心化与尺度处理后的关联程度,不能直接衡量绝对数值的一致性。
对于等长、非常数、采用总体方差进行标准化的两个向量,有 $|z(x)-z(y)|^2=2n(1-r)$。因此在这些条件下,标准化欧氏距离与 Pearson 相关系数给出的排序等价。缺失值处理和标准化约定发生变化时,需要重新核对条件。
DTW 与受约束 DTW
DTW 在允许的单调对齐路径中搜索较小的匹配代价。局部代价、起止点规则和路径约束共同定义计算结果;规整窗口限制允许的时间变形。标准 DTW 不满足全部度量公理,依赖度量性质的下游算法需要额外论证。tslearn 的 DTW 文档给出了公式和常用约束。
建议同时检查路径和分数。一个低代价路径可能反复拉伸某段具有研究意义的过程,这种匹配是否合理,需要依据任务判断。还应记录输出到底是绝对代价之和、平方代价之和、开平方后的值,还是经过长度归一化的转换分数。仅写“采用 DTW”不足以复现数值。
全局形状匹配与局部形状描述
k-Shape 使用的 SBD 基于归一化互相关寻找整体位移,k-Shape 算法本身还定义了聚类中心更新方法。原始定义见 Paparrizos 与 Gravano(2015)。shapeDTW先构建局部描述子,再对描述子序列进行对齐。整体位移与局部非线性对齐允许的变化不同;局部描述子的邻域大小也需要明确设置。
编辑式距离与带惩罚的对齐
LCSS、EDR、ERP、MSM、TWE 对匹配、插入删除、分裂合并或时间惩罚采用不同规定,鲁棒性和数学性质不能仅凭家族名称判断。阈值与代价参数需要结合观测单位确定。文献地图提供了各方法的原始来源。
一个较新的例子是 ADTW(2023),它为时间规整步骤加入加性惩罚。惩罚反映对时间变形的容忍程度,其量级、选择方式以及调参是否使用标签,都应进入实验协议。
特征、频谱与符号比较
特征映射可以突出自相关、频率成分、趋势或符号模式等性质。探索性分析中,应当直接说明比较了什么:“归一化频谱相近”是可核对的具体判断,“来自同一种时间过程”则需要更多证据。频率比较还需要兼容的物理采样尺度,数组下标本身不能定义赫兹。
对于多变量序列,还要说明通道对应关系,以及各通道是否共享同一条时间对齐路径。共享路径约束通道一起移动;逐通道路径允许它们分别调整。d'Hondt 等(2025)把距离家族、标准化和通道依赖假设纳入统一比较,支持我们把这些因素明确列入协议。该研究的结论仍受其数据集和设置范围约束。
四、矩阵轮廓回答的是局部搜索问题
标准矩阵轮廓记录每个固定长度子序列与最近合格邻居之间的距离,常见定义采用 z 标准化欧氏距离。自连接需要排除平凡的邻近匹配;跨记录连接则在另一条序列中寻找邻居。STUMPY 的矩阵轮廓介绍和 AB-join 教程说明了这些操作。
这种表示适合寻找重复模式或相对孤立的片段。较大的轮廓值表示:在给定窗口、距离和候选集合下,该片段缺少近邻。要进一步把它解释为临床异常、设备故障或其他具有领域含义的事件,还需要相应证据。
窗口长度直接参与定义任务。持续五个采样点的事件和持续五百个采样点的周期,不能在未说明的情况下作为同一个搜索问题处理。可复现的报告至少应交代窗口、归一化、排除区、常数窗口约定以及连接方向。若同时搜索多种长度,还需说明跨长度结果如何筛选和比较。
五、学习表示与训练损失分别解决什么
Soft-DTW对路径代价进行平滑聚合,在合适的局部代价和正平滑参数下支持求导,因此可以作为模型优化的一部分。原始 soft-DTW 可能为负,相同输入处也未必达到最小值。Blondel、Mensch 与 Vert(2021)提出了校正散度,并在明确条件下证明相关性质。平滑损失、非负散度和数学度量各有不同要求。
学习嵌入提供了另一种比较空间。TS2Vec通过层次化对比学习构建时间点及子序列表示;MOMENT提供面向多种时序任务的预训练表示。它们构成测试学习表示的依据,但新的检索任务仍需要独立定义“什么结果算相关”。
近期的检索增强研究进一步体现了这个区别。TS-RAG(NeurIPS 2025)检索片段以支持时序预测。预测精度衡量组合系统的最终任务表现;若进一步主张检索质量更高,还需要相关性目标与检索评价。
采用嵌入比较时,建议记录检查点、训练数据暴露情况、输入长度、预处理、池化方式和潜空间距离,并检查任务要求保留的差异是否仍可区分。例如,将小幅和大幅波动放在一起的表示,可能适用于形状检索,却不符合幅度敏感的匹配要求。
六、Python 工具应该按输出选择
这些库的能力存在交集。下表依据核查当日的官方文档列出实用入口,不构成速度排名。
| 工具 | 相关公开能力 | 可以从哪类任务入手 |
|---|---|---|
| aeon | 多种距离、对齐路径、成对计算,以及相似性搜索接口 | 比较距离选择,构建整序列或子序列搜索 |
| tslearn | DTW、soft-DTW、重心计算与时序学习 | 将对齐几何用于聚类或学习 |
| DTAIDistance | DTW 实现、路径、剪枝与成对距离矩阵 | 计算并检查 DTW 距离和对齐 |
| STUMPY | 矩阵轮廓与子序列连接 | 定位重复或孤立的固定长度模式 |
| sktime | 多类时序学习任务的接口及组合 | 整合变换、估计器与评价流程 |
| EchoTime | 序列综合报告、结构画像比较、HTML 与 JSON 输出 | 同时检查并交流多个结构视角 |
比较数值前,需要阅读具体函数的定义。例如 DTAIDistance 的 distance_fast 选择 C 实现及相应剪枝默认值;EchoTime 的底层弹性方法 mode="fast" 采用有分辨率上限的筛选计算。函数名称都带有“fast”,并不说明近似策略一致。DTAIDistance API · EchoTime 实现。
七、一套便于团队审查的比较协议
以下是本文建议的执行步骤,不是关于某个方法优越性的实证结论。
- 固定匹配定义。 明确查询对象、候选范围、物理单位、持续时间、允许变化和相关性标签。类别标签可以是一种相关性定义,但未必涵盖所有具有研究意义的匹配。
- 保护评价边界。 根据实际应用,先按独立个体、设备或时间段等单位划分,再生成重叠窗口。若近重复窗口或未来观测会使评价变得平凡,或在实际使用时不可获得,就应从候选池中排除。
- 公开预处理。 记录标准化、时间戳、缺口、通道顺序和重采样。如果要隔离距离函数的影响,应保持其他处理一致;若比较完整流程,则明确报告各流程的差异。
- 调参不使用测试结果。 对齐窗口、编辑阈值、池化及模型检查点都属于协议的一部分。若选择过程使用标签,应明确报告监督信息。
- 评价所需输出。 检索采用相关性排序评价;对齐采用对应关系证据;聚类评价聚类结果;预测系统评价预测终点。计算开销也应针对实际工作负载测量。
- 检查有解释力的失败案例。 依据任务加入同形异幅、事件平移、持续时间变化、缺失观测等情境。将这些受控示例与真实数据证据分别报告。
对于近似搜索,应在明确的评价集合上,以精确参考结果测量近邻召回率。对筛选出的候选重新计算精确距离,可以修正这些候选的分数,但无法找回第一阶段已经遗漏的对象。
八、用 EchoTime 同时检查多个结构视角
EchoTime 可以生成组件级比较,并输出便于分享的报告。当前 compare_series 会把输入重采样到共同点数,对通道进行标准化,再组合形状、DTW 相关、趋势、一阶变化与频谱组件。默认重采样点数为 256。传入时间戳时,两条输入的时间跨度分别归一化,因此绝对持续时间和真实时钟对齐仍需单独检查。具体行为见本次检查的实现。
python -m pip install echotime
from pathlib import Path
import numpy as np
from echotime import compare_series
# 合成数据用于演示报告接口,不作为性能比较证据。
t = np.linspace(0, 4 * np.pi, 128)
x = np.sin(t)
y = np.sin(t + 0.2)
report = compare_series(x, y, left_name="reference", right_name="shifted")
print(report.to_summary_card_markdown())
Path("similarity_report.html").write_text(
report.to_html_report(), encoding="utf-8"
)
解读时应同时查看组件和处理约定。综合分数是探索性摘要,目前没有证据将它解释为经过校准的概率。画像层面的比较也只描述所选结构轴的接近程度,不能据此确认共同因果机制或模型迁移一定成功。
一个具体的起点是:选一对团队能够解释其相似关系的序列,检查报告各组件是否符合这个解释。需要完整对齐路径或子序列搜索结果时,再使用相应工具的接口。方法图谱区分 EchoTime 当前覆盖与更广的方法,文献地图提供进一步扩展的原始依据。
范围与来源。 本文是面向选型的叙述性比较,核查了原始论文、官方软件文档和仓库源码;不主张文献穷尽、不代表已独立复现所引论文,也不宣称 EchoTime 具有已测量的普遍优势。证据表与编辑检查。
Built from the versioned Markdown source. Share questions, corrections and reproducible examples in GitHub Discussions.