binder

基于字典的时间序列分类在aeon中

基于字典的方法适应了常用于信号处理、计算机视觉和音频处理中的词袋模型,用于时间序列分类。与基于shapelet的算法类似,字典方法通过在时间序列上滑动窗口来使用相位无关的子序列。然而,与shapelets中测量序列和子序列之间的距离不同,每个窗口被转换为一个词,并测量重复模式的出现频率。 遵循字典模型的算法通过以下方式构建分类器:

  • 从时间序列中提取子序列,也称为窗口:

  • 将每个实数值窗口转换为离散值的单词(在固定字母表上的符号序列);

  • 构建一个单词计数直方图的稀疏特征向量;最后

  • 在这些特征向量上使用机器学习库中的分类方法。

该图展示了从原始时间序列到使用重叠窗口的字典模型的这些步骤。

62ab04b435cb403abef92c75d95256ce 基于字典的方法在第2步中将实值测量窗口转换为离散词(这一过程通常称为离散化)的方式有所不同。许多方法基于一种称为符号傅里叶近似(Symbolic Fourier Approximation,SFA)的表示方法。为了从一系列连续值窗口中创建离散词,SFA遵循以下步骤:

  • 每个窗口中的值被归一化,使其标准差为1。

  • 每个归一化窗口的维度通过使用截断傅里叶变换来减少:窗口子序列使用快速傅里叶变换进行转换,并且只保留前几个系数。

  • 每个系数被离散化为一个固定大小的字母表中的一个符号,以形成一个单词。

从窗口创建单词需要三个参数:

  • ‘window_size’ 指定每个窗口的长度;

  • ‘length’ 指定了用于减少实值窗口长度的缩减序列长度;并且

  • ‘alphabet_size’ 是离散化过程中使用的字母表中的字母数量。

这些核心参数通常在内部是固定的。目前,aeon中实现了四种基于字典的分类器,它们都利用符号傅里叶近似(SFA)[1]变换将数据离散化为单词。这些分类器包括SFA符号袋(BOSS)[2]、可收缩的SFA符号袋(cBOSS)[3]、时间序列分类的单词提取(WEASEL)[4]和时间字典集成(TDE)[5]。WEASEL有一个多变量扩展版本称为MUSE[8],而TDE具备多变量能力。我们在此笔记本中总结了它们的特性并给出了使用示例。更多技术细节可在[8]中找到。

导入和加载数据

aeon 目前有以下基于字典的分类器:

[1]:
import warnings

from sklearn import metrics

from aeon.classification.dictionary_based import (
    MUSE,
    WEASEL,
    BOSSEnsemble,
    ContractableBOSS,
    IndividualBOSS,
    TemporalDictionaryEnsemble,
)
from aeon.datasets import load_basic_motions, load_italy_power_demand
from aeon.utils.discovery import all_estimators

warnings.filterwarnings("ignore")
all_estimators("classifier", tag_filter={"algorithm_type": "dictionary"})
[1]:
名称 估计器
0 BOSSEnsemble
1 ContractableBOSS
2 MUSE
3 OrdinalTDE
4 时间字典集成
5 WEASEL
6 WEASEL_V2
[13]:
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)
[13]:
[('BOSSEnsemble', aeon.classification.dictionary_based._boss.BOSSEnsemble),
 ('ContractableBOSS',
  aeon.classification.dictionary_based._cboss.ContractableBOSS),
 ('MUSE', aeon.classification.dictionary_based._muse.MUSE),
 ('TemporalDictionaryEnsemble',
  aeon.classification.dictionary_based._tde.TemporalDictionaryEnsemble),
 ('WEASEL', aeon.classification.dictionary_based._weasel.WEASEL),
 ('WEASEL_V2', aeon.classification.dictionary_based._weasel_v2.WEASEL_V2)]

SFA符号包(BOSS):IndividualBOSSBOSSEnsemblecBOSS

BOSS 是一组使用 SFA 变换的单个 BOSS 分类器的集合。IndividualBOSS 具有参数 window_size\(w\))默认值为 10,word_length\(l\))默认值为 8,以及 alphabet_size\(\alpha\))默认值为 4。使用 IndividualBOSS 分类器的算法通过改变其参数来多样化其成员的集合。

BOSSEnsemble 分类器是 IndividualBOSS 分类器的集合。它通过大量的 window_size(默认值为10)、word_length(默认值为8)和 alphabet_size(布尔值,表示是否对每个窗口进行归一化)参数组合进行网格搜索。在搜索的分类器中,只有那些准确率在最佳分类器的92%以内的分类器会被保留。单个 BOSS 分类器使用非对称距离函数,即 BOSS 距离,结合最近邻分类器。BOSS 内部会自动调整,因此需要更改的参数很少。通常应使用默认设置运行。

cBOSS通过改进集成形成方式,显著加快了BOSS的速度,而准确率没有显著差异。cBOSS随机选择一组参数\(w\)\(l\)\(\alpha\),并在集成中保留最佳的max_ensemble_sizeIndividualBOSS分类器,其中最佳意味着在训练数据上的估计准确率最高。集成中保留的IndividualBOSS分类器的数量和随机生成的参数测试数量是参数max_ensemble_size(默认50)和n_parameter_samples(默认250)。n_parameter_samples参数可以用最大运行时间限制参数time_limit_in_minutes替换。设置此参数将使分类器在指定的时间内随机采样参数。我们称这种能力为合同。

[14]:
one_boss = IndividualBOSS(window_size=8, word_length=4, alphabet_size=6)
boss = BOSSEnsemble(random_state=47)
boss.fit(X_train, y_train)

boss_preds = boss.predict(X_test)
print("BOSS Accuracy: " + str(metrics.accuracy_score(y_test, boss_preds)))
cboss = ContractableBOSS(n_parameter_samples=250, max_ensemble_size=50, random_state=47)
cboss.fit(X_train, y_train)

cboss_preds = cboss.predict(X_test)
print("cBOSS Accuracy: " + str(metrics.accuracy_score(y_test, cboss_preds)))

时间序列分类的单词提取(WEASEL)

WEASEL 使用滑动窗口方法将时间序列转换为特征向量,然后通过机器学习分类器进行分析。WEASEL 的创新之处在于其特定的特征提取方法,从而生成比 BOSS 更小但更具区分性的特征集。它通过双字母组合、使用 Anova-f 检验和信息增益分箱(IGB)进行特征选择来扩展 SFA。

[15]:
weasel = WEASEL(binning_strategy="equi-depth", anova=False, random_state=47)
weasel.fit(X_train, y_train)

weasel_preds = weasel.predict(X_test)
print(
    f"Univariate WEASEL Accuracy on ItalyPowerDemand: "
    f"{metrics.accuracy_score(y_test, weasel_preds)}"
)

muse = MUSE()
muse.fit(X_train_mv, y_train_mv)

muse_preds = muse.predict(X_test_mv)
print(
    f"Multivariate MUSE Accuracy on BasicMotions: "
    f"{metrics.accuracy_score(y_test_mv, muse_preds)}"
)

时间字典集成 (TDE)

TemporalDictionaryEnsemble (TDE) 结合了cBOSS和WEASEL的最佳组件,并采用了计算机视觉中使用的空间金字塔概念,这一概念最初是在名为Spatial BOSS [6]的算法中应用于此背景的。空间金字塔将时间序列分割成连续的片段,并构建字典

7ba246a1350d40de9e48beb782782205

在金字塔的顶层,使用整个系列。cBOSS分类器建立在使用WEASEL提出的二元组和信息增益分箱(IGB)的整个系列上。在下一层,cBOSS分类器分别在系列的每一半上独立构建。在第三层,使用系列的四分之一。一旦到达最后一层,所有的直方图都会被连接起来。

由于额外的参数,TDE模型的搜索参数空间要大得多。与随机搜索参数组合不同,在randomly_selected_params模型评估之后,使用高斯过程回归器选择新的参数集来评估集成,利用过去的分类器性能预测一组参数值的准确性。这提高了整体性能。与cBOSS一样,TDE是可收缩的,即您可以使用time_limit_in_minutes参数指定近似的最长训练时间。

[16]:
# Recommended non-contract TDE parameters
tde = TemporalDictionaryEnsemble(
    n_parameter_samples=250,
    max_ensemble_size=50,
    randomly_selected_params=50,
    random_state=47,
)

# If you wish to set a time contract to, for example, 5 minutes,
# set time_limit_in_minutes = 5 in the constructor
# Univariate
tde.fit(X_train, y_train)

tde_preds = tde.predict(X_test)
print(
    "TDE Accuracy on ItalyPowerDemand: "
    + str(metrics.accuracy_score(y_test, tde_preds))
)
tde.fit(X_train_mv, y_train_mv)

tde_preds = tde.predict(X_test_mv)
print(
    f"TDE Accuracy on BasicMotions: " f"{metrics.accuracy_score(y_test_mv, tde_preds)}"
)

UCR单变量数据集上的性能

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

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

est = all_estimators("classifier", tag_filter={"algorithm_type": "dictionary"})
for c in est:
    print(c)
('BOSSEnsemble', <class 'aeon.classification.dictionary_based._boss.BOSSEnsemble'>)
('ContractableBOSS', <class 'aeon.classification.dictionary_based._cboss.ContractableBOSS'>)
('MUSE', <class 'aeon.classification.dictionary_based._muse.MUSE'>)
('OrdinalTDE', <class 'aeon.classification.ordinal_classification._ordinal_tde.OrdinalTDE'>)
('REDCOMETS', <class 'aeon.classification.dictionary_based._redcomets.REDCOMETS'>)
('TemporalDictionaryEnsemble', <class 'aeon.classification.dictionary_based._tde.TemporalDictionaryEnsemble'>)
('WEASEL', <class 'aeon.classification.dictionary_based._weasel.WEASEL'>)
('WEASEL_V2', <class 'aeon.classification.dictionary_based._weasel_v2.WEASEL_V2'>)
[2]:
from aeon.benchmarking.results_loaders import get_estimator_results_as_array
from aeon.datasets.tsc_datasets import univariate

names = [t[0] for t in est]
names.remove("MUSE")  # Multivariate classifier
names.remove("OrdinalTDE")  # Ordinal classifier
names.remove("REDCOMETS")  # We still need to evaluate this classifier
names.remove("MrSEQLClassifier")  # We still need to evaluate this classifier

results, present_names = get_estimator_results_as_array(
    names, univariate, include_missing=False
)
results.shape
[2]:
(112, 5)
[3]:
from aeon.visualisation import plot_boxplot, plot_critical_difference

plot_critical_difference(results, names)
[3]:
(<Figure size 600x240 with 1 Axes>, <Axes: >)
../../_images/examples_classification_dictionary_based_12_1.png
[4]:
plot_boxplot(results, names, relative=True)
[4]:
(<Figure size 1000x600 with 1 Axes>, <Axes: >)
../../_images/examples_classification_dictionary_based_13_1.png

参考文献:

[1] Schäfer, P., & Högqvist, M. (2012). SFA: 一种用于高维数据集中相似性搜索的符号傅里叶近似和索引。在第十五届国际数据库技术扩展会议论文集(第516-527页)中。

[2] Schäfer, P. (2015). BOSS关注的是在存在噪声的情况下进行时间序列分类。数据挖掘与知识发现, 29(6), 1505-1530.

[3] Middlehurst, M., Vickers, W., & Bagnall, A. (2019). 可扩展的字典分类器用于时间序列分类。在国际智能数据工程与自动化学习会议上(第11-19页)。Springer, Cham.

[4] Schäfer, P., & Leser, U. (2017). 使用WEASEL进行快速准确的时间序列分类。在2017年ACM信息与知识管理会议论文集(第637-646页)中。

[5] Middlehurst, M., Large, J., Cawley, G., & Bagnall, A. (2020). 时间序列分类的时间字典集成(TDE)分类器。在欧洲机器学习和知识发现数据库原理与实践会议上。

[6] Large, J., Bagnall, A., Malinowski, S., & Tavenard, R. (2019). 关于基于字典的分类器在时间序列分类中的应用。智能数据分析, 23(5), 1073-1089.

[7] Schäfer, P., & Leser, U. (2018). 使用WEASEL+MUSE进行多变量时间序列分类。第三届ECML/PKDD AALTD研讨会。

[8] Middlehurst, M., Schäfer, P., & Bagnall, A. (2023). 重新审视烘焙大赛:近期时间序列分类算法的回顾与实验评估。 [ArXive] (https://arxiv.org/abs/2304.13029)

[ ]:


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