Photo by Christopher Gower on Unsplash

透過 Bias 和 Variance 判斷模型是否有Overfitting 或 Underfitting

Eric Tsai

--

最近在上 Coursera 的課程,裡面提到了用 Bias 和 Variance 去辨別是否有 overfitting 和 underfitting,當下真的覺得過去的我都是以感覺在訓練模型,沒有用明確指標去輔助模型的建置,因此決定寫這篇文章,紀錄一下過去的我對 overfitting 和 underfitting 的判斷有多麼的隨便。我們先來看一下維基百科對兩者的定義:

在統計學中

過適(英語:overfitting,或稱擬合過度)是指過於緊密或精確地匹配特定資料集,以致於無法良好地調適其他資料或預測未來的觀察結果的現象。

乏適(英語:underfitting,或稱:擬合不足);它是指相較於資料而言,模型參數過少或者模型結構過於簡單,以至於無法捕捉到資料中的規律的現象。

相信很多人在上網找資料時總會看到有人判斷 overfitting 的方式是觀察訓練結果是否很大的優於測試結果,如果有就將其判斷成 overfitting,但造成訓練和測試結果有差距的原因有很多,overfitting 只是其中一種。舉一個例,如果你資料切分的不乾淨,也很可能造成訓練資料和測試資料的 pattern 有較大的差異,造成結果上有顯著的不同,或是其實我根本沒有把模型訓練好,測試結果當然不會好,甚至更差。

因此實務上與其透過訓練和測試結果的差距去判斷模型是否有 overfitting 和 underfitting,不如用 bias 和 variance 更好的收斂模型現況問題。其實學過統計學的人應該對 bias 和 variance 都不陌生,對數學推導有興趣的人可以去看這篇,我這邊用實證的方式展示給各位看。

步驟一 產生假資料

目標是產生一個上半圓來當作我們的資料集。

步驟二 切分資料

藍色的是 training data,橘色的是 test data。

步驟三 訓練模型

這邊用了四個模型,依序是線性回歸、決策樹回歸、多項式回歸(degree=2) 、多項式回歸(degree=8),模型訓練結果如下:

步驟四 找出 Bias 和 Variance

上面是兩者的公式,看起來很熟悉吧~學過統計的人一定推導過。bias 簡單來說就是模型估計值與真實值整體的平均誤差(亦可視為預測模型與真實資料 pattern 的平均誤差),而 variance 就是模型自身的變異程度。

這裡值得一提的是,一般我們在做機器學習的專案時,不會特別假設什麼函數或分配,所以有時候你可能會無法輕易的將統計模型與機器學習的模型連結在一起,實際上他們的概念是一樣的,區別只在於求解的方法,統計學擅長推導求出公式解,機器學習擅長透過近似求解,還有統計上的真實資料是透過假定一個真實函數所產生的隨機變數而來,而機器學習是透過蒐集大量的數據做為真實資料的集合,這也是為何大數據與機器學習密不可分的原因。

從步驟三我們可以發現,線性回歸和degree=2的多項式回歸當自變數(feature)小幅變動時,模型的估計值並無劇烈的高低起伏,但右邊的決策樹和degree=8 的多項式回歸 ,相對而言比較容易因為自變數(feature)的變動而大起大落,這也反映了有些時候如果你用相對複雜的模型去解釋簡單的 pattern ,會導致模型去追求與訓練資料非常擬合(overfitting),導致估計模型的 variance 很大,且 bias(測試結果)不好,不過 bias 也不至於太大,如果太大可能就是資料沒切乾淨,訓練和測試集 pattern 有顯著差距,或是模型未收斂導致。反過來說,在 bias 很大的情況下,variance 很小,代表模型太過簡單,沒有辦法讓模型好好的擬合訓練資料,更別提能夠有好的測試結果,這時就是發生 underfitting 的現象了。

想要了解更多,可以去看 mlxtend 套件的 Bias-Variance Decomposition 函數說明,我也是用此套件計算模型的 bias 和 variance。

模型 Bias 和 Variance 計算結果如下

Linear Regression :

Average expected loss(MSE): 0.070
Average bias: 0.068
Average variance: 0.002

結論: 低 varience,高 bias => 為 underfitting 的特徵

Decision Tree Regressor:

Average expected loss(MSE): 0.015
Average bias: 0.007
Average variance: 0.009

結論: 低 bias,高 varience=> 為 overfitting 的特徵

Polynomial Basis Model(degree=2):

Average expected loss(MSE): 0.006 
Average bias: 0.004
Average variance: 0.002

結論: 低 bias,低 varience => 通常這種情況 mse 很可能也很低!

Polynomial Basis Model(degree=8):

Average expected loss(MSE): 140.643 
Average bias: 1.412
Average variance: 139.231

結論: 高 bias,高 varience => 模型架構不適合此資料集導致模型並未收斂,當然有時候也可能是模型訓練的不夠久而導致

下面這張圖常被用來解釋 bias 和 variance(我用 draw.io 畫了一張),讀者可以思考一下,哪一種是 overfitting 哪一種是 underfitting 呢?(上面就有答案了)

結論:

不知道各位有沒有經歷過,模型太強,導致 overfitting 的現象,因此加入一些可以干擾模型收斂的參數或是透過降低訓練疊代次數等方法讓模型不要過度擬合訓練資料,結果重新訓練的模型效果很差,又要加強模型的複雜度,讓模型預測能力更強,像這種拉扯的過程,其實就是所謂的 Bias–variance tradeoff,也是資料科學家必須跨過的重要難題😱,完整的程式碼放在我的 GitHub,謝謝 !

--

--

Responses (5)