如何選擇迴歸損失:MAE還是MSE?

在做迴歸建模相關任務時,最常用評價指標是MAE、MSE、RMSE中的一個或多個,但如何根據自己的具體任務場景(數據分佈)選擇更合適的模型評估指標指標呢?這裏我們就要需要弄明白MAE與MSE之間到底有什麼不同。

1、什麼是MAE

MAE(mean absolute error),即平均絕對值誤差,也可以看做L1損失,是一種用於迴歸模型的常用損失函數。MAE是目標值和預測值之差的絕對值之和。其只衡量了預測值誤差的平均模長,而不考慮方向,取值範圍也是從0到正無窮(如果考慮方向,則是殘差/誤差的總和——平均偏差(MBE))。MAE計算公式如下:

                                                 

下圖是MAE函數的圖像,其中目標值是100,預測值的範圍從-10000到10000,Y軸代表的MAE取值範圍是從0到正無窮,並且在預測值爲100處達到最小。通過數值模擬,平均絕對值誤差的形狀如下:

                  

2、什麼是MSE

MSE(mean squared error),即均方誤差,可以看做是一種L2損失,也是一種最常用的迴歸損失函數。MSE是求預測值與真實值之間距離的平方和。MSE的計算公式如下:

                                                       

下圖是MSE函數的圖像,其中目標值是100,預測值的範圍從-10000到10000,Y軸代表的MSE取值範圍是從0到正無窮,並且在預測值爲100處達到最小。通過數值模擬,平均絕對值誤差的形狀如下:

                   

3、MSE(L2損失)與MAE(L1損失)的比較

簡單來說,MSE計算簡便,但MAE對異常點有更好的魯棒性。下面就來介紹導致二者差異的原因。

訓練一個機器學習模型時,我們的目標就是找到損失函數達到極小值的點。當預測值等於真實值時,這兩種函數都能達到最小。

下面是這兩種損失函數的python代碼。你可以自己編寫函數,也可以使用sklearn內置的函數。

# true: Array of true target variable
# pred: Array of predictions
def mse(true, pred):
    return np.sum((true - pred)**2)
def mae(true, pred):
    return np.sum(np.abs(true - pred))
# also available in sklearn
# from sklearn.metrics import mean_squared_errorfrom 
# sklearn.metrics import mean_absolute_error

下面讓我們觀察MAE和RMSE(即MSE的平方根,同MAE在同一量級中)在兩個例子中的計算結果。第一個例子中,預測值和真實值很接近,而且誤差的方差也較小。第二個例子中,因爲存在一個異常點,而導致誤差非常大。

可見:左圖:誤差比較接近 右圖:有一個誤差遠大於其他誤差

4、MSE與MAE各自的優缺點

1、MSE對誤差取了平方(令e=真實值-預測值),因此若e>1,則MSE會進一步增大誤差。如果數據中存在異常點,那麼e值就會很大,而e則會遠大於|e|。因此,相對於使用MAE計算損失,使用MSE的模型會賦予異常點更大的權重。在第二個例子中,用RMSE計算損失的模型會以犧牲了其他樣本的誤差爲代價,朝着減小異常點誤差的方向更新。然而這就會降低模型的整體性能。如果訓練數據被異常點所污染,那麼MAE損失就更好用(比如,在訓練數據中存在大量錯誤的反例和正例標記,但是在測試集中沒有這個問題)。

2、直觀上可以這樣理解:如果我們最小化MSE來對所有的樣本點只給出一個預測值,那麼這個值一定是所有目標值的平均值。但如果是最小化MAE,那麼這個值,則會是所有樣本點目標值的中位數。衆所周知,對異常值而言,中位數比均值更加魯棒,因此MAE對於異常值也比MSE更穩定。

3、MAE存在一個嚴重的問題(特別是對於神經網絡):更新的梯度始終相同,也就是說,即使對於很小的損失值,梯度也很大。這樣不利於模型的學習。爲了解決這個缺陷,我們可以使用變化的學習率,在損失接近最小值時降低學習率。而MSE在這種情況下的表現就很好,即便使用固定的學習率也可以有效收斂。MSE損失的梯度隨損失增大而增大,而損失趨於0時則會減小。這使得在訓練結束時,使用MSE模型的結果會更精確。

5、MSE與MAE如何選擇損

如果異常點代表在商業中很重要的異常情況,並且需要被檢測出來,則應選用MSE損失函數。相反,如果只把異常值當作受損數據,則應選用MAE損失函數。總的來說,處理異常點時,MAE損失函數更穩定,但它的導數不連續,因此求解效率較低。MSE損失函數對異常點更敏感,但通過令其導數爲0,可以得到更穩定的封閉解。

當兩者問題同時存在時,就需要考慮其他的更合適的損失函數了,如Huber損失(平滑的平均絕對誤差)、Log-Cosh損失、分位數損失等,詳見https://baijiahao.baidu.com/s?id=1603857666277651546&wfr=spider&for=pc

參考:https://baijiahao.baidu.com/s?id=1603857666277651546&wfr=spider&for=pc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章