如何提高深度学习回归模型的预测能力

时间:2021-04-16 15:44:25

标签: python tensorflow keras deep-learning regression

我有 50 000 行的数据集,范围从 35-50 列,基于它,我需要为每行预测 3 个值。

<块引用>

例如43208.7032; (37 个递增值); 48743.4976 -> 3.7707; 372.9719; 1.158718

到目前为止,我得到的最好结果是平均绝对误差接近 0.05,而我需要它接近 0.001-0.0005。

我用零填充了缺失的数据,并使用 keras.layers.experimental.preprocessing.Normalization 对 X 进行了标准化,创建了回调:

callbackPlateau = ReduceLROnPlateau(
    monitor='val_loss',
    factor=0.8,
    patience=5,
    verbose=1,
    mode='min',
    min_lr=0.0000001
)

并创建了模型,该模型给出的结果接近 0.05 mean_absolute_error:

model = Sequential()
model.add(Dense(60, input_dim=amount_of_columns, activation=LeakyReLU(alpha=0.6)))
model.add(Dense(90, activation=LeakyReLU(alpha=0.4)))
model.add(Dense(270, activation=LeakyReLU(alpha=0.4)))
model.add(Dense(90, activation=LeakyReLU(alpha=0.4)))
model.add(Dense(45, activation=LeakyReLU(alpha=0.4)))
model.add(Dense(15, activation=LeakyReLU(alpha=0.4)))
model.add(Dense(45, activation=LeakyReLU(alpha=0.4)))
model.add(Dense(3, activation=LeakyReLU(alpha=0.4)))
opt = Adam(learning_rate=0.01)
model.compile(loss='mean_absolute_error', optimizer=opt)

我训练它:

history = model.fit(
    training_x, 
    training_y, 
    epochs=550, 
    batch_size=128, 
    callbacks=[callbackPlateau, callbackEarly], 
    validation_data=(validation_x, validation_y))

在最后一个时期给出:

Epoch 343/550
274/274 [==============================] - 2s 6ms/step - loss: 0.0409 - val_loss: 0.0507

Epoch 00343: ReduceLROnPlateau reducing learning rate to 6.805647899454925e-07.
Epoch 00343: early stopping

并计算为:

79/79 [==============================] - 0s 2ms/step - loss: 0.0476

这是我的损失图: Image of plot loss+val_loss/epoch

这里是示例结果:

 Example predictions:
3.6658335; 374.98608; 1.2702768 (expected 3.6646; 374.9678; 1.271311), abs_err: 0.0025;
3.742614; 373.0805; 1.1156969 (expected 3.7444; 373.0549; 1.116855), abs_err: 0.0032;
3.6771998; 369.40353; 1.2375629 (expected 3.6812; 369.4603; 1.231281), abs_err: 0.0108;


 Worst:
3.5641375; 362.88254; 1.1704892 (expected 3.6136; 376.969; 1.137181), abs_err: 0.2236;

我尝试了各种数量的节点和层,并尝试使用线性和 relu 激活。

有什么我可以做得更好或额外使模型给出更好的最终结果的吗? 这是我的第一个深度学习项目。

0 个答案:

没有答案