Table of Contents
機器學習自學筆記03: Where does the error come from? 認識error 的來源,並且知道如何調整model
今日的課程來自於: https://youtu.be/D_S6y0Jm6dQ
當我們在做機器學習時,使用不同的function set(model) 會得到不同的error,而且越複雜的model不一定在testing會有比較低的error
今天要探討這些error 來自什麼地方,並且如何判斷是哪一種error,並且知道error的來源,就能夠挑選適當的方法來improve model
兩個 Error 的主要來源 : bias & variance
Estimator
理論上,在預測寶可夢CP值中,會有一個最佳的function: f̂(基本上就是寶可夢公司設定的函數)而我們的目標就是從training data 中訓練資料,並且找到最佳的函數 f* (希望他可以很靠近 f̂)
所以f* 就是 f̂的估計量 ( f* is an estimator of f̂ )
我們在求f*當然會希望越接近f̂越好,而兩者的差距就是error
而這error 因兩者導致 1. bias 2.variance
bias and variance of estimator
假設今天我們有一組data X ,data X 的 平均數是: μ,變異數是: σ²
(E(x)=μ , Var(x)=σ²)
要如何估算μ & σ²
我們生一組 sample 有 N 筆 data ,m為這組sample的平均,但是他不等於μ,但是如果取很多個m,並且取他的期望值就等於μ 。因為我們用m來估計μ ,且m這個估計值是不偏的 (E(m)= μ) 。
在計算而 variance 是 bias 的 ( Var(m)=σ²/N ) ,並且會因為sample size 的大小決定m的變異數。如果今天N比較少,m就會比較分散 ; 如果今天的N比較多,m 就會比較集中。
而估算變異數,先用前面的辦法估算m, 在計算(x^n-m)²的平均值(=S²),但是E(S²)≠σ² ,因為他是biased。 如果N越大的話,σ² 跟 s² 估測之間的差距就會變小。
bias vs variance:
假設我們的靶心是 f̂ ,就是我們目標要找到的函數。
而f*是我們求出來的解;f bar 是所有解的期望值(E(f*)=f bar)。
從右下角的圖可以看到,f̂和 f bar 的距離是bias ,f*和 f bar 的距離是variance。
Parallel Universes
假設在不同的宇宙中,我都去抓十隻寶可夢,抓到的都是不一樣的寶可夢
假設我們用同樣的model ,但是你給他的data 不一樣,那每個function 的f* 就是不一樣。
我們將100個不同宇宙的 f* 都找出來,使用不同的model 來比較
model 較簡單,這一百個model 印出來也會比較集中,也就是variance 較小
model 較複雜,可以發現model印出來已經散開了,也就是variance 比較大
比較簡單的model,他受到不同data 的影像是比較小的
當你給的這個model他的複雜度越來越高的時候,它的variance就會越來越大
Bias
如果是一個大的bias ,我們將所有的 f*平均起來,得到的 f bar 與 f̂ 是有距離的
如果是一個小的bias,將所有的f*平均起來,它的平均值與靶心是接近的
怎麼量bias ?
黑色的曲線: 真實的function f̂
紅色是曲線: 5000次實驗的f*
藍色是曲線: 5000次實驗f* 的平均(f bar)
黑色線與紅色線之間就是bias 。
可以看到下面的圖比較,左邊是一次式(較簡單的函數),右邊是五次式(複雜的函數)。
如果是簡單的model,它就有比較大的bias
如果是一個複雜的model,雖然每次找出來的f* 都不一樣,它就有比較小的bias
Why ? 怎麼解釋呢 ?
如果是簡單的model,它的space 是比較小的。在這個小的範圍裡,它可能根本不包含你的target,所以怎麼樣sample 平均起來都與target 有一段距離。
如果是複雜的model,它的space是比較大的,它比較有可能包含我們的target。但是可能因為給的training data 不夠,所以每次的f*都不一樣,但是平均起來得到的 f bar會在 target 附近,雖然他的variance比較大,但是平均起來的bias會比較小。
Underfitting vs Overfitting
當error 來自 bias 很大,則稱為Underfitting
當error 來自 variance 很大,則稱為Overfitting
怎麼判斷發生Underfitting or Overfitting
Underfitting
如果你的model 沒有辦法fit 你的training 的example ,那麼代表bias 是大的。
假設如果只有幾筆data,而model連這幾筆都沒有fit到,代表bias是大的,這就是underfitting。
Overfitting
如果在training data上得到小的error,但是在testing data 上卻得到一個大的error,代表你的model 的variance比較大,也就是overfitting。
Bias 大 的解決方法
重新設計model , 因為bias 大,表示現在使用的model根本沒有包含你的target。(可以加入更多的feature)
Variance 大的解決方法
- More data
增加收集的data,是有效控制variance的方法,並且不會增加bias。
如果不能收到其他資料,可以generate 假的data。 - Regularization
在loss function裡面新增一個term(或增加weight),希望我們的曲線越平滑越好。但是可能增加bias,因為我們調整了function space ,變成只包含比較平滑的曲線,就無法包含f̂,就會使bias 增加。
所以做regularization的時候,要調整regularization的weight,在variance與bias 之間取得平衡。
Model Selection
在挑選Model時,會在bias 和 variance 之間作一些取捨,我們當然希望bias 小,variance 也小,這樣會使testing data 的error 最小
而在挑選model時,我們當然會挑選testing data 的error 最小的那一項。但是真實的 (private) testing error 通常會比 (problic) testing error 大。testing set 的 error 無法反映到真實的狀況中。
Cross validation
有一個方法可以解決,就是cross validation,我們將training data 分成兩個部分,training set & validation set 。 同樣先用training data 找出最好的function f*,再用validation set 的結果來選擇model。這樣public testing error 就能真實反映在 private error 。
如果覺得資料太少,可以選好模型之後,就將所有的training data 使用在training data ,之後public testing 的 error 一樣能真實反映在 private error 。
通常我們看到testing 後的結果都會想要回去動手腳,但是不建議。因為這樣就會將public testing set 的 bias 考慮進去了,所以會導致在public testing set 上所看到的 error 無法反映在真實狀況中。
N-fold Cross validation
如果在分training set 時分的不好,validation set 出現bias 時怎麼辦? 這時候可以用 N-fold cross validation。
基本上N-fold cross validation,就是將training data 分成 n 組,再輪流當validation set 。最後將每一個model 計算 average error ,就能夠選擇model ,並將training data 合併,使用選好的model 從新training ,在去test 在你的testing set 中。
那原則上就是,如果你少去在意你在 public (testing)set得到的error,就是少去根據它調整你的 model 的話,你往往會在 private set上面得到的差距和 testing set 是比較小的。