昨天聊完一些關於梯度下降法的實作問題之後,今天要來看看另外一個問題
昨天提到的種種問題,其實都發生在同一個模型當中,也就是
y = a * x + b
如果我們用不同的模型,能不能找到更好的曲線,進而降低 Loss function 的值呢?
這是原本簡單線性模型的模擬圖
如果我們改用二次式
y = a * x^2 + b * x + c
看起來好像貼近了一點
如果我們改用三次式
y = a * x^3 + b * x^2 + c * x + d
如果我們改用四次式
y = a * x^4 + b * x^3 + c * x^2 + d * x + e
到了這邊,都可以看到前後兩個點都直接落在線上了,想必會是一個更好的模型吧
單用眼睛看當然不準,讓我們實際來算算看。結果如下
模型 | error |
---|---|
一次式 | 1879.6 |
二次式 | 1658.4 |
三次式 | 1455.7 |
四次式 | 1385.2 |
看起來模型的確是越來越準確,Loss function 的值很明顯越來越小,而且比昨天我們在那邊調整 learning rate 與 iteration 所帶來的效果還要大
當我們用訓練資料訓練完機器後,你可以想像我們唸完參考書之後,接下來還不能直接上考場,而是會先來個模擬考,來測驗看看這個機器是不是真的訓練好了。
如果你還記得的話,在 [Day 3] 機器學習的步驟 中我們有提到 評估分析(Evaluation) 的這個階段
當我們覺得我們的機器訓練到某個程度之後,我們就可以拿先前準備好的測試資料來考考它,看看機器是不是真的可以面對實際沒有見過的狀況,而不是只會處理有看過的訓練資料而已。
因此我們這裡準備了測試資料如下
x_test_data = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
y_test_data = [18.8, 20.9, 23.2, 27.0, 32.9, 39.7, 47.8, 58.0, 68.6, 81.1]
然後保險起見,同時帶入剛剛訓練的四種模型,來看看結果如何
模型 | error |
---|---|
一次式 | 260.9 |
二次式 | 2.6 |
三次式 | 194.8 |
四次式 | 339.9 |
哇這時候竟然發現,表現最好的是第二個模型,而不是第四個模型,這是為什麼呢?
這裡就要進入今天要提到的重點了:Underfitting and Overfitting,中文叫做低度擬合與過度擬合(也有人叫欠擬合與過擬合)
簡單來說,就是我們所使用的訓練資料,不代表真實世界的所有情況,因此當我們盡可能的去訓練模型,讓模型可以非常精確的去預測「看過的資料」,但是不代表這個訓練完的模型,就可以精準地去預測「沒有看過的資料」。
這也就是為什麼我們需要把手上的資料拆成「訓練資料」以及「測試資料」,就是要在這個時候派上用場
在低度擬合的狀態,模型沒有辦法很準確地去解釋資料之間的關係,有可能是我們選擇的特徵過少,或者是迭代的次數不夠。在低度擬合的情況下,機器連參考書裡面的題目都搞不定,更不用說去應付模擬考或是大考。
而在過度擬合的狀態,譬如剛剛的「三次式」模型與「四次式」模型,在訓練資料檔中可以很準確,但是在測試資料中的表現不如預期,有可能是我們加入了太多的特徵值,或者是訓練資料太少,導致訓練出來的機器沒有辦法應付測試資料或真實世界的狀況。在高度擬合的情況下,機器太會做參考書裡面的題目了,但是遇到沒看過的題目,像是模擬考中的題目,就沒有辦法舉一反三的去應對了。
(備註:我想通常訓練資料出來 error 應該會小於測試資料的 error,這裡出現相反的情況,可能的原因是訓練不足,或者是訓練資料不夠好)