2017-12-05 16 views
1

予測値と真値のMean Absolute percentage error(MAPE)を計算したいと思います。私はhereから解決策を見つけたが、これはエラーを与え、私はspyder3を使用していますmask = a <> 0PythonのMAPE計算

def mape_vectorized_v2(a, b): 
    mask = a <> 0 
    return (np.fabs(a - b)/a)[mask].mean() 

    def mape_vectorized_v2(a, b): 
     File "<ipython-input-5-afa5c1162e83>", line 1 
     def mape_vectorized_v2(a, b): 
            ^
    SyntaxError: unexpected EOF while parsing 

ラインに無効な構文を示しています。私の予測値は、型np.arrayで、真の価値は、私はこのエラーをクリアし、MAPEの計算を続行するにはどうすればよいのデータフレーム

type(predicted) 
Out[7]: numpy.ndarray 
type(y_test) 
Out[8]: pandas.core.frame.DataFrame 

のですか?

編集:Pythonで

predicted.head() 
Out[22]: 
    Total_kWh 
0 7.163627 
1 6.584960 
2 6.638057 
3 7.785487 
4 6.994427 

y_test.head() 
Out[23]: 
    Total_kWh 
79   7.2 
148  6.7 
143  6.7 
189  7.2 
17   6.4 

np.abs(y_test[['Total_kWh']] - predicted[['Total_kWh']]).head() 
Out[24]: 
    Total_kWh 
0  NaN 
1  NaN 
2  NaN 
3  NaN 
4 0.094427 
+0

あなたは 'マスクを必要とする= = 0 ' – jezrael

答えて

3

等しくない必要性!=、ない<>で比較するため。

だから、必要があります。

def mape_vectorized_v2(a, b): 
    mask = a != 0 
    return (np.fabs(a - b)/a)[mask].mean() 

stats.stackexchangeから別の解決策:

def mean_absolute_percentage_error(y_true, y_pred): 
    y_true, y_pred = np.array(y_true), np.array(y_pred) 
    return np.mean(np.abs((y_true - y_pred)/y_true)) * 100 
+0

は、これは私のナンを与えているあなたにそんなに –

+0

をありがとうございました!。あなたはそれがいつこのような価値を生み出すかを知っていますか?私の2番目の配列には0の値が含まれていますが、後者の解決方法を変更するにはどうしたらいいですか? – Ehrendil