# SOFTS: 时间序列预测的最新模型以及Python使用示例

## SOFTS介绍

SOFTS是 Series-cOre Fused Time Series的缩写，背后的动机来自于长期多元预测对决策至关重要的认识：

iTransformer 通过嵌入整个序列部分地解决了这个问题，并通过注意机制处理它们。但是基于transformer的模型在计算上是复杂的，并且需要更多的时间来训练非常大的数据集。

1、归一化与嵌入

## 使用SOFTS预测

 pip install git+https://github.com/Nixtla/neuralforecast.git


 import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from datasetsforecast.long_horizon import LongHorizon

from neuralforecast.core import NeuralForecast
from neuralforecast.losses.pytorch import MAE, MSE
from neuralforecast.models import SOFTS, PatchTST, TSMixer, iTransformer

from utilsforecast.losses import mae, mse
from utilsforecast.evaluation import evaluate


 def load_data(name):
if name == "ettm1":
Y_df = Y_df[Y_df['unique_id'] == 'OT'] # univariate dataset
Y_df['ds'] = pd.to_datetime(Y_df['ds'])
val_size = 11520
test_size = 11520
freq = '15T'
elif name == "ettm2":
Y_df['ds'] = pd.to_datetime(Y_df['ds'])
val_size = 11520
test_size = 11520
freq = '15T'

return Y_df, val_size, test_size, freq


1、单变量预测

 Y_df, val_size, test_size, freq = load_data('ettm1')

horizon = 96


 models = [
SOFTS(h=horizon, input_size=3*horizon, n_series=1, max_steps=1000, early_stop_patience_steps=3),
TSMixer(h=horizon, input_size=3*horizon, n_series=1, max_steps=1000, early_stop_patience_steps=3),
iTransformer(h=horizon, input_size=3*horizon, n_series=1, max_steps=1000, early_stop_patience_steps=3),
PatchTST(h=horizon, input_size=3*horizon, max_steps=1000, early_stop_patience_steps=3)
]


 nf = NeuralForecast(models=models, freq=freq)
nf_preds = nf.cross_validation(df=Y_df, val_size=val_size, test_size=test_size, n_windows=None)
nf_preds = nf_preds.reset_index()


 ettm1_evaluation = evaluate(df=nf_preds, metrics=[mae, mse], models=['SOFTS', 'TSMixer', 'iTransformer', 'PatchTST'])


2、多变量预测

 Y_df, val_size, test_size, freq = load_data('ettm2')

horizon = 96


 models = [SOFTS(h=horizon, input_size=3*horizon, n_series=7, max_steps=1000, early_stop_patience_steps=3, scaler_type='identity', valid_loss=MAE()),
TSMixer(h=horizon, input_size=3*horizon, n_series=7, max_steps=1000, early_stop_patience_steps=3, scaler_type='identity', valid_loss=MAE()),
iTransformer(h=horizon, input_size=3*horizon, n_series=7, max_steps=1000, early_stop_patience_steps=3, scaler_type='identity', valid_loss=MAE())]


 nf = NeuralForecast(models=models, freq='15min')

nf_preds = nf.cross_validation(df=Y_df, val_size=val_size, test_size=test_size, n_windows=None)
nf_preds = nf_preds.reset_index()


 ettm2_evaluation = evaluate(df=nf_preds, metrics=[mae, mse], models=['SOFTS', 'TSMixer', 'iTransformer'])


## 总结

SOFTS: Efficient Multivariate Time Series Forecasting with Series-Core Fusion

https://avoid.overfit.cn/post/6254097fd18d479ba7fd85efcc49abac

|
1天前
|

【7月更文挑战第22天】 使用Python实现深度学习模型：个性化推荐与广告优化
125 70
|
1天前
|

【7月更文挑战第23天】在Python机器学习中,模型评估不可或缺。Matplotlib与Seaborn作为数据可视化工具,助力洞察模型性能。Matplotlib基础灵活,构建复杂图表;Seaborn在其上层,简化绘图,提升美观。从折线图追踪损失到条形图对比准确率,两者互补,促进高效决策制定。尽管Matplotlib掌控力强,但Seaborn友好快捷,适于统计图形。结合使用,可将数据转化成深刻见解。
12 6
|
2天前
|

【7月更文第22天】在机器学习的实践中，特征选择是一项至关重要的步骤，它直接影响到模型的性能、训练速度以及对新数据的泛化能力。特征选择，或称为变量选择，旨在从原始特征集中识别并保留最相关、最有影响力的特征子集，同时剔除冗余或无关紧要的特征。本文将探讨特征选择的重要性，并通过使用Python中的Scikit-learn库演示几种有效的特征选择方法，以提升模型性能。
18 4
|
2天前
|

【7月更文挑战第20天】 使用Python实现深度学习模型：自然语言理解与问答系统
11 0
|
2天前
|

【7月更文挑战第21天】 使用Python实现深度学习模型：语言翻译与多语种处理
13 0
|
2月前
|
Python 数据可视化 索引
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
201 0
|
2月前
|

Python用 tslearn 进行时间序列聚类可视化
Python用 tslearn 进行时间序列聚类可视化
31 0
|

1804 0
|
15天前
|

【7月更文挑战第9天】Python并发编程提升效率：**理解并发与并行，线程借助threading模块处理IO密集型任务，受限于GIL；进程用multiprocessing实现并行，绕过GIL限制。示例展示线程和进程创建及同步。选择合适模型，注意线程安全，利用多核，优化性能，实现高效并发编程。
28 3
|
15天前
|

Python编程：如何有效等待套接字的读取与关闭
Python网络编程中，套接字事件处理至关重要。利用selectors模块和代理IP能增强程序的稳定性和可靠性。代码示例展示了如何通过代理连接目标服务器，注册套接字的读写事件并高效处理。在代理IP配置、连接创建、事件循环及回调函数中，实现了数据收发与连接管理，有效应对网络爬虫或聊天应用的需求，同时保护了真实IP。
18 1