gpt4 book ai didi

python - 使用 LSTM Keras 的验证结果不佳

转载 作者:行者123 更新时间:2023-11-30 09:59:12 24 4
gpt4 key购买 nike

我正在尝试使用 T-time_steps 样本预测 T 天的股市走势(1=正,0=负)。我尝试过 time_steps = 20, 50, 100, 300,以下结果类似。

我有以下数据框:

                Open       High        Low      Close      Volume  sentiment  Movement
Date
2009-01-02 51.349998 54.529999 51.070000 54.360001 7296400.0 0.084348 1.0
2009-01-05 55.730000 55.740002 53.029999 54.060001 9509800.0 0.104813 0.0
2009-01-06 54.549999 58.220001 53.750000 57.360001 11080100.0 0.185938 1.0
2009-01-07 56.290001 56.950001 55.349998 56.200001 7942700.0 0.047494 0.0
2009-01-08 54.990002 57.320000 54.580002 57.160000 6577900.0 -0.027938 1.0

以下数据帧与上面相同,使用 MinMaxScaler(feature_range=(0, 1)) 来标准化数据。

                Open      High       Low     Close    Volume  sentiment  Movement
Date
2009-01-02 0.001402 0.002215 0.001750 0.002973 0.110116 0.591978 1.0
2009-01-05 0.003604 0.002819 0.002748 0.002823 0.148730 0.625025 0.0
2009-01-06 0.003011 0.004059 0.003114 0.004480 0.176124 0.756025 1.0
2009-01-07 0.003885 0.003424 0.003928 0.003897 0.121391 0.532468 0.0
2009-01-08 0.003232 0.003609 0.003536 0.004380 0.097581 0.410660 1.0
Train: 2263 samples
Test: 252 samples

TIME_STEPS = 300

def create_dataset(X, y, time_steps=1):
Xs, ys = [], []
for i in range(len(X) - time_steps):
v = X.iloc[i:(i + time_steps)].values
Xs.append(v)
ys.append(y.iloc[i + time_steps])
return np.array(Xs), np.array(ys)


X_train, y_train = create_dataset(train, train.Movement, TIME_STEPS)
X_test, y_test = create_dataset(test, test.Movement, TIME_STEPS)

我已经使用 keras 创建了一个小型 LSTM 模型,如上所述:

model = Sequential()
model.add(LSTM(50, input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(Dense(1, activation='sigmoid'))

optimizer = optimizers.RMSprop()
monitor = EarlyStopping(monitor='val_loss', min_delta=1e-2, patience=25)
model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])
history = model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1, verbose=1,shuffle=False)

model.summary()

结果似乎显示出对训练数据集的一些过度拟合,我已经尝试添加 dropout、添加更多层、增加/减少神经元数量......随着epoch的增加,训练准确率可以达到90%,没有任何问题,但验证保持不变(也是预测)。

Loss - MSE

Accuracy

我不明白问题出在哪里......

最佳答案

当您面临过度拟合时,可能是由以下问题之一引起的:

  1. 样本数量较少
  2. 问题的维度很高(您可以将其视为大量参数)

你可以做什么来解决这个问题?

样本数量较少:

  1. 获取更多数据!
  2. 数据增强(这与计算机视觉更相关)

问题的维度很高:

  • 使用不太复杂的模型(参数数量较少)
  • 辍学
  • 让模型变得困难 - 例如,向数据添加噪声......
  • 这些是主要方式...

    就您而言,您使用 LSTM,这可能需要大量数据。您使用的数据集较小,多样性较低(样本彼此相似,因为您取回了 300 个时间戳)。

    我将从一个更简单的模型(经典机器学习分类器)开始,并添加具有不同窗口大小的滚动功能(使用 pandas 滚动 - 均值、std 等...)。

    关于python - 使用 LSTM Keras 的验证结果不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59697380/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com