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)
WEASELMUSE 是 WEASEL 针对多变量时间序列的扩展。它代表 WEASEL 加上
Multivariate(多变量) Unsupervised(无监督) Symbols(符号)和 dErivatives(导数)。
该方法会对原始时间序列及其导数中的每个特征进行词汇提取,并统计其出现频率。
>>> 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. 图像¶
JointRecurrencePlot 是Recurrence Plot在多变量时间序列上的扩展。对于多变量时间序列的每个特征,都会构建一个递归图。通过所有矩阵之间的Hadamard乘积,这些递归图集合会被合并成一个联合递归图。
>>> 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)

