← Blog

如何用 Aeon 分析时间序列:DTW 分类、聚类与相似度计算

M
MindPlot 研究团队
2026-07-26
分享
time-seriesmachine-learningPythonDTW

文章目录

Aeon 提供了一套面向时间序列的 Python 工具,可以在保留观测顺序的前提下比较曲线、识别类别并探索分组。下面的例子从六条容易核对的短曲线出发:DTW 最近邻模型判断两条未参与训练的曲线是上升还是下降,时间序列 k 均值恢复两个趋势组,距离计算则解释相似曲线与相反曲线为何会被区别对待。两条留出曲线都得到正确分类;两条相似上升曲线的 DTW 距离是 0.06,上升曲线与下降曲线之间的距离是 70.0。这些结果适合验证分析流程是否真正工作,但六条刻意简化的曲线不能代表模型在真实传感器、临床或实验数据上的准确率。

科学原理导论

为什么时间序列不能当作普通表格处理

时间序列是一组按时间或其他具有顺序意义的索引排列的观测值。心电图电压、工业设备振动、天文光变曲线、环境传感器记录、纵向实验室指标以及交易量都属于时间序列。顺序本身承载科学信息:即使打乱后均值和方差不变,信号的趋势、周期、突变和因果先后也可能完全消失。因此,分析方法必须明确保留观测顺序,而不能只把每个数值当作彼此独立的表格特征。

时间序列机器学习包含多个不同任务。分类为整条曲线分配已知类别;回归从曲线预测连续结果;聚类在没有标签的情况下寻找相似组;预测利用过去估计未来;异常检测寻找反常点或反常片段;分段识别状态转换;相似性搜索从集合中检索相关模式。Aeon 为这些任务提供风格一致的估计器接口,并沿用了许多数据科学用户熟悉的 scikit-learn 约定。

本演示选择三个可清楚审计的核心能力:整条序列分类、整条序列聚类和弹性距离计算。演示数据故意很小,便于逐值检查。三条曲线从约零上升到五,另外三条从约五下降到零;同组曲线之间只有轻微偏移。运行前就能写出合理的科学预期,因此测试不会把“程序成功退出”误当成“算法结果正确”。

这不是性能基准。两条留出曲线全部预测正确,不足以说明模型在真实场景中的泛化能力。小数据的作用是验证标签、数组方向、距离、预测、聚类成员关系和文件产物确实彼此对应。真实研究还需要代表性采样、足够大的独立评估集、合理预处理、不确定性估计以及符合应用目标的基线比较。

动态时间规整的含义

欧氏距离按相同位置逐点比较两个向量。当采样完全对齐时,这种方法简单有效。然而真实过程的速度经常略有差异:一次心跳可能被拉长,一个动作可能完成得更慢,某种生物反应也可能延迟开始。如果坚持只比较相同索引,相同形状但略有错位的曲线会被判断为差异很大。

动态时间规整通常简称 DTW。它先建立局部差异的代价矩阵,再从两条序列的起点寻找一条到终点的低代价路径。路径必须满足单调性和连续性,因此时间不能倒退,也不能任意跳跃。路径累计代价形成 DTW 距离。局部索引可以非线性对齐,这使比较能够容忍一定程度的速度变化或时间偏移。

这种灵活性同时也是风险。约束过弱时,DTW 可能把本来无关的事件强行对齐。窗口宽度、归一化方式、导数表示、缺失值策略、采样频率和滤波都会改变结果。在多变量序列中,高方差通道还可能主导总距离。使用者应记录单位、缩放、重采样和规整约束,因为这些选择属于科学方法,而不仅是程序参数。

保留结果中的两个数值用于说明相对关系,而不是建立通用阈值。A1A2 都是上升曲线,每个时间点相差约 0.1,安装版本计算出的 DTW 距离约为 0.06。A1B1 的变化方向相反,距离为 70.0。经验证的结论是“同类模式的距离远小于相反模式”,而不是“距离低于某个固定数值就必然属于同一科学类别”。换一组单位、长度、缩放或实现后,数值范围可能完全不同。

最近邻时间序列分类

本次分类采用一近邻估计器和 DTW 距离。预测时,算法在训练集合中寻找距离待预测曲线最近的序列,并返回该训练序列的类别。方法结构透明,没有隐藏的神经网络表示;研究者可以回到训练数据,检查究竟是哪一个实例决定了预测。使用弹性距离的最近邻也是时间序列分类中常见且重要的基线。

训练集合包含四条序列:标记为上升的 A1A2,以及标记为下降的 B1B2。留出测试的是 A3B3。Aeon 把 A3 预测为上升,把 B3 预测为下降,两项都与演示标签一致,所以本例准确率为 1.0。预测 CSV 保留了序列标识、预期标签和预测标签,而不是只留下一个无法追踪来源的准确率数字。

两例得到 100% 准确率的不确定性极大。只要错一例,准确率就会降到 0.5;而且这些曲线是为了可分离的软件验证而设计,并非从一个明确总体中独立抽样。因此,这个数字是确定性回归目标,不是应用性能宣传。真实评估需要更多独立样本、各类别指标、置信区间以及阻止数据泄漏的拆分策略。若同一受试者、设备、地点或采集批次的相似曲线同时进入训练和测试,结果通常会过于乐观。

最近邻预测的计算量还会随训练曲线数量和长度增加。大型集合可能需要下界剪枝、原型选择、近似搜索或不同表示。规整窗口等超参数必须只用训练数据或训练折叠选择;若观察测试结果后再调参数,就会把测试信息泄漏回模型开发过程。

时间序列 k 均值聚类

聚类不使用给定类别,而是尝试把相似序列分到同一组。时间序列 k 均值把传统划分思想扩展到由样本、通道和时间点组成的三维集合。距离定义决定样本怎样分配,平均策略决定聚类中心怎样更新。当使用弹性距离时,中心估计往往比逐点算术平均更复杂。

验证运行指定两个聚类和固定随机种子。所有 A 系列进入同一个聚类,所有 B 系列进入另一个聚类。聚类编号本身没有科学含义:编号 0 不天然表示下降,另一次同样有效的运行可能交换 0 和 1。因此,语义验证不要求固定编号,而是检查成员关系:A1A2A3 必须同组,B1B2B3 必须同组,并且两组编号不同。

原生测试确实发现了聚类稳定性问题。仅使用两次初始化时,k 均值可能收敛到不理想的局部解,即使这个数据看起来十分简单。测试没有因为命令退出码为零就判定成功,而是检查成员关系并使测试失败。随后保留固定随机种子,把 n_init 提高到十次,预期分组才稳定出现。这个修复已写回交付的技能说明,提醒后续使用者检查聚类内容,而不是只检查进程状态。

真实探索中,算法接受 n_clusters 并不代表聚类数已由数据证明。研究者应考察不同随机种子和重采样下的稳定性、合理的内部指标、聚类原型以及领域可解释性。任何数据都可以被算法强行分组,但一个分组不自动等于新的生物状态、疾病亚型或物理机制。预处理、距离、异常值、采样范围和特征表示可能比算法名称更决定结果。

数据形状与方向

对于等长单变量序列,Aeon 常用 (样本数, 通道数, 时间点数) 的三维数组。本例 CSV 每行是一条序列,包含六个有序时间点。工作流将六行转换为 (6, 1, 6),四条训练曲线形成 (4, 1, 6),两条留出曲线形成 (2, 1, 6)

方向是必须验证的科学条件。若错误地把每个时间点当作独立样本,程序可能仍能拟合,但回答的已不再是整条曲线分类。若交换通道与时间维度,也可能得到可以运行却含义不同的结果。摘要文件因此保存输入、训练和测试形状,让审核者确认分析对象是完整序列。

不等长集合和多变量数据可能使用 Aeon 支持的其他容器。实验性模块及其接受的数据表示也可能随小版本变化。拟合前应验证模式:数值是否有限、单位是否一致、标签域是否正确、样本身份是否重复、时间轴是否对齐,以及拆分是否发生泄漏。

可复现安装与反馈修复

软件包安装在技能独占的 Python 环境中,没有污染控制器运行时或用户全局 site-packages。有界预检先下载 Aeon 1.5.0 及其核心依赖的确定版本,再离线安装。完整传输量为 142,578,750 字节,低于轻量测试规定的 500,000,000 字节上限。安装清单记录软件版本、Python 版本、下载字节数和上限。

核心安装不等于安装所有可选扩展。Aeon 的可选依赖覆盖更多估计器和深度学习功能,会显著扩大环境。本次通过只适用于实际执行过的分类、聚类和距离 API,不意味着预测、回归、异常检测、分段、相似搜索、可视化或神经网络模块的全部可选依赖都已安装和验证。

第一次自然语言运行生成的科学结果是正确的,但初版验证器只接受固定字段名。例如,产物使用 true_label,而验证器只查找 expected,所以该次尝试保持失败状态。修复后的验证器检查语义而非脆弱格式:预期与预测标签必须一致;同组曲线必须共享聚类且两组不同;同类距离必须小于异类距离;版本必须为 1.5.0;SVG 必须包含六条曲线。随后从头执行同一个请求,新的第 5 次尝试才获得通过。保留失败与重新运行的记录,可以避免把事后修改验证器伪装成原测试成功。

测试进度

测试门状态保留证据
技能中心安装通过技能副本与上下文查看
软件包预检通过142,578,750 字节,低于 500 MB
软件包安装通过Aeon 1.5.0;Python 3.11.15
原生功能运行修复聚类后通过分类、聚类与 DTW
自然语言运行第 5 次尝试通过已配置的对话运行时
产物语义验证通过CSV、JSON 与 SVG
运行平台已验证Linux x86_64 CPU;无需 CUDA
发布门通过聚焦结果截图与来源清单

演示用户请求

使用已安装的 Aeon 技能分析 data/time-series.csv 中的六条短时间序列。使用技能独占的 Aeon 1.5.0 环境。用 A1、A2、B1、B2 训练确定性的一近邻 DTW 分类器,然后预测 A3 和 B3。把全部六条序列用确定性的时间序列 k 均值分成两组,并比较 A1/A2 与 A1/B1 的 DTW 距离。保存 aeon-predictions.csvaeon-summary.json 和展示两组趋势的 aeon-series.svg。报告软件版本、形状、准确率、聚类标签、两个距离以及科学局限。不要用通用序列统计替代 Aeon,也不要编造结果。

该输入是用户式科学请求,而不是预先写好的程序。工作流需要找到正确的软件环境,读取 CSV,保持整条序列的数据方向,运行指定算法,生成三个可交付文件,并说明解释边界。

演示数据

受版本控制的时间序列 CSV包含六条单变量曲线,不涉及私人数据或外部受限记录。每行包含序列标识、演示标签与六个有序数值。

分组序列模式用途
上升A1、A2训练实例DTW 分类及距离参照
上升A3留出实例预期预测为上升
下降B1、B2训练实例DTW 分类
下降B3留出实例预期预测为下降

标签为分类提供测试判据,也用于在无监督聚类完成后审核成员关系。它们不是来自目标总体的临床或实验真值。六条曲线的设计目标是确定性软件验证。

已验证工作流

工作流把六个时间列解析为浮点值,形成 (6, 1, 6) 的 Aeon 集合,并按标识选出四条训练与两条测试曲线。随后拟合一近邻 DTW 分类器,对留出曲线预测并计算准确率。

聚类阶段使用两个聚类、固定种子和十次初始化。验证时忽略聚类编号的任意交换,只检查成员关系。最后计算相似对 A1/A2 和相反对 A1/B1 的 DTW,保存摘要与预测表,并生成包含六条曲线的 SVG。

from aeon.classification.distance_based import KNeighborsTimeSeriesClassifier
from aeon.clustering import TimeSeriesKMeans
from aeon.distances import dtw_distance

classifier = KNeighborsTimeSeriesClassifier(n_neighbors=1, distance="dtw")
classifier.fit(X_train, y_train)
predictions = classifier.predict(X_test)

clusterer = TimeSeriesKMeans(
    n_clusters=2,
    distance="euclidean",
    averaging_method="mean",
    random_state=7,
    n_init=10,
)
cluster_labels = clusterer.fit_predict(X)

这些代码用于透明复现。科学证据来自重新打开并通过语义检查的输出,而不是文章中出现了代码。

结果与产物

结果验证值含义
Aeon 版本1.5.0精确测试版本
样本 × 通道 × 时间点6 × 1 × 6整条序列方向正确
留出预测A3 上升;B3 下降两项均匹配预期
演示准确率1.0两例全对,不是泛化估计
聚类成员A 系列同组;B 系列同组数字编号可交换
DTW A1/A20.06相似模式比较
DTW A1/B170.0相反模式比较

预测 CSVJSON 摘要SVG 图均随测试保留。以下视图来自真实产物和验证报告。

对话界面中聚焦显示的 Aeon 验证结果报告

从 Aeon 保留产物提取的验证结果表

Aeon 可交付文件格式与大小清单

聚焦截图只显示渲染后的结果,没有资源管理器、原始 JSON 编辑器或无关应用面板。另外两张图总结数据衍生指标和文件来源。SHA-256 摘要、生成器和源文件记录在状态清单中。

结果解释

最强且有证据支持的结论应保持狭窄:在这组六条确定性演示曲线上,安装的 Aeon 版本正确执行了请求的整序列 API,并把结果保存为可复用格式。两个 DTW 数值之间的巨大差距符合预设模式,分类与聚类也和数据构造一致。

不能把 1.0 准确率宣传为模型性能。测试只有两例,而且都是干净的合成变体,没有比较其他方法。不能把聚类说成发现了生物或物理状态,因为没有噪声模型、测量过程、目标总体或外部验证集。SVG 是便于人工核对的图形产物,本身不是统计证明。

真实项目应先定义预测单位、目标、采样率、时间原点、通道含义和数据泄漏边界。数据拆分应在独立受试者或采集组层面完成,预处理必须放在训练折叠内部。DTW 最近邻应与更简单及领域合理的基线比较,并报告分类别指标和不确定性。聚类需要评估稳定性和领域解释,而不是选择视觉上最好看的分组。

可复现性

第 5 次尝试运行于 Linux x86_64、CPU、Python 3.11.15 和 Aeon 1.5.0。软件包及核心依赖传输 142,578,750 字节。没有要求或使用 CUDA。依据保留环境政策,技能独占工具环境继续保存在本地,便于检查和修复。

重复运行时应保留 CSV、版本固定、输入形状、训练测试划分、距离选择、随机种子、初始化次数和产物名称。必须重新打开输出,检查两行预测、准确版本、组内成员关系、两组差异、DTW 大小关系以及六条 SVG 曲线。升级 Aeon 或更换体系结构后,应记录为新的验证环境,不能默认沿用本次结论。

局限性

本案例覆盖稳定的核心分类、聚类与距离 API,没有验证 Aeon 的每个估计器和可选依赖。它不覆盖预测、回归、异常检测、分段、相似搜索、深度学习、多变量科学数据、缺失值、不规则采样、不等长度以及大型集合。

数据是合成、微小、平衡、等长、单变量且几乎无噪声。准确率没有有用的精度估计。DTW 数值依赖表示和实现。聚类修复说明初始化敏感性,但不构成完整稳定性研究。不同平台的浮点结果可能不同,尤其 macOS ARM 需要独立验证。

参考文献

  1. Middlehurst 等,《aeon: a Python Toolkit for Learning from Time Series》,Journal of Machine Learning Research,2024
  2. Aeon 1.5.0 官方安装文档
  3. Aeon 时间序列分类官方示例
  4. Sakoe 与 Chiba,《Dynamic programming algorithm optimization for spoken word recognition》,IEEE,1978
  5. Aeon PyPI 版本与 Python 兼容信息

无需编程即可尝试此工作流

MindPlot 已内置支持这项科学技能。你可以用自然语言描述时间序列分类、聚类或距离分析任务,附上数据,并要求返回可检查的表格、JSON 摘要与图形。用户无需编写或运行上面的 Python:MindPlot 智能体会依据安装的技能编写并执行分析,再把产物交付审核。你可以访问 mindplot.ai 在线尝试,也可以下载桌面版,以获得更好的体验和更强的本地数据隐私保护。