10. 多元时间序列

大多数关于时间序列分类的文献都集中在单变量时间序列上。尽管如此,已有多种针对多元时间序列分类的算法发表。我们还提供了一些简单工具,用于将单变量时间序列算法扩展到多元时间序列。这些工具可以在pyts.multivariate模块中找到。

10.1. 分类

MultivariateClassifier 将任何单变量时间序列分类器扩展为多变量时间序列分类器,采用多数投票机制:为多变量时间序列的每个特征拟合一个分类器,然后在预测时进行多数投票。

>>> from pyts.classification import BOSSVS
>>> from pyts.datasets import load_basic_motions
>>> from pyts.multivariate.classification import MultivariateClassifier
>>> X_train, X_test, y_train, y_test = load_basic_motions(return_X_y=True)
>>> clf = MultivariateClassifier(BOSSVS())
>>> clf.fit(X_train, y_train)
MultivariateClassifier(...)
>>> clf.score(X_test, y_test)
1.0

10.2. 转换

MultivariateTransformer 将单变量时间序列的任意转换器扩展到多变量时间序列:为多变量时间序列的每个特征拟合一个转换器,然后对每个特征执行转换。flatten 参数控制输出的形状。如果每个转换具有相同的形状,flatten=False 不会展平输出,而 flatten=True 会展平输出。如果某些转换的形状不同,输出总是会被展平。

>>> from pyts.datasets import load_basic_motions
>>> from pyts.multivariate.transformation import MultivariateTransformer
>>> from pyts.image import GramianAngularField
>>> X, _, _, _ = load_basic_motions(return_X_y=True)
>>> transformer = MultivariateTransformer(GramianAngularField(),
...                                       flatten=False)
>>> X_new = transformer.fit_transform(X)
>>> X_new.shape
(40, 6, 100, 100)
>>> transformer.set_params(flatten=True)
>>> X_new = transformer.fit_transform(X)
>>> X_new.shape
(40, 60000)

WEASELMUSEWEASEL 针对多变量时间序列的扩展。它代表 WEASEL 加上 Multivariate(多变量) Unsupervised(无监督) Symbols(符号)和 dErivatives(导数)。 该方法会对原始时间序列及其导数中的每个特征进行词汇提取,并统计其出现频率。

../_images/sphx_glr_plot_weasel_muse_001.png
>>> from pyts.datasets import load_basic_motions
>>> from pyts.multivariate.transformation import WEASELMUSE
>>> X_train, X_test, y_train, y_test = load_basic_motions(return_X_y=True)
>>> transformer = WEASELMUSE()
>>> X_new = transformer.fit_transform(X_train, y_train)
>>> X_new.shape
(40, 9086)

分类任务可以使用任何标准分类器来完成。在下面的示例中,我们使用了逻辑回归:

>>> from pyts.datasets import load_basic_motions
>>> from pyts.multivariate.transformation import WEASELMUSE
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.linear_model import LogisticRegression
>>> X_train, X_test, y_train, y_test = load_basic_motions(return_X_y=True)
>>> transformer = WEASELMUSE()
>>> logistic = LogisticRegression(solver='liblinear', multi_class='ovr')
>>> clf = make_pipeline(transformer, logistic)
>>> clf.fit(X_train, y_train)
Pipeline(...)
>>> clf.score(X_test, y_test)
0.975

参考文献

  • P. Schäfer 和 U. Leser 合著的论文《基于WEASEL+MUSE的多变量时间序列分类》,发表于ACM会议论文集(2017年)。

10.3. 图像

JointRecurrencePlotRecurrence Plot在多变量时间序列上的扩展。对于多变量时间序列的每个特征,都会构建一个递归图。通过所有矩阵之间的Hadamard乘积,这些递归图集合会被合并成一个联合递归图。

../_images/sphx_glr_plot_joint_rp_001.png
>>> from pyts.datasets import load_basic_motions
>>> from pyts.multivariate.image import JointRecurrencePlot
>>> X, _, _, _ = load_basic_motions(return_X_y=True)
>>> transformer = JointRecurrencePlot()
>>> X_new = transformer.transform(X)
>>> X_new.shape
(40, 100, 100)

参考文献

  • M. Romano, M. Thiel, J. Kurths 和 W. con Bloh,《多元递归图》,物理学快报A(2004)