回归预测 OR 时间序列预测

本文讨论了在预测分析中如何选择合适的模型,是回归预测还是时间序列预测。回归预测关注因变量与自变量间的相关性,适用于连续值预测,包括线性回归、多项式回归等。而时间序列预测则关注随时间变化的序列依赖性,常用于预测未来趋势,如ARIMA模型、Holt-Winter模型。在开始建模前,数据通常需要归一化处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在选择正确的模型之前,首先应确定变量的关系和影响!!!区分清楚到底什么选择情况下选择回归预测,什么情况下选择时间序列预测。

回归预测:训练得到的回归模型表示了因变量 y (目标)与自变量 x (x\in \mathbb{R}^{^{^{n}}})(预测因子)之间的相关性,即一个或多个自变量对一个因变量的影响程度,适用于给定新的 x 来预测 y 的情况。

    常用回归模型(因变量 

### Transformer 时间序列预测模型实现方法教程 #### 环境配置 为了成功运行Transformer时间序列预测模型,需先安装必要的Python包。这通常包括PyTorch及其依赖项以及其他辅助工具如NumPyPandas用于数据处理。 ```bash pip install torch torchvision torchaudio pandas numpy matplotlib scikit-learn ``` #### 导入库 在编写代码前,加载所需的库来支持后续的数据操作、模型定义以及训练过程[^1]。 ```python import torch from torch import nn, optim import torch.nn.functional as F import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.preprocessing import MinMaxScaler ``` #### 数据预处理 对于时间序列预测任务来说,准备合适格式的数据至关重要。一般会涉及到读取原始数据文件、清洗异常值、标准化特征尺度等工作。特别地,在输入到Transformer之前,还需要对时间戳做位置编码以保留顺序信息[^2]。 ```python def create_inout_sequences(input_data, tw): inout_seq = [] L = len(input_data) for i in range(L-tw): train_seq = input_data[i:i+tw] train_label = input_data[i+tw:i+tw+1] inout_seq.append((train_seq ,train_label)) return torch.FloatTensor(inout_seq) # Example usage of creating sequences with a time window size. time_window_size = 10 data_normalized = ... # Normalized data here inout_seq = create_inout_sequences(data_normalized, time_window_size) ``` #### 模型构建 基于标准的Transformer架构进行了适当调整——移除了原本最后面的softmax层以便更好地适用于回归性质的时间序列预测问题;同时增加了线性变换其他组件使得输出维度匹配预期目标变量的数量。 ```python class TransAm(nn.Module): def __init__(self, feature_size=250, num_layers=1, dropout=0.1): super(TransAm, self).__init__() self.model_type = 'Transformer' self.src_mask = None self.pos_encoder = PositionalEncoding(feature_size) self.encoder_layer = nn.TransformerEncoderLayer(d_model=feature_size, nhead=10, dropout=dropout) self.transformer_encoder = nn.TransformerEncoder(self.encoder_layer, num_layers=num_layers) self.decoder = nn.Linear(feature_size,1) ... def forward(self, src): if self.src_mask is None or self.src_mask.size(0) != len(src): device = src.device mask = generate_square_subsequent_mask(len(src)).to(device) self.src_mask = mask src = self.pos_encoder(src) output = self.transformer_encoder(src, self.src_mask)#, self.src_mask) output = self.decoder(output) return output model = TransAm().float() criterion = nn.MSELoss() optimizer = torch.optim.AdamW(model.parameters(), lr=0.001) ``` #### 训练循环 设置好损失函数(比如均方误差)之后就可以进入迭代优化阶段了。每次epoch都会遍历全部样本并更新参数直至收敛或达到最大轮次限制为止。 ```python for epoch in range(num_epochs): model.train() running_loss = 0. for batch_idx, (seq, labels) in enumerate(train_loader): optimizer.zero_grad() y_pred = model(seq) loss = criterion(y_pred, labels) loss.backward() optimizer.step() running_loss += loss.item() ``` #### 测试与评估 完成训练后应当利用独立测试集验证最终性能指标如何,并可视化一些典型样本来直观感受预测质量的好坏程度。 ```python with torch.no_grad(): test_predictions = [] for seq_true in test_set: seq_true = seq_true.float().to(device) seq_pred = model(seq_true.unsqueeze(dim=0)) test_predictions.append(seq_pred.cpu().numpy()) plt.plot(test_values[-size:], label='True') plt.plot(np.array(test_predictions).reshape(-1), label='Predicted') plt.legend() plt.show() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值