import os
import json
import time
import math
import matplotlib.pyplot as plt
import numpy as np
from keras.utils import plot_model
import pandas as pd
import warnings
from keras.models import Sequential,load_model
import datetime as dt
from keras.layers import Dense,Activation,Dropout,LSTM
from keras.utils import plot_model
from keras.callbacks import EarlyStopping, ModelCheckpoint
from numpy import newaxis
warnings.filterwarnings("ignore")%matplotlib inline
1.数据处理类
'''
从配置文件加载数据
'''classDataLoader():'''
file_name: 数据文件路径
split_rate:训练数据占(训练数据+测试数据)的比例
feature_cols: 特征的列集合
'''def__init__(self,file_name, split_rate, feature_cols):
dataframe = pd.read_csv(file_name)
count_split_train =int(len(dataframe)* split_rate)
self.data_train = dataframe.get(feature_cols).values[:count_split_train]
self.data_test = dataframe.get(feature_cols).values[count_split_train:]
self.len_train =len(self.data_train)
self.len_test =len(self.data_test)
self.len_train_windows =Nonedefget_train_data(self, seq_len, normalise):
data_x =[]
data_y =[]for i inrange(self.len_train - seq_len):
x, y = self._next_window(i, seq_len, normalise)
data_x.append(x)
data_y.append(y)return np.array(data_x), np.array(data_y)def_next_window(self, i, seq_len, normalise):
window = self.data_train[i: i + seq_len]
window = self.normalise_windows(window, single_window =True)[0]if normalise else window
x = window[:-1]
y = window[-1,[0]]return x, y
defnormalise_windows(self, window_data, single_window =False):
normalised_data =[]
window_data =[window_data]if single_window else window_data
# 都计算和第一条数据的同比涨幅for window in window_data:
normalised_window =[]for col_i inrange(window.shape[1]):
normalised_col =[((float(p)/float(window[0, col_i]))-1)for p in window[:,col_i]]
normalised_window.append(normalised_col)
normalised_window = np.array(normalised_window).T
normalised_data.append(normalised_window)return np.array(normalised_data)defget_test_data(self, seq_len, normalise):
data_windows =[]for i inrange(self.len_test - seq_len):
data_windows.append(self.data_test[i: i + seq_len])
data_windows = np.array(data_windows).astype(float)
data_windows = self.normalise_windows(data_windows, single_window =False)if normalise else data_windows
x = data_windows[:,:-1]
y = data_windows[:,-1,[0]]return x,y
model compiled
Time taken: 0:00:00.063992
train data x shape: (3942, 49, 2)
train data y shape: (3942, 1)
model train started epochs 1 batch_size 32
[1m124/124[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m7s[0m 35ms/step - loss: 0.0019
model train completed. model save as saved_models\20092024-153703-e1.h5.keras
Time taken: 0:00:07.437250
predict sequence multiple...
[1m1/1[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 305ms/step
predict point start
predict data shape (655, 49, 2)
[1m21/21[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m1s[0m 12ms/step
predited data shape (655, 1)
predited data shape (655,)
predict point completed