代码之家  ›  专栏  ›  技术社区  ›  stone rock

如何在python中找到对称平均绝对误差?

  •  3
  • stone rock  · 技术社区  · 6 年前

    如何使用numpy或pandas计算python中的对称平均绝对误差?Scikit sklearn中是否存在度量?

    示例数据:

    actual value:2,3,4,5,6,7,8,9
    预测值:1,3,5,4,6,7,10,7
    

    SMAPE的公式见下面的屏幕截图:

    我怎样才能在python中使用pandas或numpy,并计算smape。

    注:有关smape的更多信息:https://en.wikipedia.org/wiki/symmetric_mean_absolute_percentage_error.

    Actual value: 2,3,4,5,6,7,8,9 Forecast value: 1,3,5,4,6,7,10,7

    SMAPE的公式见下面的屏幕截图:

    enter image description here

    我怎样才能在Python中使用pandas或numpy并计算smape呢?

    注:有关smape的详细信息:https://en.wikipedia.org/wiki/Symmetric_mean_absolute_percentage_error

    2 回复  |  直到 6 年前
        1
  •  8
  •   blue_note    6 年前

    把方程转换成numpy很简单

    import numpy as np
    
    def smape(A, F):
        return 100/len(A) * np.sum(2 * np.abs(F - A) / (np.abs(A) + np.abs(F)))
    
    A = np.array([2,3,4,5,6,7,8,9])
    F = np.array([1,3,5,4,6,7,10,7])
    print(smape(A, F))
    
        2
  •  1
  •   gyx-hh    6 年前

    尝试以下操作。

    def mape(row):
        return abs(row.Forecast - row.Actual) / ((abs(row.Actual) + abs(row.Forecast))/2)
    
    # create the pandas dataframe if you dont have one already
    df=pd.DataFrame.from_dict({'Actual':[2,3,4,5,6,7,8,9], 'Forecast':[1,3,5,4,6,7,10,7]})
    
    # apply the above function on each row 
    smape = df.apply(mape, axis=1).sum() * (1/len(df))
    

    输出: 0.19791666666666669