binder

使用 sktime 进行基准测试#

基准测试模块允许您轻松编排基准测试实验,在这些实验中,您希望比较一个或多个算法在一个或多个数据集上的性能。它还提供了许多统计测试,以检查观察到的性能差异是否具有统计显著性。

基准测试模块基于 mlaut

预备知识#

[1]:
# import required functions and classes
import os
import warnings

from sklearn.metrics import accuracy_score

from sktime.benchmarking.data import UEADataset, make_datasets
from sktime.benchmarking.evaluation import Evaluator
from sktime.benchmarking.metrics import PairwiseMetric
from sktime.benchmarking.orchestration import Orchestrator
from sktime.benchmarking.results import HDDResults
from sktime.benchmarking.strategies import TSCStrategy
from sktime.benchmarking.tasks import TSCTask
from sktime.classification.interval_based import (
    RandomIntervalSpectralEnsemble,
    TimeSeriesForestClassifier,
)
from sktime.series_as_features.model_selection import PresplitFilesCV

# hide warnings
warnings.filterwarnings("ignore")

设置路径#

[2]:
# set up paths to data and results folder
import sktime

DATA_PATH = os.path.join(os.path.dirname(sktime.__file__), "datasets/data")
RESULTS_PATH = "results"

创建指向硬盘上数据集的指针#

这里我们使用 UEADataset ,它遵循 UEA/UCR 格式 ,以及 sktime 中包含的一些时间序列分类数据集。

[3]:
# Create individual pointers to dataset on the disk
datasets = [
    UEADataset(path=DATA_PATH, name="ArrowHead"),
    UEADataset(path=DATA_PATH, name="ItalyPowerDemand"),
]
[4]:
# Alternatively, we can use a helper function to create them automatically
datasets = make_datasets(
    path=DATA_PATH, dataset_cls=UEADataset, names=["ArrowHead", "ItalyPowerDemand"]
)

对于每个数据集,我们还需要指定一个学习任务#

学习任务封装了定义我们试图解决的问题的所有信息和指令。在我们的例子中,我们试图解决分类任务,我们需要的关键信息是数据集中我们试图预测的目标变量的名称。这里所有的任务都是相同的,因为在所有数据集中目标变量的名称是相同的。

[5]:
tasks = [TSCTask(target="target") for _ in range(len(datasets))]

指定学习策略#

在设置了数据集和相应的学习任务后,我们需要定义我们想要评估和比较的算法。

[6]:
# Specify learning strategies
strategies = [
    TSCStrategy(TimeSeriesForestClassifier(n_estimators=10), name="tsf"),
    TSCStrategy(RandomIntervalSpectralEnsemble(n_estimators=10), name="rise"),
]

设置一个结果对象#

结果对象封装了基准测试结果存储的位置和方式,这里我们选择将它们输出到硬盘。

[7]:
# Specify results object which manages the output of the benchmarking
results = HDDResults(path=RESULTS_PATH)

运行基准测试#

最后,我们将所有规范传递给编排器。编排器将自动在所有数据集上训练和评估所有算法,并写出结果。

[8]:
# run orchestrator
orchestrator = Orchestrator(
    datasets=datasets,
    tasks=tasks,
    strategies=strategies,
    cv=PresplitFilesCV(),
    results=results,
)
orchestrator.fit_predict(save_fitted_strategies=False, overwrite_predictions=True)

评估和比较结果#

运行了编排器之后,我们可以评估和比较预测策略。

[9]:
evaluator = Evaluator(results)
metric = PairwiseMetric(func=accuracy_score, name="accuracy")
metrics_by_strategy = evaluator.evaluate(metric=metric)
metrics_by_strategy.head()
[9]:
strategy accuracy_mean accuracy_stderr
0 rise 0.850126 0.019921
1 tsf 0.829563 0.020512

评估器提供了多种额外的评估和比较策略的方法,包括统计假设检验和可视化工具,例如:

[10]:
evaluator.rank()
[10]:
strategy accuracy_mean_rank
0 rise 1.5
1 tsf 1.5

目前,以下功能已实现:

  • evaluator.plot_boxplots()

  • evaluator.ranks()

  • evaluator.t_test()

  • evaluator.sign_test()

  • evaluator.ranksum_test()

  • evaluator.t_test_with_bonferroni_correction()

  • evaluator.wilcoxon_test()

  • evaluator.friedman_test()

  • evaluator.nemenyi()


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