預測評價指標RMSE、MSE、MAE、MAPE、SMAPE


預測評價指標RMSE、MSE、MAE、MAPE、SMAPE

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接: https://blog.csdn.net/guolindonggld/article/details/87856780

假設:
預測值:yˆ={y1ˆ,y2ˆ,...,ynˆ}\mathbf{\hat{y}}=\{\hat{y_1}, \hat{y_2} , ... , \hat{y_n}\}y^={y1^,y2^,...,yn^}
真實值:y={y1,y2,...,yn}\mathbf{y}=\{y_1, y_2, ..., y_n\}y={y1,y2,...,yn}

MSE

均方誤差(Mean Square Error)
MSE=1nni=1(yˆiyi)2MSE=\frac{1}{n} \sum_{i=1}^{n} (\hat{y}_i - y_i)^2MSE=n1i=1n(y^iyi)2

范圍[0,+∞),當預測值與真實值完全吻合時等於0,即完美模型;誤差越大,該值越大。

RMSE

均方根誤差(Root Mean Square Error),其實就是MSE加了個根號,這樣數量級上比較直觀,比如RMSE=10,可以認為回歸效果相比真實值平均相差10。
RMSE=1nni=1(yˆiyi)2−−−−−−−−−−−−−−√RMSE=\sqrt{\frac{1}{n} \sum_{i=1}^{n} (\hat{y}_i - y_i)^2}RMSE=n1i=1n(y^iyi)2
范圍[0,+∞),當預測值與真實值完全吻合時等於0,即完美模型;誤差越大,該值越大。

MAE

平均絕對誤差(Mean Absolute Error)
MAE=1nni=1yˆiyiMAE=\frac{1}{n} \sum_{i=1}^{n} |\hat{y}_i - y_i|MAE=n1i=1ny^iyi
范圍[0,+∞),當預測值與真實值完全吻合時等於0,即完美模型;誤差越大,該值越大。

MAPE

平均絕對百分比誤差(Mean Absolute Percentage Error)
MAPE=100%nni=1∣∣yˆiyiyi∣∣MAPE=\frac{100\%}{n}\sum_{i=1}^n \left |\frac{ \hat{y}_i - y_i }{ y_i } \right |MAPE=n100%i=1nyiy^iyi

范圍[0,+∞),MAPE 為0%表示完美模型,MAPE 大於 100 %則表示劣質模型。

可以看到,MAPE跟MAE很像,就是多了個分母。

注意點:當真實值有數據等於0時,存在分母0除問題,該公式不可用!

SMAPE

對稱平均絕對百分比誤差(Symmetric Mean Absolute Percentage Error)

SMAPE=100%nni=1yˆiyi(yˆi+yi)/2SMAPE=\frac{100\%}{n}\sum_{i=1}^n \frac{ |\hat{y}_i - y_i| }{ (|\hat{y}_i| + |y_i|)/2 }SMAPE=n100%i=1n(y^i+yi)/2y^iyi

注意點:當真實值有數據等於0,而預測值也等於0時,存在分母0除問題,該公式不可用!

Python代碼

# coding=utf-8 import numpy as np from sklearn import metrics # MAPE和SMAPE需要自己實現 def mape(y_true, y_pred): return np.mean(np.abs((y_pred - y_true) / y_true)) * 100 def smape(y_true, y_pred): return 2.0 * np.mean(np.abs(y_pred - y_true) / (np.abs(y_pred) + np.abs(y_true))) * 100 y_true = np.array([1.0, 5.0, 4.0, 3.0, 2.0, 5.0, -3.0]) y_pred = np.array([1.0, 4.5, 3.5, 5.0, 8.0, 4.5, 1.0]) # MSE print(metrics.mean_squared_error(y_true, y_pred)) # 8.107142857142858 # RMSE print(np.sqrt(metrics.mean_squared_error(y_true, y_pred))) # 2.847304489713536 # MAE print(metrics.mean_absolute_error(y_true, y_pred)) # 1.9285714285714286 # MAPE print(mape(y_true, y_pred)) # 76.07142857142858 # SMAPE print(smape(y_true, y_pred)) # 57.76942355889724 

MAPE 平均絕對百分誤差

 

from fbprophet.diagnostics import performance_metrics
df_p = performance_metrics(df_cv)
df_p.head()

 

  horizon mse rmse mae mape coverage
3297 37 days 0.481970 0.694241 0.502930 0.058371 0.673367
35 37 days 0.480991 0.693535 0.502007 0.058262 0.675879
2207 37 days 0.480936 0.693496 0.501928 0.058257 0.675879
2934 37 days 0.481455 0.693870 0.502999 0.058393 0.675879
393 37 days 0.483990 0.695694 0.503418 0.058494 0.675879

 

mape平均絕對百分誤差

    • 定義 
    1.  
      def evalmape(preds, dtrain):
    2.  
      gaps = dtrain.get_label()
    3.  
      err = abs(gaps-preds)/gaps
    4.  
      err[(gaps==0)] = 0
    5.  
      err = np.mean(err)*100
    6.  
      return 'error',err
 

回歸評價指標:MSE、RMSE、MAE、R2、Adjusted R2

回歸評價指標:MSE、RMSE、MAE、R2、Adjusted R2

1、均方誤差:MSE(Mean Squared Error)

其中,為測試集上真實值-預測值。

2、均方根誤差:RMSE(Root Mean Squard Error)

可以看出,RMSE=sqrt(MSE)。

3、平均絕對誤差:MAE(Mean Absolute Error)

以上各指標,根據不同業務,會有不同的值大小,不具有可讀性,因此還可以使用以下方式進行評測。

4、決定系數:R2(R-Square)

其中,分子部分表示真實值與預測值的平方差之和,類似於均方差 MSE;分母部分表示真實值與均值的平方差之和,類似於方差 Var。

根據 R-Squared 的取值,來判斷模型的好壞,其取值范圍為[0,1]:

如果結果是 0,說明模型擬合效果很差;

如果結果是 1,說明模型無錯誤。

一般來說,R-Squared 越大,表示模型擬合效果越好。R-Squared 反映的是大概有多准,因為,隨着樣本數量的增加,R-Square必然增加,無法真正定量說明准確程度,只能大概定量。

5、校正決定系數(Adjusted R-Square)

其中,n 是樣本數量,p 是特征數量。

Adjusted R-Square 抵消樣本數量對 R-Square的影響,做到了真正的 0~1,越大越好。

python中可以直接調用

  1.  
    from sklearn.metrics import mean_squared_error #均方誤差
  2.  
    from sklearn.metrics import mean_absolute_error #平方絕對誤差
  3.  
    from sklearn.metrics import r2_score#R square
  4.  
    #調用
  5.  
    MSE:mean_squared_error(y_test,y_predict)
  6.  
    RMSE:np.sqrt(mean_squared_error(y_test,y_predict))
  7.  
    MAE:mean_absolute_error(y_test,y_predict)
  8.  
    R2:r2_score(y_test,y_predict)
  9.  
    Adjusted_R2:: 1-((1-r2_score(y_test,y_predict))*(n-1))/(n-p-1)
  • 1

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM