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))
热门推荐
动画《成何体统》剧情介绍
以案释法 | 出借你的微信账号?有风险!
如何正确理解AC耦合电容,选择性能更好的高频PCB板材料?
2024年度个人所得税经营所得汇算清缴指南:办理时间、渠道及操作步骤详解
电脑怎么用Excel做课程表
Transformer创作者争相探索的新领域!模型融合技术,高分高效不内卷!
勇者斗恶龙 9职业系统深度解析:多样化选择与独特成长路径
如何分析龙头股的财务报表?
狗狗英语大集合:从品种到行为的全面表达
智能人事考勤系统架构:提升企业管理效率与员工体验
梅花怎么描写?——写出傲骨寒香的秘诀!
探索未知的奇幻之旅:儒勒·凡尔纳的文学世界
为什么要关注股市的稳定发展?这种关注对投资者有哪些帮助?
无线充发射线圈散热解决办法
热火二队认领后场新秀,他在灰熊和开拓者二队表现如何?
这6种蔬菜晒干后,比新鲜的更好吃!生吃炖肉都行,放1年都不坏
立秋后,这5种蔬菜晒成干,留到冬天,炒菜炖肉都比新鲜的还美味
三亚酒店价格“雪崩”?当地旅游发展局回应
外功内功新技,武学技能全面提升!
大模型也可能犯罪?从人类角度对大模型越狱进行思考
派币真实报道:南通公安通报!实为传销,营销风险极大!
试用期考核自我评价范文合集
如何制定劳动合同
红楼梦:林黛玉、薛宝钗、史湘云其实是一个人,一个人的不同阶段
刺激与乐趣并存探索清远黄腾峡漂流之旅,深度体验与必玩指南
DSA和CTA的区别
运钞员为何偏爱霰弹枪?解析警用枪械选择背后的深意
中专教育与社会服务:利用专业技能服务社会
在日本生活必备的各类交通卡和会员卡详解
打造紧密型县域医共体 护航基层百姓生命健康