为什么平均绝对百分比误差(MAPE)极高?

我从 machinelearningmastery 获得了代码

我修改了 model.compile() 函数,添加了 mape 指标来计算平均绝对百分比误差。运行代码后,每个epoch的 mape 值都非常大,考虑到它是一个百分比指标。我是否遗漏了什么明显的问题,还是输出是正确的?输出如下所示:

Epoch 91/1000s - loss: 0.0103 - mean_absolute_percentage_error: 1764997.4502Epoch 92/1000s - loss: 0.0103 - mean_absolute_percentage_error: 1765653.4924Epoch 93/1000s - loss: 0.0102 - mean_absolute_percentage_error: 1766505.5107Epoch 94/1000s - loss: 0.0102 - mean_absolute_percentage_error: 1766814.5450Epoch 95/1000s - loss: 0.0102 - mean_absolute_percentage_error: 1767510.8146Epoch 96/1000s - loss: 0.0101 - mean_absolute_percentage_error: 1767686.9054Epoch 97/1000s - loss: 0.0101 - mean_absolute_percentage_error: 1767076.2169Epoch 98/1000s - loss: 0.0100 - mean_absolute_percentage_error: 1767014.8481Epoch 99/1000s - loss: 0.0100 - mean_absolute_percentage_error: 1766592.8125Epoch 100/1000s - loss: 0.0100 - mean_absolute_percentage_error: 1766348.6332

我运行的代码(省略了预测部分)如下所示:


回答:

我通过在调用compile之前使用 keras.backend.set_epsilon(1) 将模糊因子epsilon设置为1来解决这个问题。

提示在源代码中

def mean_absolute_percentage_error(y_true, y_pred):diff = K.abs((y_true - y_pred) / K.clip(K.abs(y_true),                                        K.epsilon(),                                        None))return 100. * K.mean(diff, axis=-1)

这意味着,由于某些未知原因,训练集上MAPE计算中的 K.abs(y_true) 项低于模糊默认值(1e-7),因此它使用了该默认值,从而导致了巨大的数值。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注