理解SMAPE的模棱两可

时间:2018-11-01 15:24:58

标签: keras forecasting

我已经实现了几种回归预测方法,现在我想对其进行比较。我选择了MAE,RMSE和SMAPE评级。我的结果如下所示:

  1. 方法1:MAE = 0,6,RMSE = 0,9和SMAPE 531
  2. 方法2:MAE = 3,0,RMSE = 6,1和SMAPE 510
  3. 方法3:MAE = 10,1,RMSE = 17,00和SMAPE 420

当我绘制预测并将其与测试集进行比较时,我可以看到方法1>方法2>方法3。这也可以从MAE和RMSE的值中看出。但是我认为,SMAPE越低,预测越好。

我是否误解了SMAPE? 由于phyton中没有预定义的方法,因此我的SMAPE计算如下:

#include <stdio.h>
#include<stdlib.h>

struct info
{
  int age;
  char name[30];
};

int main()
{
    struct info *Ptr=NULL;
    int i=0, num;

    char c='Y';
    while(c=='Y'||c=='y') {

            Ptr=realloc(Ptr,(i+1)*sizeof(struct info));
            if(Ptr==NULL)
                 break;
            printf("Enter name and age:\n");
            scanf("%s %d",&Ptr[i].name,&Ptr[i].age);
            printf("Do you want to cont?\n");
            scanf(" %c",&c);
            i++;
    }
    num=i;

    for(i = 0; i < num ; ++i)
            printf("Name = %s, Age = %d\n", (Ptr+i)->name, (Ptr+i)->age);
    free(Ptr);
    return 0;
}

还是计算错误?

预先感谢

1 个答案:

答案 0 :(得分:0)

好的,也许该方法是错误的..相反,我使用了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的结果看起来更合理