开始#

以下信息旨在帮助用户快速上手 sktime。如需更详细的信息,请参阅每个子部分中的链接。

安装#

sktime 目前支持:

  • 支持 Python 版本 3.8、3.9、3.10、3.11 或 3.12 的环境。

  • 操作系统 Mac OS X、类 Unix 操作系统、Windows 8.1 及更高版本

  • 通过 PyPiconda 安装

请参阅 安装 指南,获取关于包安装的逐步说明。

关键概念#

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

数据类型#

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

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

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

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

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

学习任务#

sktime 的每个学习任务的功能都围绕着提供一组代码工件,这些工件匹配一个给定科学目的的通用接口(即 科学类型科学类型)。例如,sktime 包含一个用于“预测器”类的通用接口,这些类旨在预测时间序列的未来值。

sktime 的接口目前支持:

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

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

  • 时间序列聚类 的目标是发现由相似时间序列实例组成的组。

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

  • 时间序列注释 专注于异常检测、异常检测、变化点检测和分割。

简化#

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

有关 sktime 的术语和功能更多信息,请参阅 术语表笔记本示例

快速开始#

下面的代码片段旨在介绍 sktime 的功能,以便您可以快速开始使用其功能。有关更详细的信息,请参阅 sktime用户文档 中的 教程示例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.annotation.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)