線性迴歸評價指標

本文參考餅乾Japson《模型之母:線性迴歸的評價指標》編寫
今天,我們學習線性迴歸算法的評價指標——MSE、RMSE、MAE、R Square。

一、瞭解線性迴歸算法的衡量標準

引用餅乾Japson的話。已知訓練數據樣本x、y,找到a和b的值,使i=1n(y(i)ax(i)b)2\sum_{i=1}^{n} (y^{(i)}-ax^{(i)}-b)^2儘可能小 。
實際上是找到訓練數據集中i=1n(y(i)ypredict(i))2\sum_{i=1}^{n} (y^{(i)}-y_{predict }^{(i)})^2最小。
衡量標準是看在測試數據集中y的真實值與預測值之間的差距。
因此我們可以使用下面公式作爲衡量標準:
i=1n(y(i)ypredict(i))2\sum_{i=1}^{n} (y^{(i)}-y_{predict }^{(i)})^2
但是這裏有一個問題,這個衡量標準是和m相關的。在具體衡量時,測試數據集不同將會導致誤差的累積量不同。
首先我們從“使損失函數儘量小”這個思路出發:
對於訓練數據集合來說,使i=1n(ytrain(i)axtrain(i)b)2\sum_{i=1}^{n} (y_{train}^{(i)}-ax_{train }^{(i)}- b)^2儘可能小
在得到a和b之後將xtestx_{test}代入a、b中。可以使用i=1n(ytest(i)ytestpredict(i))2\sum_{i=1}^{n} (y_{test}^{(i)}-y_{test predict }^{(i)})^2來作爲衡量回歸算法好壞的標準。

二、四個指標

2.1 均方誤差MSE(Mean Squared Error)

公式:1/mi=1m(ytest(i)ytestpredict(i))21/m \sum_{i=1}^{m}(y_{test}^{(i)}-y_{test predict }^{(i)})^2
代碼:

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,公式:1/mi=1m(ytest(i)ytestpredict(i))2=MSEtest\sqrt{1/m \sum_{i=1}^{m}(y_{test}^{(i)}-y_{test predict }^{(i)})^2} =\sqrt{MSE_{test}}
代碼:

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是非常樸素評測標準,公式:1/mi=1mytest(i)ytestpredict(i)1/m \sum_{i=1}^{m}|y_{test}^{(i)}-y_{test predict }^{(i)}|
代碼:

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(R2R^2)

因RMSE和MAE受量綱的侷限性影響,無法對不同量綱的模型評價好壞,於是,引入R2R^2指標。公式:R2=1SSresidual/SStotal=1(ypredict(i)y(i))2/(ymeany(i))2=1MSE(ypredict(i),y)/Var(y)R^2=1- SS_{residual}/SS_{total} =1-\sum (y_{predict }^{(i)}-y^{(i)})^2 /\sum (y_{mean}-y^{(i)})^2 =1-MSE(y_{predict }^{(i)},y)/Var(y)

R2R^2的好處:
①、對於分子來說,預測值和真實值之差的平方和,即使用我們的模型預測產生的錯誤。
②、對於分母來說,是均值和真實值之差的平方和,即認爲“預測值=樣本均值”這個模型(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 總結

①、R2R^2 小於等於1,可能取負數。
②、R2R^2越大模型擬合度越高。值在[0.5,0.7)區間說明模型很好,值在[0.7,0.96)區間說明模型非常好,值大於等於0.96需要考慮模型是否過擬合。
③、R2R^2小於0,說明模型很糟糕,連’瞎猜’的效果都不如。

附上代碼.

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