开始#
以下信息旨在帮助用户快速上手并运行 sktime
。有关更详细的信息,请参阅每个小节中的链接。
安装#
sktime
目前支持
python 版本 3.8, 3.9, 3.10, 3.11 或 3.12 的环境。
操作系统 Mac OS X, Unix-like OS, Windows 8.1 及更高版本
通过
PyPi
或conda
安装
有关软件包安装的逐步说明,请参阅安装指南。
关键概念#
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)