我在Keras中实现了一个LSTM,以重现本文。奇怪的行为很简单:我有一个MSE损失函数和一个MAPE和MAE作为度量。在训练过程中,MAPE正在爆炸,但MSE和MAE似乎训练正常:
Epoch 1/20
275/275 [==============================] - 191s 693ms/step - loss: 0.1005 - mape: 15794.8682 - mae: 0.2382 - val_loss: 0.0334 - val_mape: 24.9470 - val_mae: 0.1607
Epoch 2/20
275/275 [==============================] - 184s 669ms/step - loss: 0.0099 - mape: 6385.5464 - mae: 0.0725 - val_loss: 0.0078 - val_mape: 11.3268 - val_mae: 0.0803
Epoch 3/20
275/275 [==============================] - 186s 676ms/step - loss: 0.0025 - mape: 5909.3735 - mae: 0.0369 - val_loss: 0.0131 - val_mape: 14.9827 - val_mae: 0.1061
Epoch 4/20
275/275 [==============================] - 187s 678ms/step - loss: 0.0015 - mape: 4746.2788 - mae: 0.0278 - val_loss: 0.0142 - val_mape: 16.1894 - val_mae: 0.1122
Epoch 5/20
30/275 [==>...........................] - ETA: 2:38 - loss: 0.0012 - mape: 9.3647 - mae: 0.0246
MAPE在每个时代结束时都在爆炸。这种特定行为的原因可能是什么?
MAPE仍在随着每个时期的减少而减少,所以这不是一个真正的问题,因为它不会阻碍训练过程吗?
你的损失和MAPE正在减少,所以听起来不错。但如果你害怕MAPE中的高值,你可以判断是否有接近零的Y值。因为MAPE是一个百分比误差。
MAPE结果可能具有误导性。来自维基百科:
尽管MAPE的概念听起来非常简单和令人信服,但它在实际应用中存在的主要缺点,并有许多研究关于MAPE的缺点和误导性结果。
- 如果存在零值(有时会发生这种情况,例如在需求数据中(,则不能使用它,因为会有除法零
- 对于过低的预测,百分比误差不能超过100%,但对于过高的预测,没有上限百分比误差
- MAPE对负错误的惩罚比对正错误的惩罚更重
为了克服MAPE的这些问题,还有一些其他措施文献中提出:
- 平均绝对标度误差(MASE(
- 对称平均绝对百分比误差(sMAPE(
- 平均方向精度(MDA(
- 平均反正切绝对百分比误差(MAAPE(