binder

基于特征的aeon时间序列分类

基于特征的分类器是TSC中最近流行的一个主题。我们提供的基于特征的分类器只是转换和分类器的管道。它们从时间序列中提取描述性统计量作为特征,用于分类器。有几个工具包可用于提取特征。

Pipeline classifier.

导入和加载数据

[5]:
import warnings

from sklearn import metrics

from aeon.classification.feature_based import Catch22Classifier, FreshPRINCEClassifier
from aeon.datasets import load_basic_motions, load_italy_power_demand
from aeon.transformations.collection.feature_based import Catch22
from aeon.utils.discovery import all_estimators

warnings.filterwarnings("ignore")

X_train, y_train = load_italy_power_demand(split="train")
X_test, y_test = load_italy_power_demand(split="test")
X_test = X_test[:50]
y_test = y_test[:50]

print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)

X_train_mv, y_train_mv = load_basic_motions(split="train")
X_test_mv, y_test_mv = load_basic_motions(split="test")

X_train_mv = X_train_mv[:20]
y_train_mv = y_train_mv[:20]
X_test_mv = X_test_mv[:20]
y_test_mv = y_test_mv[:20]

print(X_train_mv.shape, y_train_mv.shape, X_test_mv.shape, y_test_mv.shape)
all_estimators("classifier", tag_filter={"algorithm_type": "feature"})
[5]:
[('Catch22Classifier',
  aeon.classification.feature_based._catch22_classifier.Catch22Classifier),
 ('FreshPRINCEClassifier',
  aeon.classification.feature_based._fresh_prince.FreshPRINCEClassifier),
 ('SignatureClassifier',
  aeon.classification.feature_based._signature_classifier.SignatureClassifier),
 ('SummaryClassifier',
  aeon.classification.feature_based._summary_classifier.SummaryClassifier),
 ('TSFreshClassifier',
  aeon.classification.feature_based._tsfresh_classifier.TSFreshClassifier)]

Catch22 和 Catch22Classifier

高度比较时间序列分析(hctsa)[1]工具箱可以为探索性时间序列分析创建超过7700个特征。规范时间序列特征(catch22)[2]是从完整集中确定的最具区分性的22个hctsa特征。catch22是通过对UCR数据集的评估选择的。hctsa特征最初经过修剪,去除了那些对均值和方差敏感的特征,以及那些无法在超过80%的UCR数据集上计算的特征。然后基于预测性能进行了特征评估。任何性能低于阈值的特征都被移除。对于剩余的特征,对相关矩阵进行了层次聚类以去除冗余。从形成的22个聚类中的每一个中,选择了一个特征,考虑了平衡准确性、计算效率和可解释性。catch22特征涵盖了广泛的概念,如数据序列值的基本统计、线性相关性和熵。报告的catch22结果在对每个数据序列应用转换后构建了一个决策树分类器。

Catch22Classifier 是一个方便的包装器,用于包含 Catch22 转换和 sklearn 随机森林分类器的管道。它可以在构造函数中配置为使用任何 sklearn 分类器。

[6]:
c22 = Catch22()
x_trans = c22.fit_transform(X_train)
x_trans.shape
[6]:
(67, 22)
[7]:
c22cls = Catch22Classifier()
c22cls.fit(X_train, y_train)
c22_preds = c22cls.predict(X_test)
metrics.accuracy_score(y_test, c22_preds)
[7]:
0.84

TSFresh 和 FreshPRINCEClassifier

基于可扩展假设测试的时间序列特征提取(TSFresh)是从时间序列中提取的近800个特征的集合。一项广泛的基于特征的管道比较[3]发现,TSFresh后接旋转森林分类器[4]的准确性显著高于其他组合。这个管道被硬编码到一个名为FreshPRINCEClassifier的aeon分类器中。

[8]:
fp = FreshPRINCEClassifier()
fp.fit(X_train, y_train)
fp_preds = c22cls.predict(X_test)
metrics.accuracy_score(y_test, fp_preds)
[8]:
0.84

签名和SignatureClassifier

广义签名是一组主要用于基于粗糙路径理论的多变量时间序列的特征提取技术。我们特别关注广义签名方法[5]及其伴随的规范签名管道。签名是有序交叉矩的集合。管道默认开始时会应用两种增强。基点增强简单地在时间序列的开头添加一个零,使签名对时间序列的平移敏感。时间增强将系列时间戳作为额外坐标添加,以确保每个签名是唯一的,并获取有关时间序列参数化的信息。在系列上运行分层二元窗口,对每个窗口应用签名变换。然后将每个窗口的输出连接成特征向量。签名需要安装软依赖项esig。

UCR单变量数据集上的性能

您可以按如下方式找到基于字典的分类器。

[2]:
from aeon.utils.discovery import all_estimators

est = all_estimators("classifier", tag_filter={"algorithm_type": "feature"})
for c in est:
    print(c)
('Catch22Classifier', <class 'aeon.classification.feature_based._catch22.Catch22Classifier'>)
('FreshPRINCEClassifier', <class 'aeon.classification.feature_based._fresh_prince.FreshPRINCEClassifier'>)
('SignatureClassifier', <class 'aeon.classification.feature_based._signature_classifier.SignatureClassifier'>)
('SummaryClassifier', <class 'aeon.classification.feature_based._summary_classifier.SummaryClassifier'>)
('TSFreshClassifier', <class 'aeon.classification.feature_based._tsfresh_classifier.TSFreshClassifier'>)
[3]:
from aeon.benchmarking.results_loaders import get_estimator_results_as_array
from aeon.datasets.tsc_datasets import univariate

names = [t[0].replace("Classifier", "") for t in est]
names.remove("Summary")
results, present_names = get_estimator_results_as_array(
    names, univariate, include_missing=False
)
results.shape
[3]:
(112, 4)
[4]:
from aeon.visualisation import plot_boxplot, plot_critical_difference

plot_critical_difference(results, names)
[4]:
(<Figure size 600x230 with 1 Axes>, <Axes: >)
../../_images/examples_classification_feature_based_13_1.png
[5]:
plot_boxplot(results, names, relative=True)
[5]:
(<Figure size 1000x600 with 1 Axes>, <Axes: >)
../../_images/examples_classification_feature_based_14_1.png

参考文献

[1]htsc 仓库 https://github.com/benfulcher/hctsa

[2] Christ, 等人. (2018) “基于可扩展假设检验的时间序列特征提取(tsfresh–一个python包).” 神经计算 307: 72-77. https://www.sciencedirect.com/science/article/pii/S0925231218304843

[3] Midddlehurst 和 Bagnall (2022) “The FreshPRINCE: 一种基于简单转换的管道时间序列分类器” https://arxiv.org/abs/2201.12048

[4] Rodriguez 等人 (2006) “旋转森林:一种新的分类器集成方法” IEEE 模式分析与机器智能汇刊, 28(10): 1619–1630.

[5] Morrill 等人 (2020) “多元时间序列特征提取的广义签名方法” https://arxiv.org/abs/2006.00873


使用nbsphinx生成。Jupyter笔记本可以在这里找到。