友:你要不要一起参加铁人赛?
我:好啊!
(几天后)
我:乾我不小心忘了报名......
--------------------------------------> 2021.09.17
本系列的目标如下
陪我同事参赛,一起写文。带大家使用不同的模型来预测涨跌。带大家使用不同的特徵来预测涨跌。总目标是发大财。今天来带大家跑个模型吧!
今天会使用的的模型是常见的LSTM及GRU。一样的是,网路上有许多优质的解说文章,大家可以先去做点功课。
範例程式Step 0. 昨天準备好的资料
我们昨天準备好我们的资料啰!train_data # (2984, 7, 4)train_label # (2984, )
Step 1. 建立我们的模型
LSTMlstm_model = K.Sequential()lstm_model.add(K.layers.LSTM(units=256, return_sequences=True, input_shape=(7, 4)))lstm_model.add(K.layers.Dropout(0.3214))lstm_model.add(K.layers.LSTM(units=64))lstm_model.add(K.layers.Dropout(0.1432))lstm_model.add(K.layers.Dense(units=1, activation='sigmoid'))lstm_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
GRUgru_model = K.Sequential()gru_model.add(K.layers.GRU(units=256, return_sequences=True, input_shape=(7, 4)))gru_model.add(K.layers.Dropout(0.3214))gru_model.add(K.layers.GRU(units=64))gru_model.add(K.layers.Dropout(0.1432))gru_model.add(K.layers.Dense(units=1, activation='sigmoid'))gru_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
Step 2. 切割训练资料,八成做训练,两成做测试。
train_data = np.array(train_data)train_label = np.array(train_label)split_num = int(len(train_data)*0.8)train_data, test_data = train_data[:split_num], train_data[split_num:]train_label, test_label = train_label[:split_num], train_label[split_num:]
Step 3. 训练模型及评估模型
lstm_model.fit(train_data, train_label, validation_split=0.14, epochs=50, batch_size=64, verbose=0)gru_model.fit(train_data, train_label, validation_split=0.14, epochs=50, batch_size=64, verbose=0)
lstm_pred = lstm_model.evaluate(test_data, test_label)gru_pred = gru_model.evaluate(test_data, test_label)