我一直在研究一個我一直在嘗試不同機器學習算法的大數據集。我用XGBoost得到了非常好的結果,但是我得到的最好結果來自SVM。但是因爲我有8年的數據傳播時間,所以我想到了使用RNN的時間序列模型。我一直在試驗RNN-LSTM的超參數,通過增加層數或每層節點的數量,因爲沒有經驗法則。但是,我還沒有接近我的XGBoost結果。我注意到的奇怪之處在於,即使將時期數從100增加到1000,或者我將隱藏層的數量從1增加到3,或者我更改了每層的節點,但模型的性能始終是相同的用於培訓和測試集。我分享我的RNN-LSTM代碼,請告訴我是否缺少任何東西。從理論上講,如果不是更好的話,它至少可以和支持向量機一樣好,因爲數據質量也非常好而且很長。提高RNNs的複雜度
# Getting the inputs and the ouputs
X = allData.iloc[:-48,:-1].values
y = allData.iloc[:-48,-1].values
y = y.reshape(-1,1)
# Feature Scaling
from sklearn.preprocessing import MinMaxScaler
sc_x = MinMaxScaler()
sc_y = MinMaxScaler()
X = sc_x.fit_transform(X)
y = sc_y.fit_transform(y)
y = np.ravel(y)
X = np.reshape(X, (-1,1,X.shape[1]))
y = np.reshape(y, (-1,1,1))
# Building RNN
regressor = Sequential()
regressor.add(LSTM(units = 8,activation = 'tanh',recurrent_activation = 'relu',return_sequences = True, input_shape = (X.shape[1],X.shape[2])))
regressor.add(LSTM(units = 3,activation = 'tanh', recurrent_activation ='relu', return_sequences = True))
regressor.add(TimeDistributed(Dense(units = 1)))
regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')
regressor.fit(X, y, batch_size = 32,shuffle = False, epochs = 100,validation_split=0.1)
我無法獲得與此模型相當的準確度。我可以在RNN中嘗試做什麼其他的事情,至少可以類似於其他機器學習算法?
在發送到RNN之前,X和y的最終形狀是什麼?另外你爲什麼不使用LSTM中的默認激活?我從不碰這些選項。除非您使用有狀態的LSTM,否則隨機應該始終爲真。 –
X的最終形狀是(3163,24,5),y的最終形狀是(3163,24,1)。 24是因爲數據是小時數據,所以我認爲24會爲LSTM提供最好的信息。我嘗試使用默認激活以及相同的結果。我把洗牌視爲虛假,因爲我不確定如果2016年的一批與2013年的一批相關聯(如果我獲得了正確的洗牌感),時間系列將如何保持。我嘗試使用有狀態的LSTM,但他們表現更差。 – user7400738
只是一些提示。 1.使用標準縮放器2.您是否對XgBoost使用相同的標量? 3.使用默認激活4.增加批量,例如256 5.增加單位,至少說32。 6.您需要按照特定的順序準備數據,以便將數據提供給有狀態的LSTM(現在忽略有狀態)。 7.發佈XgBoost與LSTM MSE的結果。 –