首页
/ aeon 时间序列分类指南:从 11 大算法族到 ROCKET、HIVECOTEV2 的工程实践

aeon 时间序列分类指南:从 11 大算法族到 ROCKET、HIVECOTEV2 的工程实践

2026-09-08 11:04:05作者:温艾琴Wonderful

导读

本文以 scientific-agent-skills 仓库中 skills/aeon/references/classification.md 为骨架,系统梳理 aeon(scikit-learn 兼容的时间序列机器学习工具包)在时间序列分类任务上的完整算法目录、各自的适用场景、快速上手路径与选型策略。读完本文,你将掌握 aeon 分类器家族的结构化视图(卷积、深度学习、字典、距离、特征、区间、shapelet、混合、早分类、序数分类与组合工具),能够在真实任务中根据数据规模、可解释性与算力约束做出合理选型,并借助仓库中配套的 SKILL.md 与各 references 文档落地可复现的分类实验。

aeon 时间序列机器学习工具包架构示意图:涵盖数据集加载、Normalizer 与 RocketTransformer 特征变换,以及 RocketClassifier 分类等核心流程

一、先决条件:在动手分类前确认环境与数据形态

1.1 环境安装

根据 skills/aeon/SKILL.md 的说明,本技能面向 aeon 1.x(示例版本 v1.4.0,2026-03),要求 Python 3.10+(推荐 3.11+),安装时建议锁定 1.x 大版本以保证可复现性:

# 核心安装(分类、回归、聚类、距离、变换等稳定模块)
uv pip install "aeon>=1.4,<2"

# 深度学习分类器/预测器与可选扩展依赖
uv pip install "aeon[all_extras]>=1.4,<2"

使用 zsh 时需为 extras 加引号:uv pip install "aeon[all_extras]>=1.4,<2"

需要注意的版本事实:aeon 0.x / sktime 时代的 import 路径在 1.0 之后做了重构,本文及仓库示例均以 aeon 1.x 的路径为准

1.2 数据格式约定

分类器的输入遵循 aeon 的 collection 约定:

  • 数据集集合(collection):形状为 (n_cases, n_channels, n_timepoints),即「样本数 × 通道数 × 时间点数」;
  • 单条序列:形状为 (n_channels, n_timepoints)

这也是后续所有分类代码的前提——即使只含单通道(单变量)数据,仍需保留 channel 维度。常见操作(如 z-score 归一化)应通过 Normalizer 这类 collection 变换完成。

二、算法全景:aeon 时间序列分类器家族目录

原文档将 aeon 提供的分类算法组织为多个算法族,每个家族共享同一种方法论假设,便于根据数据特征快速收敛候选。以下逐一展开各族的核心成员与典型「何时使用」(Use when)判断。

2.1 卷积类分类器(Convolution-Based Classifiers)

通过随机卷积变换高效抽取特征,无需显式训练卷积核即可获得强判别表示,代表 aeon「快而准」的路线:

  • Arsenal——使用多样核的 ROCKET 分类器集成(ensemble);
  • HydraClassifier——带膨胀的多分辨率卷积;
  • RocketClassifier——随机卷积核 + 岭回归(ridge regression)分类;
  • MiniRocketClassifier——面向速度优化的简化 ROCKET 变体;
  • MultiRocketClassifier——融合多个 ROCKET 变体。

何时使用:需要快速、可扩展,且在多样化数据集上保持稳健性能的分类方案。

2.2 深度学习分类器(Deep Learning Classifiers)

面向时序专门优化的神经网络结构(详见 skills/aeon/references/networks.md):

  • FCNClassifier——全卷积网络;
  • ResNetClassifier——带跳跃连接(skip connections)的残差网络;
  • InceptionTimeClassifier——多尺度 inception 模块;
  • TimeCNNClassifier——通用 CNN;
  • MLPClassifier——多层感知机基线;
  • EncoderClassifier——通用编码器封装;
  • DisjointCNNClassifier——面向 shapelet 的架构。

何时使用:拥有大规模数据集、需要端到端学习,或数据蕴含复杂时序模式时。

2.3 字典类分类器(Dictionary-Based Classifiers)

把时间序列转换成符号化表示,再在符号空间上计数与投票:

  • BOSSEnsemble——Bag-of-SFA-Symbols 集成投票;
  • TemporalDictionaryEnsemble——组合多种字典方法;
  • WEASEL——时间序列词抽取分类(Word ExtrAction for time SEries cLassification);
  • MrSEQLClassifier——多符号序列学习。

何时使用:需要可解释模型、稀疏模式,或适合符号化推理的场景。

2.4 距离类分类器(Distance-Based Classifiers)

基于专用时间序列距离度量做相似性决策(典型如 k-NN):

  • KNeighborsTimeSeriesClassifier——使用 DTW、LCSS、ERP 等时序距离的 k-NN;
  • ElasticEnsemble——组合多种弹性距离度量;
  • ProximityForest——基于距离切分的树集成。

何时使用:小数据集、需要基于相似度的分类、或要求决策可解释。

SKILL.md 的距离章节给出了该分类器的典型构造参数:通过 distancedistance_params 传入具体度量及其窗口等超参数:

from aeon.classification.distance_based import KNeighborsTimeSeriesClassifier

clf = KNeighborsTimeSeriesClassifier(
    n_neighbors=5,
    distance="dtw",
    distance_params={"window": 0.2}
)

aeon 可用的距离可归为三类,均可作为该分类器的候选度量:

  • 弹性距离:DTW、DDTW、WDTW、ERP、EDR、LCSS、TWE、MSM;
  • 锁步距离(lock-step):Euclidean、Manhattan、Minkowski;
  • 形状距离:Shape DTW、SBD。

其中基于 DTW 的 1-NN 常被用作分类性能的经典强基线(见 skills/aeon/references/datasets_benchmarking.md 的 Best Practices)。

2.5 特征类分类器(Feature-Based Classifiers)

先抽取统计与签名特征,再交给分类器:

  • Catch22Classifier——22 个典型时间序列特征(canonical time-series characteristics);
  • TSFreshClassifier——借助 tsfresh 的自动化特征抽取;
  • SignatureClassifier——路径签名(path signature)变换;
  • SummaryClassifier——汇总统计量抽取;
  • FreshPRINCEClassifier——组合多个特征抽取器。

何时使用:需要可解释特征、具备领域先验,或倾向显式特征工程的方案。

2.6 区间类分类器(Interval-Based Classifiers)

从随机或监督选定的区间内抽特征:

  • CanonicalIntervalForestClassifier——随机区间特征 + 决策树;
  • DrCIFClassifier——使用 catch22 特征的 Diverse Representation CIF;
  • TimeSeriesForestClassifier——随机区间 + 汇总统计量;
  • RandomIntervalClassifier——朴素区间方案;
  • RandomIntervalSpectralEnsembleClassifier——从区间抽取谱特征;
  • SupervisedTimeSeriesForest——有监督区间选择。

何时使用:判别模式仅出现在特定时间窗口内。

2.7 Shapelet 类分类器(Shapelet-Based Classifiers)

发现并利用有判别力的子序列(shapelet)

  • ShapeletTransformClassifier——发现并应用判别性 shapelet;
  • LearningShapeletClassifier——通过梯度下降学习 shapelet;
  • SASTClassifier——可扩展的近似 shapelet 变换;
  • RDSTClassifier——随机膨胀 shapelet 变换。

何时使用:需要可解释的判别子序列模式或相位不变特征。

2.8 混合类分类器(Hybrid Classifiers)

组合多种分类范式以获得顶级精度:

  • HIVECOTEV1——Hierarchical Vote Collective of Transformation-based Ensembles(第一版);
  • HIVECOTEV2——组件升级后的增强版本。

何时使用:追求最高精度、且算力资源充足时。

2.9 早期分类(Early Classification)

不等完整序列观测完毕即做预测:

  • TEASER——Two-tier Early and Accurate Series Classifier;
  • ProbabilityThresholdEarlyClassifier——当置信度超过阈值时做出预测。

何时使用:需要实时决策,或每次观测都有成本(如医疗监测、故障预警)。

2.10 序数分类(Ordinal Classification)

处理具有自然顺序的类别标签:

  • OrdinalTDE——面向序数输出的时间字典集成。

何时使用:类别存在天然排序(如严重程度分级)。

2.11 组合工具(Composition Tools)

用于构建自定义流水线与集成:

  • ClassifierPipeline——将变换器与分类器链接成流水线;
  • WeightedEnsembleClassifier——分类器的加权组合;
  • SklearnClassifierWrapper——把 sklearn 分类器适配到时间序列数据上(先用 aeon 变换抽取特征)。

何时使用:需要以可复用组件方式拼装「特征变换 + 分类」链路时。

三、Quick Start:20 秒跑通第一个分类器

原文档给出的最小可运行示例,覆盖「加载标准数据集 → 训练 → 打分」全流程:

from aeon.classification.convolution_based import RocketClassifier
from aeon.datasets import load_classification

# 加载 UCR 基准数据集(已内置 train/test 官方划分)
X_train, y_train = load_classification("GunPoint", split="train")
X_test, y_test = load_classification("GunPoint", split="test")

# 训练并预测
clf = RocketClassifier()
clf.fit(X_train, y_train)
accuracy = clf.score(X_test, y_test)

SKILL.md 中同一示例补充了核数量参数与显式预测:

clf = RocketClassifier(n_kernels=10000)
clf.fit(X_train, y_train)
accuracy = clf.score(X_test, y_test)

两点实战提示:

  1. 务必使用官方 train/test 划分而不是自行 train_test_split。UCR/UEA 基准的可比性建立在固定划分之上(datasets_benchmarking.md 明确建议采用标准划分以确保可复现)。
  2. 除通用加载器 load_classification("GunPoint", split="train") 外,aeon 也提供数据集专属辅助函数(如 load_gunpoint(split="train")),二者等价。

GunPoint 属于内置的快速测试数据集(手势识别类),类似的还有 ArrowHead(形状分类)、ItalyPowerDemand(电力需求)、BasicMotions(运动分类),以及 UCR/UEA 档案中的 100+ 数据集。需要了解元信息(训练/测试样本数、序列长度、类别数)时可用 get_dataset_meta_data("GunPoint")

四、更完整的实战:特征变换 + 传统机器学习 + 评测闭环

4.1 用 ROCKET 变换把「分类」交给任意 sklearn 分类器

卷积类分类器的底层机制是随机卷积特征抽取。这一机制在 aeon 中也被暴露为可独立使用的变换器,因此你可以把 ROCKET 当作特征工程步骤,再接入任意 sklearn 模型:

from aeon.transformations.collection.convolution_based import RocketTransformer
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier

rocket = RocketTransformer()
X_train_features = rocket.fit_transform(X_train)
X_test_features = rocket.transform(X_test)

clf = GradientBoostingClassifier()
clf.fit(X_train_features, y_train)
predictions = clf.predict(X_test_features)

同样地,Catch22aeon.transformations.collection.feature_based)可以一次抽取 22 个时间序列特征,作为特征类分类器的同行组件。

4.2 端到端 Pipeline

既可以使用 aeon 的 sklearn 兼容 API 直接拼接 Pipeline

from aeon.transformations.collection import Normalizer
from aeon.classification.convolution_based import RocketClassifier
from sklearn.pipeline import Pipeline

pipeline = Pipeline([
    ('normalize', Normalizer()),      # Z-score 归一化
    ('classify', RocketClassifier())  # 卷积分类器
])

pipeline.fit(X_train, y_train)
accuracy = pipeline.score(X_test, y_test)

也可以在变换前加入缺失值插补,例如用 aeon.transformations.collection 中的 SimpleImputer(strategy='mean') 预处理后再进入分类链路。

4.3 评测与基准对比

仓库配套的 skills/aeon/references/datasets_benchmarking.md 提供了把「训练 + 评测 + 对齐发表结果」串起来的完整工作流:

from aeon.datasets import load_classification
from aeon.classification.convolution_based import RocketClassifier
from aeon.benchmarking import get_estimator_results
from sklearn.metrics import accuracy_score

dataset_name = "GunPoint"
X_train, y_train = load_classification(dataset_name, split="train")
X_test, y_test = load_classification(dataset_name, split="test")

clf = RocketClassifier(n_kernels=10000, random_state=42)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.4f}")

# 与公开的 bake-off 发表结果对齐
published = get_estimator_results("ROCKET", dataset_name)
print(f"Published ROCKET accuracy: {published['accuracy']:.4f}")

评测环节的公认做法还包括:

  • 设置随机种子RocketClassifier(random_state=42) 保证实验可复现;
  • 多指标报告:accuracy / weighted F1 / precision 同时给出;
  • 小数据集用交叉验证cross_val_score(clf, X_train, y_train, cv=5, scoring='accuracy')
  • 对比简单基线:例如 1-NN + Euclidean(KNeighborsTimeSeriesClassifier(n_neighbors=1, distance="euclidean")),确认模型提升是否真实;
  • 显著性检验:对多个数据集上的成对结果跑 wilcoxon_test,多算法对比用 nemenyi_test(均位于 aeon.benchmarking)。

五、深入深度学习分类器:训练参数与架构选型

若数据量足够且追求端到端学习,深度学习分类器(详见 skills/aeon/references/networks.md)是核心候选。它们基于对应神经网络:FCNClassifier(全卷积)、ResNetClassifier(残差块 + 跳跃连接,缓解深网梯度消失)、InceptionTimeClassifier(并行多尺度卷积核捕捉不同时间尺度模式)、TimeCNNClassifier(标准 CNN)、MLPClassifier(展平后全连接,作为深度基线)。

使用入口示例:

from aeon.classification.deep_learning import InceptionTimeClassifier

clf = InceptionTimeClassifier(n_epochs=100, batch_size=32)
clf.fit(X_train, y_train)
predictions = clf.predict(X_test)

典型需调优的超参数包括:

  • n_epochs——训练轮数,常见 50–200;
  • batch_size——每批样本数,常见 16–64;
  • learning_rate——学习率,常见 0.0001–0.01;
  • 网络专属参数,如 kernel_size=[7, 5, 3]n_filters=[128, 256, 128](以 FCN 类为例)。

工程实践上还应注意:

  • 先用验证集做早停FCNClassifier(n_epochs=200) 配合 validation_data=(X_val, y_val),并挂载 EarlyStopping(patience=20, restore_best_weights=True)ReduceLROnPlateau(patience=10, factor=0.5) 回调;
  • 数据归一化:深度网络普遍受益于 z-score 归一化,训练前用 Normalizer() 处理训练/测试集;
  • GPU 加速:aeon 深度分类器底层基于深度学习后端,若 GPU 可用会自动利用;可用 CUDA_VISIBLE_DEVICES 选择设备;
  • 复现性:为 numpy/random/深度学习框架设置同一随机种子;
  • 选型顺序:先 MLPClassifier/FCNClassifier 起步,不足再上 ResNetClassifier/InceptionTimeClassifier,单模型不够再考虑集成。

按数据特性选型:长序列优先 TCN/膨胀卷积类架构,短序列用 MLP/FCN,多变量可用 Inception 或 FCN,多尺度模式优先 Inception 系(关于网络的进一步细节参见 skills/aeon/references/networks.md)。

六、算法选择速查

汇总原文档的选型经验并结合仓库配套资料,给出四类优先级下的推荐:

优先级 推荐分类器 理由
速度优先 MiniRocketClassifierArsenal 随机卷积无需梯度训练,核数可控、可扩展
精度优先 HIVECOTEV2InceptionTimeClassifier 混合集成 / 深度架构,占用算力较高
可解释性优先 ShapeletTransformClassifierCatch22Classifier shapelet / catch22 特征可审计、可解释
小数据 KNeighborsTimeSeriesClassifier 与距离类方法 相似度决策在样本少时依然稳健;应避免需要大数据的深度模型
大数据 深度学习分类器、ROCKET 系 数据量足以支撑端到端学习 / 大规模特征变换

结合 SKILL.md 的最佳实践,建议的通用策略是:

  1. 从简单开始:优先 ROCKET 系而非直接上深度学习;
  2. 使用验证集:切分训练数据用于调参;
  3. 对照基线:与 1-NN Euclidean、Naive 等简单方法比较;
  4. 评估资源:ROCKET 适合追求速度,GPU 可用时才投入深度模型;
  5. 官方划分 + 固定随机种子:保证结果可与 UCR/UEA 及公开 bake-off(2017 单变量、2021 多变量、2023 单变量等既有发表结果)对齐。

七、在本仓库中如何继续深入

本主题在仓库内的完整资料组织如下,可对照查阅:

在 scientific-agent-skills 这一 Agent 技能仓库中,aeon 技能(skills/aeon/SKILL.md)面向「时间序列机器学习任务」,适用于需要超越标准 ML 方法的时序数据场景;本文所整理的分类器目录即为该技能在分类任务上的落地清单。若任务目标是预测连续值、发现异常或做无监督分组,则应切换到上述对应的参考文档。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.76 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
858
1.35 K
docsdocs
暂无描述
Markdown
899
5.82 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
923
1.85 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.83 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
532
596
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.03 K
524
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.37 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
393