前言
- LSTM 航空乘客預測單步預測的兩種情況。 簡單運用LSTM 模型進行預測分析。
- 加入注意力機制的LSTM 對航空乘客預測采用了目前市面上比較流行的注意力機制,將兩者進行結合預測。
- 多層 LSTM 對航空乘客預測 簡單運用多層的LSTM 模型進行預測分析。
- 雙向LSTM 對航空乘客預測雙向LSTM網絡對其進行預測。
- MLP多層感知器 對航空乘客預測簡化版 使用MLP 對航空乘客預測
- CNN + LSTM 航空乘客預測采用的CNN + LSTM網絡對其進行預測。
- ConvLSTM 航空乘客預測采用ConvLSTM 航空乘客預測
- LSTM的輸入格式和輸出個數(shù)說明 中對單步和多步的輸入輸出格式進行了解釋
- LSTM 單變量多步預測航空乘客簡單版
- LSTM 單變量多步預測航空乘客復雜版
- LSTM 多變量單步預測空氣質量(1—》1) 用LSTM 前一個數(shù)據(jù)點的多變量預測下一個時間點的空氣質量
- LSTM 多變量單步預測空氣質量(3 —》1) 用LSTM 前三個數(shù)據(jù)點的多變量預測下一個時間點的空氣質量
- 麻雀算法SSA優(yōu)化LSTM超參數(shù)
- 蟻群算法ACO優(yōu)化LSTM超參數(shù)
本文主要是采用粒子群算法PSO優(yōu)化LSTM超參數(shù)
PSO
pip3 install pyswarm
LSTM
def build_model(neurons1, neurons2, dropout):
X_train, y_train, X_test, y_test = process_data()
# X_train, y_train = create_dataset(X_train, y_train, steps)
# X_test, y_test = create_dataset(X_test, y_test, steps)
nb_features = X_train.shape[2]
input1 = X_train.shape[1]
model1 = Sequential()
model1.add(LSTM(
input_shape=(input1, nb_features),
units=neurons1,
return_sequences=True))
model1.add(Dropout(dropout))
model1.add(LSTM(
units=neurons2,
return_sequences=False))
model1.add(Dropout(dropout))
model1.add(Dense(units=1))
model1.add(Activation("linear"))
model1.compile(loss='mse', optimizer='Adam', metrics='mae')
return model1, X_train, y_train, X_test, y_test
優(yōu)化超參數(shù)
if __name__ == '__main__':
if __name__ == '__main__':
'''
神經網絡第一層神經元個數(shù)
神經網絡第二層神經元個數(shù)
dropout比率
batch_size
'''
UP = [150, 15, 0.5, 16]
DOWN = [50, 5, 0.05, 8]
# # 開始優(yōu)化
pso_ = pso(training, lb=DOWN, ub = UP)
pso_.run()
print('best_params is ', pso_.gbest_x)
print('best_precision is', 1 - pso_.gbest_y)
# 訓練模型 使用ssa找到的最好的神經元個數(shù)
neurons1 = int(pso_.gbest_x[0])
neurons2 = int(pso_.gbest_x[1])
dropout = pso_.gbest_x[2]
batch_size = int(pso_.gbest_x[3])
# neurons1 = 64
# neurons2 = 64
# dropout = 0.01
# batch_size = 32
model, X_train, y_train, X_test, y_test = build_model(neurons1, neurons2, dropout)
history1 = model.fit(X_train, y_train, epochs=150, batch_size=batch_size, validation_split=0.2, verbose=1,
callbacks=[EarlyStopping(monitor='val_loss', patience=9, restore_best_weights=True)])
# 測試集預測
y_score = model.predict(X_test)
# 反歸一化
y_score = scaler.inverse_transform(y_score.reshape(-1, 1))
y_test = scaler.inverse_transform(y_test.reshape(-1, 1))
print("==========evaluation==============\n")
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error #平方絕對誤差
import math
MAE = mean_absolute_error(y_test, y_score)
print('MAE: %.4f ' % MAE)
RMSE = math.sqrt(mean_squared_error(y_test, y_score))
print('RMSE: %.4f ' % (RMSE))
# MAPE和SMAPE
def mape(y_true, y_pred):
return np.mean(np.abs((y_pred - y_true) / y_true)) * 100
def smape(y_true, y_pred):
return 2.0 * np.mean(np.abs(y_pred - y_true) / (np.abs(y_pred) + np.abs(y_true))) * 100
MAPE = mape(y_test, y_score)
print('MAPE: %.4f ' % MAPE)
SMAPE = smape(y_test, y_score)
print('SMAPE: %.4f ' % SMAPE)
總結
粒子群算法優(yōu)化,也算是比較老點的算法,但其仍然具有一定的價值文章來源:http://www.zghlxwxcb.cn/news/detail-466096.html
備注:
需要源代碼和數(shù)據(jù)集,或者想要溝通交流,請私聊,謝謝.文章來源地址http://www.zghlxwxcb.cn/news/detail-466096.html
到了這里,關于粒子群算法PSO優(yōu)化LSTM超參數(shù)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!