keras - 理解 SMAPE 的歧义
问题描述
我已经实现了几种回归预测方法,现在我想对它们进行比较。我选择了 MAE、RMSE 和 SMAPE 评级。我的结果如下所示:
- 方法 1:MAE= 0,6,RMSE= 0,9 和 SMAPE 531
- 方法 2:MAE= 3,0 ,RMSE= 6,1 和 SMAPE 510
- 方法 3:MAE= 10,1 ,RMSE= 17,00 和 SMAPE 420
当我绘制我的预测并将它们与我的测试集进行比较时,我可以看到方法 1 > 方法 2 > 方法 3。这从 MAE 和 RMSE 的值也很明显。但我认为生成的 SMAPE 越低,预测就越好。
我误解了 SMAPE 吗?由于 phyton 中没有预定义的方法,我的 SMAPE 计算如下所示:
def smape(A, F):
return 100/len(A) * np.sum(2 * np.abs(F - A) / (np.abs(A) + np.abs(F)))
还是计算错误?
提前致谢
解决方案
好吧,也许方法是错误的.. 相反,我使用了 Kaggle 的这个:
from numba import jit
import math
@jit
def smape_fast(y_true, y_pred):
out = 0
for i in range(y_true.shape[0]):
a = y_true[i]
b = y_pred[i]
c = a+b
if c == 0:
continue
out += math.fabs(a - b) / c
out *= (200.0 / y_true.shape[0])
return out
URL 现在与 MAE 和 RMSE 相比,我的结果从 SMAPE 看起来更合理
推荐阅读
- arrays - 在 Google BigQuery 中将数组转换为字符串
- python - 如何将训练损失绘制为 γ 的函数
- reactjs - 隐藏导航栏功能不起作用 useLocation
- python - 删除我的 NumPy 数组的前 200 列
- reactjs - 从另一个组件获取对话框状态
- java - 显示更多/查看回收站视图中的所有项目
- bash - 编写一个在一行中接受多个输入的命令
- reactjs - 如何在 RCA-typescipt+babylonjs 项目中加载 gltf 模型?
- express - 从节点服务器中的电子邮件触发任务
- python - 将 Pandas 系列转换为分类编码