基于时间序列的数据预测-tensorflow2-LTSM

在网络上有很多关于股票等的预测案例。参考这些案例,预测一个贷款余额的测试,不知是否能够成功。
开始,使用的环境是ubuntu desktop lts 20.04 anconda tensorflow2.2 python3.7等环境。

0.导入库

import tensorflow as tf
import sklearn

1.数据处理
1.1导入数据//

df=pd.read_csv('datasorce/zgdata.csv')

1.2选取数据列/选取单一数据列

sigal_fe=['gxdk']
uni_data=df[sigal_fe]

1.3数据归一化处理

train_df=uni_data[:TRAIN_SPLIT]
test_df=uni_data[TRAIN_SPLIT+1:]

sc=preprocessing.MinMaxScaler(feature_range=(0, 1))
train_sc=sc.fit_transform(train_df)
test_sc=sc.transform(test_df)

1.4变量定义

x_train = []
y_train = []
x_test = []
y_test = []

1.5构造训练集、测试集

1.5.1训练集

for i in range(11, len(train_df)):
    x_train.append(train_sc[i - 11:i, 0])
    y_train.append(train_sc[i, 0])

np.random.seed(7)
np.random.shuffle(x_train)
np.random.seed(7)
np.random.shuffle(y_train)
tf.random.set_seed(7)

x_train, y_train = np.array(x_train), np.array(y_train)
x_train = np.reshape(x_train, (x_train.shape[0], 11, 1))

1.5.2测试集

for i in range(11, len(test_sc)):
    x_test.append(test_sc[i - 11:i, 0])
    y_test.append(test_sc[i, 0])

 x_test, y_test = np.array(x_test), np.array(y_test)
x_test = np.reshape(x_test, (x_test.shape[0], 11, 1))

1.6建立模型

   model = tf.keras.Sequential([
    tf.keras.layers.LSTM(80, return_sequences=True),
     tf.keras.layers.Dropout(0.2),
     tf.keras.layers.LSTM(100),
     tf.keras.layers.Dropout(0.2),
     tf.keras.layers.Dense(1)
])

1.7编译模型,指定误差函数

model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
          loss='mean_squared_error')  # 损失函数用均方误差

1.8开始训练数据

  history = model.fit(x_train, y_train, batch_size=64, epochs=50, validation_data=(x_test, y_test),validation_freq=1)

1.9预测数据,利用测试数据集

predicted_stock_price = model.predict(x_test)    

1.10比较模型好坏,利用plt 画出图像的比较。