【機器學習12】線性迴歸算法評價指標:MSE、RMSE、R2_score

【機器學習12】線性迴歸算法評價指標:MSE、RMSE、R2_score

摘要:MSE、RMSE、MAE、R2_score。

上一篇文章我們介紹了簡單的一元線性迴歸算法,今天介紹評價線性迴歸效果好壞的幾個重要指標。

在介紹這幾個指標前,先來回顧下上節是如何建立線性迴歸模型的。

對一個有 m 個樣本和 1 個特徵的數據集,拆成訓練集和測試集後。在訓練集上讓預測值 y 和真實值 y 之間的差值平方和儘可能地小:
\sum_{i=1}^{m}\left(y_{t r a i n}^{(i)}-\hat{y}_{t r a i n}^{(i)}\right)^{2}= \sum_{i=1}^{m}\left(y_{\text {train}}^{(i)}-a x_{\text {train}}^{(i)}-b\right)^{2}

然後求解出 a 和 b 得到迴歸模型,應用到測試集上計算出預測值 y:
\hat{y}_{t e s t}^{(i)}=a x_{t e s t}^{(i)}+b
最後計算出預測值和真實值的差值平方和,作爲衡量線性迴歸模型好壞的評價指標:
\sum_{i=1}^{m}\left(y_{t e s t}^{(i)}-\hat{y}_{t e s t}^{(i)}\right)^{2}
不過上式有個問題:值的大小和樣本數量 m 有密切關係,這樣的結果是無法衡量模型好壞的。

MSE

舉個例子,假設建立了兩個模型,一個模型使用了 10 個樣本,計算出的上式值是 100;另一個模型使用了 50 個樣本,計算出的值是 200,很難判斷兩個模型哪個更好。

那怎麼辦呢,其實很好解決,將上式除以 m 就可以去除樣本數量的影響:

\frac{1}{m} \sum_{i=1}^{m}\left(y_{\text {test}}^{(i)}-\hat{y}_{\text {test}}^{(i)}\right)^{2}=MSE
這個式子的結果就是第一個模型評價指標:均方誤差 MSE(Mean Squared Error)

針對上面舉例的兩個模型,他們的 MSE 分別是 10(100/10)和 4 (200/50),所以後者模型效果更好。

RMSE

但是,MSE 公式有一個問題是會改變量綱。因爲公式平方了,比如說 y 值的單位是萬元,MSE 計算出來的是萬元的平方,對於這個值難以解釋它的含義。所以爲了消除量綱的影響,我們可以對這個MSE 開方,得到的結果就第二個評價指標:均方根誤差 RMSE(Root Mean Squared Error)

\sqrt{\frac{1}{m} \sum_{i=1}^{m}\left(y_{\text {test}}^{(i)}-\hat{y}_{\text {test}}^{(i)}\right)^{2}}=\sqrt{M S E_{\text {test}}} = RM S E_{\text {test}}
可以看到 MSE 和 RMSE 二者是呈正相關的,MSE 值大,RMSE 值也大,所以在評價線性迴歸模型效果的時候,使用 RMSE 就可以了。

MAE

上面公式爲了避免誤差出現正負抵消的情況,採用計算差值的平方。還有一種公式也可以起到同樣效果,就是計算差值的絕對值:
\sum_{i=1}^{m}\left|y_{i e s t}^{(i)}-\hat{y}_{t s t}^{(i)}\right|
因此,將上式也除以樣本數 m 得到的結果就是第三個評價指標:平均絕對誤差 MAE(Mean Absolute Error)

\frac{1}{m}\sum_{i=1}^{m}\left|y_{i e s t}^{(i)}-\hat{y}_{t s t}^{(i)}\right|=M A E
上面三個模型解決了樣本數量 m 和 量綱的影響。但是它們都存在一個相同的問題:當量綱不同時,難以衡量模型效果好壞。

舉個例子,模型在一份房價數據集上預測得到的誤差 RMSE 是 5 萬元, 在另一份學生成績數據集上得到誤差是 10 分。憑這兩個值,很難知道模型到底在哪個數據集上效果好。

R2_score

那如何比較不同量綱下模型的效果好壞呢?這就需要用到迴歸模型的第四個評價指標:R方值(R2_score)

它的含義就是,既然不同數據集的量綱不同,很難通過上面的三種方式去比較,那麼不妨找一個第三者作爲參照,根據參照計算 R方值,就可以比較模型的好壞了。

這個參照是什麼呢,就是均值模型。我們知道一份數據集是有均值的,房價數據集有房價均值,學生成績有成績均值。現在我們把這個均值當成一個基準參照模型,也叫 baseline model。這個均值模型對任何數據的預測值都是一樣的,可以想象該模型效果自然很差。基於此我們纔會想從數據集中尋找規律,建立更好的模型。

R2_score 的計算公式是這樣的:
R^{2}=1-\frac{\sum_{i}\left(\hat{y}^{(i)}-y^{(i)}\right)^{2}}{\sum_{i}\left(\overline{y}-y^{(i)}\right)^{2}}

通過它的取值可以更好理解它是如何評價模型好壞的,有這幾種取值情況:

R2_score = 1,達到最大值。即分子爲 0 ,意味着樣本中預測值和真實值完全相等,沒有任何誤差。也就是說我們建立的模型完美擬合了所有真實數據,是效果最好的模型,R2_score 值也達到了最大。但通常模型不會這麼完美,總會有誤差存在,當誤差很小的時候,分子小於分母,模型會趨近 1,仍然是好的模型,隨着誤差越來越大,R2_score 也會離最大值 1 越來越遠,直到出現第 2 中情況。

R2_score = 0。此時分子等於分母,樣本的每項預測值都等於均值。也就是說我們辛苦訓練出來的模型和前面說的均值模型完全一樣,還不如不訓練,直接讓模型的預測值全去均值。當誤差越來越大的時候就出現了第三種情況。

R2_score < 0 :分子大於分母,訓練模型產生的誤差比使用均值產生的還要大,也就是訓練模型反而不如直接去均值效果好。出現這種情況,通常是模型本身不是線性關係的,而我們誤使用了線性模型,導致誤差很大。

理解了 R2_score 後,我們可以對它的計算公式作進一步改進,以便後面編程實現。將分子和分母同除以一個 m,就能得到下式:
R^{2}=1-\frac{\left(\sum_{i=1}^{m}\left(\hat{y}^{(i)}-y^{(i)}\right)^{2}\right) / m}{\left(\sum_{i=1}^{m}\left(y^{(i)}-\overline{y}\right)^{2}\right) / m} = 1-\frac{M S E(\hat{y}, y)}{\operatorname{Var}(y)}

分子是均方誤差,分母是方差,都能直接計算得到,從而能快速計算出 R2 值。

以上我們就介紹了評價線性迴歸模型的四個指標,下面通過波士頓房價數據集來實際計算一下。

實際案例計算

之前在運用 kNN 算法解決迴歸問題時就已經介紹過波士頓房價數據集,這裏不再贅述。由於現在是介紹簡單一元線性迴歸,所以只使用其中一個跟房價相關度最高的特徵:LSTAT(社區低收入人羣比例),建立線性迴歸模型後,便可計算模型的幾個評價值。

可以看到該特徵和房價呈負相關關係,很容易理解:低收入人羣越多的社區,該比例越高,房價自然也就越低。

將數據劃分爲訓練集和測試集後,使用上一篇教程中手寫的線性迴歸算法建立迴歸模型,得到最佳擬合直線:

解析來就可以計算各項值了。

均方誤差值 MSE:

均方根誤差值 RMSE:

平均絕對誤差 MAE:

可以看到,RMSE 比 MAE 的值要大一些,因爲當差值很大時,RMSE 會比MAE 放大這個差距。舉個例子,一個數據集有兩個樣本,樣本差分別是 2 和 100,
則 MAE =(2+100)/2=51,而 RMSE 增大到了 70。

最後計算一下 R2_score 值:

R2_score 只有 0.51 分,模型並不理想,主要是因爲我們的線性迴歸模型只使用了一個特徵,如果使用多個特徵的話效果可能會更好,下一節我們介紹多元線性迴歸會再計算該值。

爲了作爲對比,還可以計算 kNN 模型下的 R2_score 值,可以看到只有 0.48 分,還不如線性迴歸。

本文的 jupyter notebook 代碼,可以關注公衆號:高級農民工 回覆「LR2」得到,加油!

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