时序预测 | Pytorch实现TCN-Transformer的时间序列预测
目录
效果一览

基本介绍

程序设计
- 完整程序和数据获取方式1:资源处直接下载Pytorch实现TCN-Transformer的时间序列预测
- 完整程序和数据获取方式2:私信博主回复Pytorch实现TCN-Transformer的时间序列预测。
数据集描述
通过预览数据,可知此次实验的数据属性为date(日期)、open(开盘价)、high(最高价)、low(最低价)、close(收盘价)以及volume(成交量)
其中,我们要实现股票预测,需要着重对close(收盘价)一列进行探索性分析。
"""
from torch import nn
import pandas as pd
import numpy as np
from sklearn.metrics import mean_absolute_error, mean_squared_error
from torch.utils.data import DataLoader, Dataset
import torch
from model import TCN_transfomer
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import r2_score
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False
from tqdm import tqdm
epoch = 100
totall_loss = []
batch_size=32
num_inputs=5
sequence_length=32
num_channels=[64,16,4,1]
kernel_size=3
dropout=0.3
nb_unites=sequence_length
def getData(root, sequence_length, batch_size):
stock_data = pd.read_csv(root)
print(stock_data.info())
print(stock_data.head().to_string())
stock_data.drop('id', axis=1, inplace=True)
stock_data.drop(labels="ts_code", axis=1, inplace=True)
stock_data.drop(labels="trade_date", axis=1, inplace=True)
stock_data.drop(labels="pre_close", axis=1, inplace=True)
stock_data.drop(labels="change", axis=1, inplace=True)
stock_data.drop(labels="pct_chg", axis=1, inplace=True)
stock_data.drop(labels="amount", axis=1, inplace=True)
print("整理后\n", stock_data.head())
close_max = stock_data["close"].max()
close_min = stock_data["close"].min()
scaler = MinMaxScaler()
df = scaler.fit_transform(stock_data)
print("整理后\n", df)
sequence = sequence_length
x = []
y = []
for i in range(df.shape[0] - sequence):
x.append(df[i:i + sequence, :])
y.append(df[i + sequence, 3])
x = np.array(x, dtype=np.float32)
y = np.array(y, dtype=np.float32).reshape(-1, 1)
print("x.shape=", x.shape)
x=np.transpose(x,(0,2,1))
print("转置后x.shape=", x.shape)
print("y.shape", y.shape)
total_len = len(y)
print("total_len=", total_len)
trainx, trainy = x[:int(0.90 * total_len), ], y[:int(0.90 * total_len), ]
testx, testy = x[int(0.90 * total_len):, ], y[int(0.90 * total_len):, ]
train_loader = DataLoader(dataset=Mydataset(trainx, trainy), shuffle=True, batch_size=batch_size)
test_loader = DataLoader(dataset=Mydataset(testx, testy), shuffle=True, batch_size=batch_size)
return [close_max, close_min, train_loader, test_loader]