首页
/ scientific-agent-skills 中的 Aeon 时间序列聚类实战:从距离度量、均值方法到深度聚类器

scientific-agent-skills 中的 Aeon 时间序列聚类实战:从距离度量、均值方法到深度聚类器

2026-09-05 20:50:53作者:侯霆垣

本篇围绕 scientific-agent-skills 仓库中 aeon 技能的聚类参考文档 clustering.md 展开,系统讲解 Aeon 为时间序列定制的聚类算法族——分区算法、大规模数据集方法、弹性距离聚类、谱聚类、深度聚类器与特征型聚类器——并逐一说明其适用场景、距离度量与均值方法的选择依据。读完本文后,你可以针对"时间序列已对齐 / 存在时间偏移 / 数据量巨大 / 需要可解释特征"等不同数据特征,快速选定合适的聚类方案,并基于 fit_predictcluster_centers_ 等标准接口搭建可复现的聚类流水线。

1. 技能背景与运行环境

aeon 技能位于仓库的 skills/aeon/SKILL.md,是面向时间序列机器学习的 Agent 技能,覆盖分类、回归、聚类、预测、异常检测、分割与相似性搜索等任务。其 Front Matter 声明了明确的适用边界:

  • 适用于时序数据、序列模式或时间索引观测,且需要超越标准 ML 方法的专用算法的场景;
  • 要求 Python 3.10+,依赖 aeon 包(通过 uv pip install 安装),深度学习及扩展依赖需要 aeon[all_extras]
  • 技能版本基于 aeon 1.x(文档对标 v1.4.0),1.0 版本重构了预测与变换模块,导入路径与 0.x/sktime 时代不同。

在测试侧,tests/skill-requirements.toml 中声明了该技能的最小运行包集合:

[skills.aeon]
packages = ["aeon", "matplotlib", "numpy", "scikit-learn"]

安装命令(引自 SKILL.md,zsh 下需给 extras 加引号):

uv pip install "aeon>=1.4,<2"
# 需要深度学习估计器时:
uv pip install "aeon[all_extras]>=1.4,<2"

SKILL.md 同时提示:上游将 forecasting、anomaly_detection、segmentation、similarity_search、visualisation 视为实验性模块,而 clustering 属于稳定模块,可以放心用于生产流水线——这正是本文聚焦聚类的原因。

2. 聚类算法族总览

Aeon 的核心价值在于为时序数据提供了专用距离度量均值方法,使其聚类算法不再是把时间序列摊平后做普通 k-means,而是真正在"形状空间"上运算。参考文档将算法划分为六类,下面逐类说明。

2.1 分区算法(Partitioning)

标准 k-means/k-medoids 的时序适配版:

算法 说明
TimeSeriesKMeans 支持时序距离度量(DTW、Euclidean 等)的 K-means
TimeSeriesKMedoids 以真实时间序列作为聚类中心(medoid 语义,中心必然可解释)
TimeSeriesKShape 基于形状的聚类算法
TimeSeriesKernelKMeans 核方法变体,适合非线性模式

适用条件:已知聚类数目、预期簇形状近似球形。

2.2 大规模数据集方法

  • TimeSeriesCLARA —— Clustering LARge Applications,通过采样逼近 k-medoids;
  • TimeSeriesCLARANS —— CLARA 的随机化搜索变体。

适用条件:数据集大到标准 k-medoids 无法承受,需要可扩展性。

2.3 弹性距离聚类

专为对齐型相似度设计:

  • KASBA —— 带平移不变弹性均值(shift-invariant elastic averaging)的 K-means;
  • ElasticSOM —— 使用弹性距离的自组织映射(Self-Organizing Map)。

适用条件:时间序列之间存在时间平移或形变(warping)。这类算法在步态、心电、工业信号等"同一模式、不同相位"的数据上尤为合适。

2.4 谱方法(Spectral Methods)

  • KSpectralCentroid —— 带质心计算的谱聚类。

适用条件:簇形状非凸、需要基于图的聚类思路时。

2.5 深度学习聚类

基于自编码器的神经网络聚类,通过学到的低维表示做聚类:

聚类器 编码器结构
AEFCNClusterer 全卷积自编码器(Fully Convolutional)
AEResNetClusterer 残差网络自编码器
AEDCNNClusterer 膨胀卷积(Dilated CNN)自编码器
AEDRNNClusterer 膨胀 RNN 自编码器
AEBiGRUClusterer 双向 GRU 自编码器
AEAttentionBiGRUClusterer 注意力增强的 BiGRU 自编码器

适用条件:大数据集、需要学习式表示、或存在复杂非线性模式。注意这类估计器属于可选扩展,需要 aeon[all_extras] 提供的深度学习依赖。

2.6 基于特征的聚类(Feature-Based)

先把时间序列变换到特征空间,再在特征上聚类:

  • Catch22Clusterer —— 基于 22 个经典时序特征(Catch22);
  • SummaryClusterer —— 基于描述性统计量;
  • TSFreshClusterer —— 基于 tsfresh 自动特征。

适用条件:原始序列难以直接刻画、需要可解释特征时。这与 transformations.md 中介绍的 Catch22TSFreshSevenNumberSummaryCollectionTransformer 一脉相承——特征型聚类器本质上是"变换器 + 常规聚类器"的组合封装。

2.7 组合:ClustererPipeline

ClustererPipeline 允许把变换器与聚类器串联,搭建自定义聚类流水线,例如先 Normalizer 归一化再交给 TimeSeriesKMeans

3. 快速上手:DTW + 重心均值的 KMeans

参考文档给出的 Quick Start 完整继承如下。这里用 GunPoint 手势识别数据集的训练集做无监督聚类(以分类数据充当聚类输入),距离选用 DTW,均值方法选用重心平均(barycentric averaging):

from aeon.clustering import TimeSeriesKMeans
from aeon.datasets import load_classification

# 加载数据(借用分类数据集做聚类演示)
X_train, _ = load_classification("GunPoint", split="train")

# 对时间序列做聚类
clusterer = TimeSeriesKMeans(
    n_clusters=3,
    distance="dtw",        # 使用 DTW 距离
    averaging_method="ba"  # 重心平均(barycentric averaging)
)
labels = clusterer.fit_predict(X_train)
centers = clusterer.cluster_centers_

要点解读:

  1. distance="dtw":让簇内距离计算走弹性对齐路径,而非逐点比较,适合存在相位偏移的序列;
  2. averaging_method="ba":决定 cluster_centers_ 如何由簇成员"平均"得到,这是时序聚类与普通 k-means 最本质的差异点(见第 5 节);
  3. fit_predict / cluster_centers_:与 scikit-learn 生态完全一致的估计器 API,可直接接入 Pipeline、交叉验证等既有工具。

数据加载方面,datasets_benchmarking.md 说明自 aeon 1.4 起多数分类/回归归档托管在 Zenodo,首次使用时自动下载并缓存;也可用 get_dataset_meta_data("GunPoint") 查看样本数、长度、类别数等元数据,用于评估数据规模是否适合所选算法。

4. 距离度量:聚类质量的底层决定因素

聚类文档列出的兼容距离度量分为四组,与 distances.md 的完整目录相互印证:

类别 度量 特点
Lock-step(逐点) Euclidean、Manhattan、Minkowski 无对齐,速度最快;要求序列已对齐
弹性(带对齐) DTW、DDTW、WDTW 允许时间轴形变;DDTW 比较导数,对幅度偏移更稳健
编辑型 ERP、EDR、LCSS 容忍缺失/插入型差异;LCSS 对离群点鲁棒性最高
专用弹性 MSM、TWE 针对特定形变模式设计

从 distances.md 的复杂度分析看,距离选择直接决定聚类的可扩展性:Euclidean 为 O(n),带窗口约束的 DTW 为 O(nw)(w 为窗口宽度),全量 DTW 为 O(n²)。因此在大集合上聚类时,实践中应给 DTW 加 Sakoe-Chiba 窗口约束:

# 窗口约束(序列长度的 10%),兼顾速度并抑制病理性形变
clusterer = TimeSeriesKMeans(n_clusters=3, distance="dtw",
                             distance_params={"window": 0.1})

同时,多数距离对尺度敏感,聚类前建议做 z 归一化(SKILL.md 的 Best Practices 亦将此列为第一建议):

from aeon.transformations.collection import Normalizer
X_train = Normalizer().fit_transform(X_train)

此外,distances.md 还提供了 get_distance_function_names()get_distance_function("dtw") 两个动态查询入口,可以在运行时枚举并获取可用距离函数,便于脚本化地做度量对比实验。

5. 均值方法(Averaging Methods):如何得到"簇中心"

时序聚类中最容易被忽视、却直接影响 cluster_centers_ 含义的设计是簇中心的计算方式。参考文档列出四种均值方法:

均值方法 说明
mean_average 逐点算术平均,最快但忽略形变
ba_average 基于 DTW 的重心平均(barycentric averaging),是弹性距离下的经典选择
kasba_average 平移不变的弹性平均
shift_invariant_average 通用的平移不变平均

适用条件(原文档归纳):当你需要用于可视化或初始化的代表性簇中心时,需要显式选择均值方法。理解要点在于:

  • 使用 mean_average 时,DTW 距离下的簇中心只是逐点平均,可能不落在任何"典型形状"上;
  • 使用 ba_average 时,中心是通过 DTW 重心对齐迭代得到的时序,更适合作为聚类原型展示;
  • 若数据主要是相位平移关系,kasba_average / shift_invariant_average 这类平移不变方法能避免中心被不同相位"平均成噪声"。

这与算法选型一致:KASBA 本身就是"K-means + 平移不变弹性均值"的组合,适合时间平移显著的场景。

6. 算法选型决策表

综合参考文档的 Algorithm Selection 与距离/均值分析,可以整理成如下决策表(原文档六条优先级策略完整保留并补注):

首要诉求 推荐算法 依据
速度优先 TimeSeriesKMeans + Euclidean Lock-step 距离 O(n),无对齐开销
需要对齐时间形变 KASBATimeSeriesKMeans + DTW 弹性距离 + 合适的均值方法
大数据集 TimeSeriesCLARATimeSeriesCLARANS 采样/随机搜索保证可扩展性
复杂非线性模式 深度聚类器(AE*Clusterer 系列) 自编码器学习表示
可解释性 Catch22ClustererSummaryClusterer 特征空间可直接命名每个维度
非凸簇形状 KSpectralCentroid 基于图的谱方法不受球形假设约束

7. 评估:从内部指标到带标签数据

参考文档的评估部分建议使用 sklearn 或 aeon benchmarking 的聚类指标:

  • 轮廓系数(Silhouette score):簇内紧密度与簇间分离度的综合度量;
  • Davies-Bouldin 指数:越小越好,衡量簇间可分离性;
  • Calinski-Harabasz 指数:越大越好,衡量簇间/簇内方差比。
from sklearn.metrics import silhouette_score, davies_bouldin_score, calinski_harabasz_score
# 需要基于所选距离度量重建距离矩阵后再计算(如 DTW 距离矩阵)
print(silhouette_score(X, labels, metric="precomputed"))

当手头有真实标签时(例如直接用 GunPoint 的类别标签评估无监督结果),还可以用 aeon benchmarking 提供的聚类专用指标——datasets_benchmarking.md 中给出了带标签匹配的聚类准确率:

from aeon.benchmarking.metrics.clustering import clustering_accuracy
accuracy = clustering_accuracy(y_true, y_pred)

实践建议:无标签场景用内部指标对比不同(距离, 均值方法)组合;有标签场景用 clustering_accuracy 校验,并以简单基线(Euclidean KMeans)作为参照,避免仅凭单一指标下结论。

8. 小结与延伸阅读

aeon 技能中的聚类参考文档以"距离度量 × 均值方法 × 算法族"三个维度组织了完整的时序聚类选型空间:分区算法处理常规场景,CLARA/CLARANS 处理规模,KASBA/ElasticSOM 处理相位形变,谱方法处理非凸结构,自编码器聚类器处理复杂模式,特征型聚类器则换取可解释性。所有算法共享 scikit-learn 风格 API,可直接与仓库其他技能文档中的变换器(transformations.md)、距离函数(distances.md)和数据加载工具(datasets_benchmarking.md)自由组合成完整流水线。

延伸阅读路径:

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