【发布时间】:2018-02-13 08:13:56
【问题描述】:
我一直在研究一个大数据集,我一直在尝试不同的机器学习算法。我使用 XGBoost 得到了非常好的结果,但我得到的最好结果来自 SVM。但由于我的数据分布在 8 年,而且它是一个时间序列模型,因此我也想到了使用 RNN。我一直在通过增加层数或每层的节点数来试验 RNN-LSTM 的超参数,因为没有这样的经验法则。但我什至还没有接近我的 XGBoost 结果。我注意到的奇怪的事情是,即使我将 epoch 的数量从 100 增加到 1000,或者我将隐藏层的数量从 1 增加到 3,或者我改变每层的节点,模型的性能总是相同的既适用于训练集,也适用于测试集。我正在分享我的 RNN-LSTMs 代码,如果我遗漏了什么,请告诉我。从理论上讲,它至少与 SVM 一样好,如果不是更好的话,因为数据质量也非常好而且很长。
# 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 中尝试哪些其他事情,以使其执行至少类似于其他机器学习算法?
【问题讨论】:
-
X 和 y 在发送到 RNN 之前的最终形状是什么?另外,您为什么不在 LSTM 中使用默认激活?我从不碰那些选项。除非您使用有状态的 LSTM,否则 Shuffle 应该始终为真。
-
X 的最终形状是 (3163,24,5),y 的最终形状是 (3163,24,1)。 24 是因为数据是每小时数据,所以我认为 24 将为 LSTM 提供最佳信息。我也尝试使用默认激活,但结果相同。我将 shuffle 设为 false,因为我不确定如果 2016 年的一批与 2013 年的一批相关联(如果我对 shuffle 有正确的理解),时间序列将如何保持。我尝试使用有状态 LSTM,但它们的表现更差。
-
只是一些提示。 1. 使用 Standard Scaler 2. 你对 XgBoost 使用相同的标量吗? 3. 使用默认激活 4. 增加你的批量大小,比如 256 5. 增加单位到至少 32。 6. 您需要以特殊顺序准备数据以输入有状态 LSTM(暂时忽略有状态)。 7. 在上面发布 XgBoost 与 LSTM MSE 的结果。
-
是的,谢谢你的提示。 1) 3) 4) 5) 会试试这个。 2) 对于 SVM 和 XGBoost,没有使用缩放器。 6. 你到底是什么意思?我该如何准备特殊订单?与 SVM 和 XGBoost 相比,我为 RNN 做的特征工程较少,例如,由于假设 RNN 包含这些信息,因此没有采取任何滞后。 7. SVM-243、XGBoost-270、RNN-350 的 MSE。
-
我尝试进行这些更改,但 MSE 大约为 450。@Sachin_ruk
标签: python algorithm machine-learning keras rnn