效果一览
基本介绍
MAMBAS,transformer
python代码,pytorch架构
可以发刊,先发先的,高精度代码。
需知:好的创新性模型可以事半功倍。。
适合功率预测,风电光伏预测,负荷预测,流量预测,浓度预测,机械领域预测等等各种时间序列直接预测。
MAMBAS是在2024年5月顶会提出的一个对MAMBA的改进版。首先,简单地让 SSM 参数成为输入的函数,解决了它们在离散模态方面的弱点,允许模型根据当前标记选择性地沿序列长度维度传播或忘记信息。其次,尽管这种变化阻止了高效卷积的使用,但我们在循环模式下设计了一种硬件感知的并行算法。我们将这些选择性 SSM 集成到一个简化的端到端神经网络架构中,无需注意,甚至没有 MLP 块。
创新性非常高。改都不改发3区以上完全够用,效果也不错。代码可以继续添加优化方法,改其他former模型,分解机制,注意力机制等等。
功能如下:
1.多变量输入,单变量输出/可改多输出
2.多时间步预测,单时间步预测
3.评价指标:R方 RMSE MAE MAPE
对比图
4.数据从excel/csv文件中读取
5.可以将最后的结果保存下来供后续操作。
源码结构复杂,不易理解。源码不能出对比图且指标少,改编代码完美保留基准代码功能和机制,并且删除冗余部分,修改了代码的数据加载处理,训练,测试部分,简单的环境就可以运行,十分适合看不懂代码的小白。代码带数据,注释清晰,适合新手小白,接运行
程序设计
- 完整程序和数据获取方式**基于MAMbaS+transformer时间序列预测模型(pytorch)。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import torch
import torch.nn as nn
from torch.optim import Adam
from torch.utils.data import Dataset, DataLoader
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error
from sklearn.preprocessing import MinMaxScaler
from tqdm import tqdm
import torch
import numpy as np
from mamba2 import Mamba2, Mamba2Config
# 解决画图中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 输入的历史look_back步,和预测未来的T步
look_back = 10
T = 1
epochs = 50 #迭代次数
num_features= 6 #输入特证数
embed_dim = 16 #嵌入维度
dense_dim= 16 #隐藏层神经元个数
num_heads = 4 #头数
dropout_rate = 0.01 #失活率
num_blocks = 3 #编码器解码器数
learn_rate = 0.001 #学习率
batch_size = 16 #批大小
# 读取数据
dataset = pd.read_excel('tcndata2.xlsx', usecols=[4,5,6,7,8,9])
dataX = dataset.values
dataY = dataset['Y'].values
print(dataX)
print(dataY)
# 归一化数据
scaler1 = MinMaxScaler(feature_range=(0, 1))
scaler2 = MinMaxScaler(feature_range=(0, 1))
data_X = scaler1.fit_transform(dataX)
data_Y = scaler2.fit_transform(dataY.reshape(-1, 1))
#划分训练集和测试集,用70%作为训练集,20%作为验证集,10%作为测试集
train_size = int(len(data_X)*0.7)
val_size = int(len(data_X)*0.1)
test_size = len(data_X) - train_size - val_size
train_X,train_Y = data_X[0:train_size], data_Y[0:train_size]
val_X,val_Y = data_X[train_size:train_size+val_size], data_Y[train_size:train_size+val_size]
test_X,test_Y = data_X[train_size+val_size:], data_Y[train_size+val_size:]
参考资料
[1] http://t.csdn.cn/pCWSp
[2] https://download.csdn.net/download/kjm13182345320/87568090?spm=1001.2014.3001.5501
[3] https://blog.csdn.net/kjm13182345320/article/details/129433463?spm=1001.2014.3001.5501