本文參考餅乾Japson《模型之母:線性迴歸的評價指標》編寫
今天,我們學習線性迴歸算法的評價指標——MSE、RMSE、MAE、R Square。
一、瞭解線性迴歸算法的衡量標準
引用餅乾Japson的話。已知訓練數據樣本x、y,找到a和b的值,使儘可能小 。
實際上是找到訓練數據集中最小。
衡量標準是看在測試數據集中y的真實值與預測值之間的差距。
因此我們可以使用下面公式作爲衡量標準:
但是這裏有一個問題,這個衡量標準是和m相關的。在具體衡量時,測試數據集不同將會導致誤差的累積量不同。
首先我們從“使損失函數儘量小”這個思路出發:
對於訓練數據集合來說,使儘可能小
在得到a和b之後將代入a、b中。可以使用來作爲衡量回歸算法好壞的標準。
二、四個指標
2.1 均方誤差MSE(Mean Squared Error)
公式:
代碼:
def mean_squared_error(y_true,y_predict):
"""計算y_true和y_predict之間的MSE"""
assert y_true.shape[0]==y_predict.shape[0],\
"the size of y_true must be equal to the size of y_predict"
return np.sum((y_true-y_predict)**2)/y_true.shape[0]
2.2 均方根誤差RMSE(Root Mean Squarde Error)
爲了解決量綱的問題,引入RMSE,公式:
代碼:
def root_mean_squared_error(y_true,y_predict):
"""計算y_true和y_predict之間的RMSE"""
return sqrt(mean_squared_error(y_true,y_predict))
2.3 平均絕對誤差MAE(Mean Absolute Error)
MAE是非常樸素評測標準,公式:
代碼:
def mean_absolute_error(y_true, y_predict):
"""計算y_true和y_predict之間的MAE"""
assert y_true.shape[0]==y_predict.shape[0],\
"the size of y_true must be equal to the size of y_predict"
return np.sum(np.absolute(y_true-y_predict))/y_true.shape[0]
從數學角度來分析,RMSE和MAE的量綱相同,但RMSE的結果較大,這是因爲RMSE是將錯誤值平方,平方操作會放大樣本中預測結果和真實結果較大的差距。MAE沒有放大。而我們就是要解決目標函數最大差距,因爲選RMSE更好一點。
2.4 R Square()
因RMSE和MAE受量綱的侷限性影響,無法對不同量綱的模型評價好壞,於是,引入指標。公式:
的好處:
①、對於分子來說,預測值和真實值之差的平方和,即使用我們的模型預測產生的錯誤。
②、對於分母來說,是均值和真實值之差的平方和,即認爲“預測值=樣本均值”這個模型(Baseline Model)所產生的錯誤。
③、我們使用Baseline模型產生的錯誤較多,我們使用自己的模型錯誤較少。因此用1減去較少的錯誤除以較多的錯誤,實際上是衡量了我們的模型擬合住數據的地方,即沒有產生錯誤的相應指標。
代碼:
/def r2_score(y_true,y_predict):
"""計算簡單線性迴歸準確度(R方)"""
return 1- mean_squared_error(y_true,y_predict)/np.var(y_true)
以上代碼我們封裝在metrics.py文件中。
2.5 總結
①、 小於等於1,可能取負數。
②、越大模型擬合度越高。值在[0.5,0.7)區間說明模型很好,值在[0.7,0.96)區間說明模型非常好,值大於等於0.96需要考慮模型是否過擬合。
③、小於0,說明模型很糟糕,連’瞎猜’的效果都不如。
附上代碼.