增加RNN的复杂性

时间:2017-09-05 06:12:24

标签: python algorithm machine-learning keras rnn

我一直在研究一个大数据集,我一直在尝试不同的机器学习算法。我用XGBoost获得了非常好的结果,但我得到的最好结果来自SVM。但由于我的数据传播了8年,而且它是一个时间序列模型,因此我也考虑过使用RNN。我一直在通过增加层数或每层节点数来试验RNN-LSTM的超参数,因为没有经验法则。但我仍然没有接近我的XGBoost结果。我注意到的奇怪的是,即使我将时期数从100增加到1000或者我将隐藏层的数量从1增加到3,或者我更改每层的节点,模型的性能总是相同的用于训练和测试集。我正在分享我的RNN-LSTM代码,如果我遗漏任何内容,请告诉我。从理论上讲,如果不是更好的话,它至少会和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中执行至少与其他机器学习算法类似的其他事情吗?

2 个答案:

答案 0 :(得分:0)

我建议您在调整它以包含RNN图层之前尝试一个简单的多级感知器模型。我遇到了类似的情况,最后,我使用的是XGBoost模型,并不是因为准确性相当,但更容易解释和理解。

此外,尝试将您的问题转换为分类问题(bin Y转换为类等)。

答案 1 :(得分:0)

我会尝试使用有状态LSTM来获得长期依赖的全部好处。我还建议不要使用min-max缩放,也可以尝试使用mean-std缩放,然后在-1,1或0,1之间剪切值。而且,在经常性的连接中,我似乎很奇怪。也许尝试使用对称的。