开始#

以下信息旨在帮助用户快速上手并运行 sktime。有关更详细的信息,请参阅每个小节中的链接。

安装#

sktime 目前支持

  • python 版本 3.8, 3.9, 3.10, 3.11 或 3.12 的环境。

  • 操作系统 Mac OS X, Unix-like OS, Windows 8.1 及更高版本

  • 通过 PyPiconda 安装

有关软件包安装的逐步说明,请参阅安装指南。

关键概念#

sktime 旨在为多种时间序列机器学习任务提供统一框架。这(希望如此)使得 sktime 的功能对用户来说更直观,并让开发者更容易扩展框架。但时间序列数据及相关的科学用例可能各有多种形式。因此,一套共同的概念和术语集至关重要。

数据类型#

sktime 专为时间序列机器学习设计。时间序列数据是指变量按时间或指示观测值在序列中位置的索引排序的数据。

sktime 中,时间序列数据可以是单变量、多变量或面板数据,其区别在于时间序列变量的数量及相互关系,以及观察每个变量的实例数量。

  • 单变量时间序列数据是指随时间跟踪单个变量的数据。

  • 多变量时间序列数据是指在同一实例上随时间跟踪多个变量的数据。例如,一个国家的多个季度经济指标,或同一台机器的多个传感器读数。

  • 面板时间序列数据是指跟踪多个实例(单变量或多变量)的数据。例如,多个国家的多个季度经济指标,或多台机器的多个传感器读数。

学习任务#

sktime's 的各项学习任务功能核心在于提供一套代码构件,这些构件与给定科学目的(即科学类型scitype)的通用接口相匹配。例如,sktime 包含一个用于“预测器”(forecaster)类的通用接口,这些类旨在预测时间序列的未来值。

sktime 的接口目前支持

  • 时间序列分类,其中给定实例的时间序列数据用于预测一个分类目标类。

  • 时间序列回归,其中给定实例的时间序列数据用于预测一个连续目标值。

  • 时间序列聚类,其目标是发现包含相似时间序列的实例组。

  • 预测,其目标是预测输入序列的未来值。

  • 时间序列标注,侧重于异常值检测、异常检测、变化点检测和分段。

归约#

虽然上面的列表分别列出了每项学习任务,但在许多情况下,可以调整一项学习任务来帮助解决另一项相关的学习任务。例如,预测的一种方法是使用明确考虑数据时间维度的回归模型。然而,另一种方法是将预测问题归约为横截面回归,其中输入数据被表格化,并且数据的滞后被视为 scikit-learn 风格的表格回归算法中的独立特征。同样,对于像异常检测这样的时间序列标注任务,一种方法是将其归约为使用预测器预测未来值,并将与这些预测相距太远的观测值标记为异常。sktime 通常通过使用可组合类来整合这些类型的归约,这些类允许用户调整一项学习任务来解决另一项相关的任务。

有关 sktime 的术语和功能的更多信息,请参阅常用术语表notebook 示例

快速入门#

下面的代码片段旨在介绍 sktime 的功能,以便您可以快速开始使用它。有关更详细的信息,请参阅 sktime 文档中的教程Notebook 示例API 参考

预测#

>>> from sktime.datasets import load_airline
>>> from sktime.forecasting.base import ForecastingHorizon
>>> from sktime.forecasting.theta import ThetaForecaster
>>> from sktime.performance_metrics.forecasting import mean_absolute_percentage_error
>>> from sktime.split import temporal_train_test_split

>>> y = load_airline()
>>> y_train, y_test = temporal_train_test_split(y)
>>> fh = ForecastingHorizon(y_test.index, is_relative=False)
>>> forecaster = ThetaForecaster(sp=12)  # monthly seasonal periodicity
>>> forecaster.fit(y_train)
>>> y_pred = forecaster.predict(fh)
>>> mean_absolute_percentage_error(y_test, y_pred)
0.08661467738190656

时间序列分类#

>>> from sktime.classification.interval_based import TimeSeriesForestClassifier
>>> from sktime.datasets import load_arrow_head
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.metrics import accuracy_score

>>> X, y = load_arrow_head()
>>> X_train, X_test, y_train, y_test = train_test_split(X, y)
>>> classifier = TimeSeriesForestClassifier()
>>> classifier.fit(X_train, y_train)
>>> y_pred = classifier.predict(X_test)
>>> accuracy_score(y_test, y_pred)
0.8679245283018868

时间序列回归#

>>> from sktime.datasets import load_covid_3month
>>> from sktime.regression.distance_based import KNeighborsTimeSeriesRegressor
>>> from sklearn.metrics import mean_squared_error

>>> X_train, y_train = load_covid_3month(split="train")
>>> y_train = y_train.astype("float")
>>> X_test, y_test = load_covid_3month(split="test")
>>> y_test = y_test.astype("float")
>>> regressor = KNeighborsTimeSeriesRegressor()
>>> regressor.fit(X_train, y_train)
>>> y_pred = regressor.predict(X_test)
>>> mean_squared_error(y_test, y_pred)

时间序列聚类#

>>> from sklearn.model_selection import train_test_split
>>> from sktime.clustering.k_means import TimeSeriesKMeans
>>> from sktime.clustering.utils.plotting._plot_partitions import plot_cluster_algorithm
>>> from sktime.datasets import load_arrow_head

>>> X, y = load_arrow_head()
>>> X_train, X_test, y_train, y_test = train_test_split(X, y)

>>> k_means = TimeSeriesKMeans(n_clusters=5, init_algorithm="forgy", metric="dtw")
>>> k_means.fit(X_train)
>>> plot_cluster_algorithm(k_means, X_test, k_means.n_clusters)

时间序列标注#

警告

时间序列标注 API 处于实验阶段,未来版本中可能会发生变化。

>>> from sktime.detection.adapters import PyODAnnotator
>>> from pyod.models.iforest import IForest
>>> from sktime.datasets import load_airline
>>> y = load_airline()
>>> pyod_model = IForest()
>>> pyod_sktime_annotator = PyODAnnotator(pyod_model)
>>> pyod_sktime_annotator.fit(y)
>>> annotated_series = pyod_sktime_annotator.predict(y)