aeon 时间序列分类指南:从 11 大算法族到 ROCKET、HIVECOTEV2 的工程实践
导读
本文以 scientific-agent-skills 仓库中 skills/aeon/references/classification.md 为骨架,系统梳理 aeon(scikit-learn 兼容的时间序列机器学习工具包)在时间序列分类任务上的完整算法目录、各自的适用场景、快速上手路径与选型策略。读完本文,你将掌握 aeon 分类器家族的结构化视图(卷积、深度学习、字典、距离、特征、区间、shapelet、混合、早分类、序数分类与组合工具),能够在真实任务中根据数据规模、可解释性与算力约束做出合理选型,并借助仓库中配套的 SKILL.md 与各 references 文档落地可复现的分类实验。
一、先决条件:在动手分类前确认环境与数据形态
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 的距离章节给出了该分类器的典型构造参数:通过 distance 与 distance_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)
两点实战提示:
- 务必使用官方 train/test 划分而不是自行
train_test_split。UCR/UEA 基准的可比性建立在固定划分之上(datasets_benchmarking.md 明确建议采用标准划分以确保可复现)。 - 除通用加载器
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)
同样地,Catch22(aeon.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)。
六、算法选择速查
汇总原文档的选型经验并结合仓库配套资料,给出四类优先级下的推荐:
| 优先级 | 推荐分类器 | 理由 |
|---|---|---|
| 速度优先 | MiniRocketClassifier、Arsenal |
随机卷积无需梯度训练,核数可控、可扩展 |
| 精度优先 | HIVECOTEV2、InceptionTimeClassifier |
混合集成 / 深度架构,占用算力较高 |
| 可解释性优先 | ShapeletTransformClassifier、Catch22Classifier |
shapelet / catch22 特征可审计、可解释 |
| 小数据 | KNeighborsTimeSeriesClassifier 与距离类方法 |
相似度决策在样本少时依然稳健;应避免需要大数据的深度模型 |
| 大数据 | 深度学习分类器、ROCKET 系 | 数据量足以支撑端到端学习 / 大规模特征变换 |
结合 SKILL.md 的最佳实践,建议的通用策略是:
- 从简单开始:优先 ROCKET 系而非直接上深度学习;
- 使用验证集:切分训练数据用于调参;
- 对照基线:与 1-NN Euclidean、Naive 等简单方法比较;
- 评估资源:ROCKET 适合追求速度,GPU 可用时才投入深度模型;
- 官方划分 + 固定随机种子:保证结果可与 UCR/UEA 及公开 bake-off(2017 单变量、2021 多变量、2023 单变量等既有发表结果)对齐。
七、在本仓库中如何继续深入
本主题在仓库内的完整资料组织如下,可对照查阅:
- skills/aeon/SKILL.md:aeon 技能总入口,含安装、数据格式、距离目录、深度网络速览与最佳实践;
- skills/aeon/references/classification.md:本文的算法目录底稿(分类算法全集);
- skills/aeon/references/networks.md:深度学习网络架构细节与训练调参;
- skills/aeon/references/datasets_benchmarking.md:数据集加载、文件格式读写(.ts/.tsf/.arff/.tsv)、评测指标与统计检验;
- skills/aeon/references/transformations.md:特征抽取与预处理变换;
- skills/aeon/references/distances.md:距离度量目录,供距离类分类器选型;
- 同一分类任务还可延伸到 skills/aeon/references/regression.md(连续值预测)与 skills/aeon/references/clustering.md(无监督分组)等姊妹主题。
在 scientific-agent-skills 这一 Agent 技能仓库中,aeon 技能(skills/aeon/SKILL.md)面向「时间序列机器学习任务」,适用于需要超越标准 ML 方法的时序数据场景;本文所整理的分类器目录即为该技能在分类任务上的落地清单。若任务目标是预测连续值、发现异常或做无监督分组,则应切换到上述对应的参考文档。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0631
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python09
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
