时序分类使用指南

什么是时序分类?

时间序列分类是一项在多个领域均得到应用的通用任务,目的是利用标记好的训练数据,确定一个时间序列属于预先定义的哪一个类别。时间序列分类不同于常规分类,因为时序数据是具有顺序属性的序列。

如下图所示的心电图信号样本,它表示一个心跳活动。根据信号特征的不同可以加以区分,左边表示正常心跳,而右边表示心肌梗死。(数据来源于https://timeseriesclassification.com/description.php?Dataset=ECG200)

Classify Windows

由此可见,我们定义一个时序分类问题是时序序列的分类,在上述例子中每一个心电图作为一个数据样本,每个数据样本会对应一个分类的label。如下图所示,模型的输入可以是是n个TSDataset。

Classify Windows

PaddleTS提供了时序分类的能力,主要包括:

  • 利用TSDataset数据结构,适配时序分类场景的数据特征,如上面心电图的例子。

  • 实现了两个时序分类的深度模型,包括经典的CNN以及领先的InceptionTime,同时提供ClassifyBaseModel基类,方便广大开发者构建新的时序分类模型。

  • 默认支持accuracy_score对时序分类进行评估,也适配sklearn.metrics相关评估算子对时序分类结果进行评估。

示例:

下方的示例使用了内置的CNN模型展示如何基于PaddleTS进行时序分类。

1. 数据准备

使用内置的API:get_dataset加载BasicMotions数据集。

from paddlets.datasets.repository import get_dataset

ts_x_trains, y_train = get_dataset("BasicMotions_Train")
ts_x_tests, y_test = get_dataset("BasicMotions_Test")

2. 模型训练

训练时序分类模型。

from paddlets.models.classify.dl.cnn import CNNClassifier

network = CNNClassifier(max_epochs=1000, patience=50)
network.fit(ts_x_trains, y_train)

3. 模型预测和评估

使用训练好的模型进行预测和评估

from sklearn.metrics import accuracy_score, f1_score

preds = network.predict(ts_x_tests)
score = accuracy_score(y_test, preds)
f1 = f1_score(y_test, preds, average="macro")

概率预测

可以返回每个分类的概率

preds = network.predict_proba(ts_x_tests)

5. 模型持久化

可以将训练完成的模型保存到指定路径。

network.save('./model/cnn')

模型保存之后,可以加载模型用于新的数据预测。

from paddlets.models.classify.dl.paddle_base import PaddleBaseClassifier

load_network = PaddleBaseClassifier.load('./model/cnn')