如何通过 LSTM 模型预测具有多个特征的一个输出?

问题描述 投票:0回答:3

我正在玩一些股票

timeseries data
并尝试用
multivariate features
预测趋势。下面是样本
dataset
,其中包括不同的
technical indicators
,包括每只股票的
moving average
Parabolic SAR
等。从不同的在线来源来看,他们中的大多数人每次都以
one feature
之类的“收盘价”来预测一只股票。我怎样才能利用所有股票的特征来预测一个输出,比如说
S&P's close price
。我知道这可能无助于提高预测准确性,但我不确定我现在正在训练什么,希望对 LSTM 模型有更多的了解。

基本上,我将整个数据集放入并进行缩放和训练。如何在一列上指定预测?

代码:

scaler = MinMaxScaler(feature_range = (0,1))
scaled_feature_data = scaler.fit_transform(feature_data)
X_train, y_train = training_set[:, :-1], training_set[:, -1]
X_test, y_test = testing_set[:, :-1], testing_set[:, -1]
X_train = X_train.reshape((X_train.shape[0],1,X_train.shape[1]))
X_test = X_test.reshape((X_test.shape[0],1,X_test.shape[1]))
model_lstm.add(LSTM(50, return_sequences = True, input_shape = (X_train.shape[1], X_train.shape[2])))

型号:

model_lstm.add(LSTM(50, return_sequences = True, input_shape = (X_train.shape[1], X_train.shape[2])))
model_lstm.add(Dropout(0.2))
model_lstm.add(LSTM(units=50, return_sequences=True))
model_lstm.add(Dropout(0.2))
model_lstm.add(LSTM(units=50, return_sequences=True))
model_lstm.add(Dropout(0.2))
model_lstm.add(LSTM(units=50))
model_lstm.add(Dropout(0.2))
model_lstm.add(Dense(units=1, activation='relu'))
machine-learning neural-network time-series lstm prediction
3个回答
0
投票

这是一个回归问题。您正在预测一个变量。所以最后一层可能看起来像

model_lstm.add(Dense(1))
model_lstm.compile(loss='mse', optimizer='rmsprop')

此外,您可能不需要为每个输入标记返回 return_sequences。如果

return_sequences=true
,那么输出将是一个矩阵(实际上是 (batch_size, num_tokens, num_features)),它不能自动展平为预计成为 Dense(1) 层输入的向量 (batch_size, num_features)。只需使用最后一个 LSTM 节点的输出。为此,请设置
return_sequences=false
。它的值取决于以前的令牌,因此您不会丢失太多信息。

整个模型可能是这样的:

model_lstm = Sequential()
model_lstm.add(LSTM(50, return_sequences=False, input_shape=(X_train.shape[1], X_train.shape[2])))
model_lstm.add(Dropout(0.5))
model_lstm.add(Dense(1))
model_lstm.compile(loss='mse', optimizer='rmsprop')

如果你想要更多层,它将变成:

model_lstm = Sequential()
model_lstm.add(LSTM(64, return_sequences=True, dropout=0.5, input_shape=(X_train.shape[1], X_train.shape[-1])))
model_lstm.add(Dropout(0.5))
model_lstm.add(LSTM(32, return_sequences=False, dropout=0.5))
model_lstm.add(Dense(1))
model_lstm.compile(loss='mse', optimizer='rmsprop')

0
投票

其实我想知道如何所有特征,比如说10个技术指标特征,都可以帮助预测一个价格柱?

不知道我是否理解正确。但这就是机器学习的作用,它试图找到特征之间的相关性以及如何使用它们来预测某些内容。因此,也许“DE30”对价格有(或似乎有)影响,因此很有帮助。这是你的问题吗?

从不同的在线资源中,大多数人都在预测一只具有“收盘价”等功能的股票 我想这是为了简化。因此他们只使用了一项功能

让我知道这是否是您所要求的..


© www.soinside.com 2019 - 2024. All rights reserved.