1.Overfitting
所謂 Overfitting 指的就是過度訓練, 意思就是說機器學習所學到的 Hypothesis 過度貼近 Training Data , 而導致和
Testing Data 的時候, Error 變得更大
假設有一筆資料如下圖, 藍色的為 Training Data , 紅色的為 Testing Data ,
想要用高次多項式的 Hypothesis ,, 做 Linear Regression
其中, 是 weight, 表示這個多項式的次數 ( Order )
如果多項式的 Order 不夠大, 則無法使 Hypothesis 貼近 Training data , 如下圖
如果 Order 大小適中, 則可以使 Hypothesis 貼近 Training data 以及 Testing Data, 此時, 和 都會降低, 如下圖
如果 Order 太大, 則會使 Hypothesis 過度貼近 Training data , 因此遠離 Testing Data, 造成 變大, 如下圖
由此可知, Order 並不是越大, 就可以讓 Hypothesis 越準確, 當 Order 太大的時候, 造成 變大, 這種情形稱作 Overfitting
接著來實際操作看看 Overfitting 這種情形
2.Implementation 1
首先, 開一個新的檔案, 命名為 overfitting.py
載入必要的模組, 並輸入data, 如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
再來, 新增兩個function如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
其中, plot_data( y_model, title='')
是用來畫圖的 function ,而 linear_regression(order)
是用來做 Linear Regression 的 function , 參數 order
即為多項式的次數
然後, 到 interactive mode 載入剛剛的檔案
1
|
|
試試看不同 Order 的多項式, 得出的 Hypothesis 有什麼不一樣
例如, 輸入 8
和 15
這兩種 Order , 所得出的結果如下
1 2 3 4 5 |
|
所得出的圖形分別如下
多嘗試幾種不同的 Order 看看
然後將不同 Order 所得出的 和 , 列成表格
並根據這些資料來畫圖表
以上結果顯示, 當 Order = 9 時, 有最小的 , 通常會選擇 最小的 Hypothesis , 為成最佳的 Hypothesis
把 Order 由小逐漸增大的過程, 做成動畫, 如下:
3.Regularization
如果我們避免 Overfitting , 除了從 Order 較低的 Hypothesis 逐一嘗試之外, 還有一種方式叫做 Regularization
Regularization 的概念就是, 限制 weight 的平方和, 為某一個常數
為什麼這樣就可以避免 Over Fitting ?
例如,如果要用一個三次的多項式 做為 Hypothesis
可以把 看成是一個 次的多項式, 但是次數大於 3 的 weight 都等於 0 , 如下
可以把 推廣成這樣
由以上式子可知,
但是對於 的最佳化問題, 是 NP-Hard , 所以就改成平方和
因此, 可以用 Regularization 來避免多項式的 weight 平方和過大, 間接降低多項式的次數
此推導過程參考於 Coursera 線上課程 機器學習基石
至於如何將 Regularization 用於 Linear Regression , 我們先來看看 Linear Regression 的 Weight 是如何計算的,
加上 Regularization 以後會變成這樣, 其中
在此不推導此公式, 請參考 Coursera 線上課程 Machine Learning
4.Implementation 2
來實作 Regularization , 看看它如何避免 overfitting 的發生
新增一個 function 到 overfitting.py
1 2 3 4 5 6 7 8 9 10 |
|
regularization(C)
是用來做 Regularized Linear Regression 的 function , C 可以用來控制 overfitting 的程度, C 越小 , overfitting 的程度越低
接著到 interactive mode 重新載入 overfitting.py
1 2 |
|
試試看不同 C , 得出的 Hypothesis 有什麼不一樣
例如, 輸入 10
,50
, 1000
和 10000000
, 所得出的結果如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
所得出的圖形分別如下
從以上結果顯示, 如果太小, 和多項式的 Order 太小的結果一樣, 都無法貼近 Training Data , 而 過大的結果, 也會產生 overfitting , 過度貼近 Training Data 使得 變大
多嘗試幾種不同的 C 看看
然後將不同 C 所得出的 和 , 列成表格
並根據這些資料來畫圖表
以上結果顯示, 當 C = 200 時, 有最小的 , 通常會選擇 最小的 Hypothesis , 為成最佳的 Hypothesis
把 C 由小逐漸增大的過程, 做成動畫, 如下:
註:
-
理論上, 當 C 趨近於無限大 應該要趨近於 0 , 但根據以上結果 仍然無法趨近於 0 , 這可能是由於
numpy
這個 package ,在計算 pseudo inverse matrix 的時候產生的, 使得 無法趨近於 0 -
為了避免計算 pseudo inverse matrix 的誤差, 或許可以改用 Gradient descent 的方式做最佳化
5.Reference
本文參考至以下兩門 Coursera 線上課程
1.Andrew Ng. Machine Learning
https://www.coursera.org/course/ml
2.林軒田 機器學習基石 (Machine Learning Foundations)
https://www.coursera.org/course/ntumlone