使用LSTM预测类别



我的数据集包含一条数据点曲线,其中一列标记为&;buy &;。"BUY"表示曲线在这一点达到了局部最大值或最小值(由于寻找这些点的平滑并不完全准确,但主要在一行内)。0表示非最大值或最小值,1表示最大值,2表示最小值。

<DATE>,<CLOSE>,<VOL>,<BUY>
01/04/21;09:35:00,728.25,37290,0
01/04/21;09:40:00,728.0,31059,0
01/04/21;09:45:00,742.4,44956,0
01/04/21;09:50:00,740.03,27251,2
01/04/21;09:55:00,737.69,22765,0
01/04/21;10:00:00,737.0,9703,0
01/04/21;10:05:00,738.3,16369,1
01/04/21;10:10:00,735.41,17772,0
...

问题是,这在我的数据集中留下了非常多的0,我怀疑这些0会导致曲线是最大值还是最小值或两者都不是的分类问题。这是由于预测总是预测0。

这是我现在的模型。

model = Sequential()
model.add(LSTM(units=100, return_sequences=True, dropout=0.2))
model.add(LSTM(units=50, return_sequences=False, dropout=0.2))
model.add(Dense(3, activation='softmax'))

如果有需要修改的地方,请让我知道。

此外,我试图创建一个双重障碍来分类,如果输入是零,如果不是,分类输入实际上是什么,但我无法弄清楚。

您还需要预测零,并且在它们上也要准确,否则在测试时您无法推断该信息。

显然,网络会偏向于预测0,因为它是最常见的,但这并不意味着它总是会预测0…如果数据集不是带有协变量的股票预测,没有给预测带来任何信息,那么网络将在没有过拟合的情况下找出何时预测1/2。

我的建议是使用class_weight时拟合:

class_weight = {0: 1.,
1: 2.,
2: 2.}
model.fit(X_train, Y_train, ..., class_weight=class_weight)

相关内容

  • 没有找到相关文章

最新更新