问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

sktime:时间序列预测与分类的终极指南

创作时间:
作者:
@小白创作中心

sktime:时间序列预测与分类的终极指南

引用
CSDN
1.
https://blog.csdn.net/2401_85373898/article/details/145221701

sktime是一个专门用于时间序列分析和预测的开源Python库,旨在为时间序列数据提供统一的接口和丰富的工具集。它不仅支持传统的时间序列任务(如预测和分类),还集成了多种先进的机器学习算法。

主要功能

时间序列预测 (Forecasting)

  • 支持多种预测算法,包括经典方法(如ARIMA、ETS)和现代机器学习方法(如Prophet、Theta)。
  • 提供时间序列交叉验证、模型评估和调优工具。

时间序列分类 (Time Series Classification)

  • 支持多种分类算法,如基于距离的方法(如k-近邻)、基于树的方法(如随机森林)和深度学习方法(如卷积神经网络)。
  • 提供多种距离度量方法和特征提取工具。

时间序列回归 (Time Series Regression)

  • 支持多变量时间序列回归任务,提供多种回归算法和评估指标。

时间序列聚类 (Time Series Clustering)

  • 提供多种聚类算法,如k-均值、层次聚类和基于密度的聚类方法。
  • 支持基于特征的聚类和基于距离的聚类。

时间序列变换 (Time Series Transformations)

  • 提供多种数据变换方法,如差分、标准化、去趋势化等。
  • 支持时间序列的窗口化、滑动窗口和重采样。

特征提取与工程 (Feature Extraction and Engineering)

  • 提供多种时间序列特征提取方法,如统计特征、频域特征和形态特征。
  • 支持特征选择和降维技术。

模型评估与选择 (Model Evaluation and Selection)

  • 提供多种评估指标,如均方误差(MSE)、平均绝对误差(MAE)、对称平均绝对百分比误差(SMAPE)等。
  • 支持交叉验证、网格搜索和贝叶斯优化等调优方法。

主要特点

统一的接口设计

  • sktime提供了统一的接口,使得用户可以方便地在不同的时间序列任务之间切换。
  • 这种设计简化了模型开发和评估流程,提高了代码的可复用性和可维护性。

模块化架构

  • sktime采用高度模块化的设计,用户可以灵活地组合不同的模块,构建复杂的模型和流水线。
  • 这种架构使得用户可以轻松地扩展和定制自己的时间序列分析流程。

与Scikit-Learn兼容

  • sktime与Scikit-Learn高度兼容,用户可以利用Scikit-Learn的工具和功能来构建、调优和验证时间序列模型。
  • 这种兼容性使得用户可以无缝地将Scikit-Learn的机器学习模型应用于时间序列预测任务。

丰富的算法支持

  • sktime集成了多种经典和现代的时间序列算法,如ARIMA、ETS、Prophet、随机森林、梯度提升树等。
  • 这种丰富的算法支持使得用户可以根据具体需求选择最合适的模型。

强大的功能模块

  • sktime提供了丰富的功能模块,如时间序列分割、距离计算、对齐、特征提取等。
  • 这些模块使得用户可以方便地进行数据预处理、特征工程和模型评估。

与其他框架的对比

特性
sktime
Prophet
statsmodels
tsfresh
TensorFlow/Keras
PyTorch
主要用途
时间序列预测、分类、回归、聚类等
时间序列预测,特别是具有季节性和节假日效应的数据
统计建模、时间序列分析
时间序列特征提取
深度学习模型构建,包括时间序列预测
深度学习模型构建,包括时间序列预测
核心功能
提供统一接口,支持多种时间序列任务
自动处理季节性、节假日和趋势变化
经典时间序列模型(如ARIMA、GARCH)
大量时间序列特征提取方法
灵活构建和训练深度学习模型
灵活构建和训练深度学习模型
算法支持
ARIMA、ETS、Prophet、随机森林、梯度提升树、卷积神经网络等
主要基于加法模型,支持季节性和节假日调整
ARIMA、GARCH、VAR等经典统计模型
主要用于特征提取,不直接提供预测模型
支持各种神经网络架构,如RNN、LSTM、GRU、CNN等
支持各种神经网络架构,如RNN、LSTM、GRU、CNN等
灵活性
高,支持模块化设计和自定义模型
中,灵活性较低,主要依赖于内置模型
高,支持自定义模型和扩展
中,主要用于特征提取,灵活性有限
高,支持自定义模型和复杂架构
高,支持自定义模型和复杂架构
易用性
中,需要一定的机器学习基础
高,适合快速建模和预测
中,需要一定的统计和计量经济学知识
中,需要一定的特征工程知识
低,需要深入的深度学习知识
低,需要深入的深度学习知识
与Scikit-Learn兼容性
高,完全兼容,可以无缝集成Scikit-Learn的工具和功能
低,不直接与Scikit-Learn兼容
中,部分兼容,可以与Scikit-Learn一起使用
高,可以与Scikit-Learn的工具和功能集成
低,虽然可以使用Scikit-Learn进行预处理,但深度学习部分不直接兼容
低,虽然可以使用Scikit-Learn进行预处理,但深度学习部分不直接兼容
社区与支持
活跃的社区和持续的开发
活跃的社区,但主要维护者是Facebook
活跃的社区,广泛用于学术和工业领域
活跃的社区,主要用于特征提取
活跃的社区,广泛用于深度学习领域
活跃的社区,广泛用于深度学习领域
可视化工具
有限,主要依赖于第三方库
强大,提供内置的可视化工具
有限,主要依赖于第三方库
有限,主要依赖于第三方库
有限,主要依赖于第三方库
有限,主要依赖于第三方库
文档与教程
良好的文档和教程,适合初学者和中级用户
良好的文档和教程,适合初学者
良好的文档和教程,适合中级和高级用户
有限的文档和教程,主要面向特征提取
丰富的文档和教程,适合深度学习初学者和专家
丰富的文档和教程,适合深度学习初学者和专家
性能
高效,适合中大型数据集
中等,适合中小型数据集
高效,适合中小型数据集
高效,主要用于特征提取
高效,适合大型数据集和复杂模型
高效,适合大型数据集和复杂模型
扩展性
高,支持自定义模型和扩展
中,主要依赖于内置模型
高,支持自定义模型和扩展
中,主要用于特征提取
高,支持自定义模型和复杂架构
高,支持自定义模型和复杂架构
适用场景
适合需要综合处理时间序列数据的应用,如预测、分类、回归等
适合具有明显季节性和节假日效应的预测任务
适合需要经典统计模型的分析任务
适合需要复杂特征提取的时间序列分析任务
适合需要深度学习模型的时间序列预测和分类任务
适合需要深度学习模型的时间序列预测和分类任务

代码示例

时间序列预测

from sktime.datasets import load_airline
from sktime.forecasting.model_selection import temporal_train_test_split
from sktime.forecasting.arima import ARIMA
from sktime.performance_metrics.forecasting import smape_loss

# 加载数据
y = load_airline()

# 划分训练集和测试集
y_train, y_test = temporal_train_test_split(y, test_size=36)

# 定义预测器
fh = np.arange(1, len(y_test) + 1)
forecaster = ARIMA(order=(1, 1, 1), seasonal_order=(0, 1, 1, 12))

# 拟合模型
forecaster.fit(y_train)

# 进行预测
y_pred = forecaster.predict(fh)

# 输出结果
print("Forecast:")
print(y_pred)
print("SMAPE loss:", smape_loss(y_test, y_pred))

时间序列分类

from sktime.datasets import load_gunpoint
from sktime.classification.ensemble import TimeSeriesForestClassifier
from sklearn.metrics import accuracy_score

# 加载数据
X_train, y_train = load_gunpoint(split="train", return_X_y=True)
X_test, y_test = load_gunpoint(split="test", return_X_y=True)

# 定义分类器
classifier = TimeSeriesForestClassifier()

# 拟合模型
classifier.fit(X_train, y_train)

# 进行预测
y_pred = classifier.predict(X_test)

# 输出结果
print("Accuracy:", accuracy_score(y_test, y_pred))

时间序列特征提取

from sktime.datasets import load_italy_power_demand
from sktime.transformations.panel.rocket import Rocket
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 加载数据
X_train, y_train = load_italy_power_demand(split="train", return_X_y=True)
X_test, y_test = load_italy_power_demand(split="test", return_X_y=True)

# 定义特征提取器
rocket = Rocket(num_kernels=10000)

# 提取特征
X_train_transformed = rocket.fit_transform(X_train)
X_test_transformed = rocket.transform(X_test)

# 定义分类器
classifier = RandomForestClassifier(n_estimators=100)

# 拟合模型
classifier.fit(X_train_transformed, y_train)

# 进行预测
y_pred = classifier.predict(X_test_transformed)

# 输出结果
print("Accuracy:", accuracy_score(y_test, y_pred))
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号