增加RNN的复杂性

2024-04-19 18:48:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在研究一个大数据集,我一直在尝试不同的机器学习算法。我用XGBoost得到了很好的结果,但是我得到的最好的结果是支持向量机。但由于我有8年的数据,而且是时间序列模型,所以我也考虑使用RNN。我一直在试验RNN LSTM的超参数,方法是增加层数或每层的节点数,因为没有经验法则。但我仍然没有接近我的XGBoost结果。我注意到的奇怪的事情是,即使我将epoch的数量从100增加到1000,或者我将隐藏层的数量从1增加到3,或者我更改每层的节点,模型的性能对于训练集和测试集总是相同的。我正在分享我的RNN LSTMs代码,请让我知道如果我遗漏了什么。从理论上讲,如果不是更好的话,它至少会和支持向量机一样好,因为数据质量也确实很好而且很长。你知道吗

# 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)

我甚至无法从这个模型中得到可比的准确度。我还可以在RNNs中尝试做些什么来执行至少类似于其他机器学习算法的操作?你知道吗


Tags: 数据模型机器addnpactivationfitsc
2条回答

我建议尝试一个简单的多层感知器模型,然后再调整它以包含RNN层。我遇到了类似的情况,最后,我使用了XGBoost模型,这并不是因为它的准确性是可比的,而是因为它更容易解释和理解。你知道吗

另外,试着把你的问题转化成一个分类问题(把问题分成类等)。你知道吗

我会尝试使用有状态的LSTMs,以获得长期依赖的全部好处。我还建议不要使用最小-最大缩放,或者尝试平均std缩放,然后将值剪裁在-1,1或0,1之间。而且,在我看来,在反复连接中有relu是很奇怪的。也许试着用一个对称的。你知道吗

相关问题 更多 >