# 4.8 Model Selection Procedures # 背景 講這節之前我們先來回顧前一節,有關筆記「[4.7 Tuning Model Complexity: Bias / Variance Dilemma](https://hackmd.io/@pipibear/Sy7Fs2VOA)」的內容。 前一節的一開始,我們在講要 minimize estimate $g(x)$ 和 real value $r$ 之間的 error 時,一開始是針對單一個 sample 去討論,看依據這個 sample 建立出來的 $g()$ 在 input 為某個特定的 $x$ 時,expected square error 會是什麼樣的情形,也就是: \begin{equation} E[(r - g(x))^2|x] \end{equation} 接著我們發現這個值可以拆成兩部分,一部分是不管我們的 estimator $g()$ 怎麼選,都沒辦法去除的 noise,還有另一部分是會因為 $g()$ 的不同而改變的 squared error: \begin{equation} (E[r|x] - g(x))^2 \end{equation} 也就是平均來說當 input 為 $x$ 時我們預期的 output ($E[r|x]$),和我們的 estimate $g(x)$ 之間的差距平方。 從這個式子我們會發現,如果我們的 estimator $g()$ 不同,那 predict 的 $g(x)$ 就會不一樣,進而影響到整個 error 的值。並且,這個 estimator 怎麼來的?是根據我們的 sample 去估計得來,所以我們就發現當 error depends on sample 時,只取一個 sample 好像不太恰當。 因此我們就想,假如我們取 $M$ 個 samples,再取它們各自產生的 squared error 的平均作為 expected error,這樣好像更好,也就是: \begin{equation} E_{\chi}[(E[r|x] - g(x))^2|x] \end{equation} 我們接著發現這個東西可以拆成兩部分,一部分是 bias,另一部分是 variance。因此,為了要 minimize error,我們就去討論什麼樣的情形 mean 會比較小、什麼樣的情形 variance 會比較小,也介紹了 bias / variance dilemma 來說明他們之間的 trade-off,以及 complexity 對他們的影響,也就是本節要延續的主題。 --- # cross validation 前一節有講到,high complexity 會使得 bias 小,但 variance 大,如果 low complexity 則相反。 那麼,我們要如何在這之間取得一個平衡,決定一個 model 的 complexity 呢? 在實務上,我們會用一個方法叫做 <font color = "snake">cross-validation</font>,也就是 given 一個 dataset,我們將它分成兩部分: - training set - validation set > cross-validation 其實在「[2.7 Model Selection and Generalization](https://hackmd.io/@pipibear/S14QwU4VC)」也有講過。 我們用 training set 來 train 具有不同 complexities 的 candidate models,再用 validation set 來測試它們的 error。 延續我們前一節的內容: :::warning 當 model complexity 增加,training error 會不斷下降;但是對於 validation set 的 error,當 complexity 增加到某個程度以後,就不會再下降了,甚至如果 data 裡有 noise 的話可能還會上升。 ::: > 因為 model complexity 的增加,意味著我們更貼近 training set 的 data,所以當我們再去對 validation set 做測試時,這個 high complexity 的 model 就不夠 generalize,反倒可能使 error 上升。 >> 例如 learn 到 training set 的 noise 的時候。 ![image](https://hackmd.io/_uploads/BkZGWNUOC.png) > 前一小節的圖裡面我們只用了 $5$ 組 samples,對每種 order 產生對應的五個 models;這個圖則是將 model 的數量提升到 $100$ 個。 > > 我們可以看到當 complexity 為 order$=3$ 時具有最小的 error,再繼續增加 order 就會因為 variance 的增加而使 error 反倒上升。 - 不過在現實生活中,我們無法知道 true underlying function $f()$,所以我們也沒辦法像上圖一樣去計算 bias(因此也就不能計算 error。) 下圖是我們把 noise 的 variance 也考量進去以後,對 validation error 的 estimate。 :::warning 把 noise 的 variance 也考量進來就會使得: ++即便我們有一個「正確的」model 使得沒有 bias++(能 fit 每個點),且我們++有夠多的 data 使得 variance negligible++,++仍然可能存在非零的 validation error++。 ::: > Recall:因為 bias $= \frac{1}{N}\sum_{t=1}^N[\bar{g}(x^t) - f(x^t)]^2$,所以即使沒有 bias,也就是 $\bar{g}(x^t) - f(x^t)=0, \ \forall t$,這裡我們也沒有考慮到 noise。 ![image](https://hackmd.io/_uploads/Byrxo4UuR.png) > 延續前一節例子的設定,我們總共有 $100$ 個 data points,但當時我們是取五個 samples,每個 sample 各 $20$ 個 data points,並且針對每個 sample 產生一個 estimator;這裡我們是產生各含 $50$ 個 data points 的 training / validation set。 > > (a):$+$ 字記號是 training set 中的 $50$ 個點,我們畫出八個 functions,分別是 degree $1$ 到 $8$ 來 fit 這些點。 > > (b):實線對應到每個 degree 的 function 和(a)中 training set 的那些點之間的 error;虛線則是每個 degree 的 function 和剩下 validation set 中的點之間的 error。 > > - Note:(b)裡的 validation error 並不像前一張圖 $4.6$ 一樣 error 呈 $V$ 字形(order 大時 error 仍較平緩),因為這裡我們有更多的 training data,且我們前一節講過,training data 越多,就越可以限制 variance 的增加。 # regularization ## augmented error function 另一種常用來決定 model 的 optimal complexity 的方式叫做 <font color = "snake">regularization</font>。 在這種方式裡,我們會定義一個 <font color = "snake">augmented error function</font> ==$E'$==: :::info \begin{equation} E' = \text{error on data} + \lambda \times \text{model complexity} \end{equation} ::: $E'$ 除了像一般的 error function 一樣計算 error on data,另外又多出一部分 $\lambda \times \text{model complexity}$,用來++懲罰因為比較複雜,所以 variance 比較高的 models++。 > 目的在於避免 overfitting,減少選擇會去 fit taining data 中的 noise 的 complex models。 其中 $\lambda$ 代表 penalty 的 weight。如果 $\lambda$ 很大的話,只有很簡單的 models 才有可能具有小的 $E'$,因此當我們要選擇 $\min E'$ 時,過於複雜的 models 就不可能被選到,因此也會有 bias 比較高的風顯。 > 也就是說 $\lambda$ 用來控制 penalty 的強度,越大代表越鼓勵去取簡單的 models。 $\rightarrow$ 我們用 cross-validation 來 optimize $\lambda$ 的值。 另一種解讀上面 augmented error function 式子的方式,是++將 $E'$ 視為 error on new test data++。 ## optimism 前面的那項 error on data 視為 training error,後面的 $\lambda \times \text{model complexity}$ 視為 <font color = "snake">optimism</font>。解釋如下圖: ![image](https://hackmd.io/_uploads/HJg9uHUdC.png) 有一些方法,像是 Akaike's information criterion (AIC)、Bayesian information criterion (BIC) 就是在想辦法估計這個 optimism,讓我們可以在將它加上 training error 以後去估計 test error,而不用任何的 validation。 ### 特性 optimism 的大小: - <font color = "green">$\propto d$</font>,$d=$ input 的數量 > (詳細說明比較長,放在下方) - <font color = "green">$\propto \frac{1}{N}$</font>,$N=$ training set size > 因為當 training set 有越多的 data points,每個點對整個 model 的影響就越小。這樣的情形減少了 overfit 的可能性,因為我們的 model 變成要去想辦法 fit 更大(也意味著更 generalize)的 dataset,而不是去 fit 一個小小的 dataset 中的 noise。 > > $\rightarrow$ data 越多,就對 model 造成更多的限制,對parameters 的 estimate 也就越 stable(因為越不容易因為少數幾個點而改變),因此 variance 也較低。 - 隨著 <font color = "green">$\sigma^2$</font> 變大而變大(但關係不一定 linear),$\sigma^2=$ noise 的 variance > 如果 noise 的 variance 越大,代表 data points 離背後真正的 function 越分散。 > > 因此,如果一個 model complexity 越高,它越容易去 fit 這些 noise,在 noise variance 越大的情況下,我們的 model 就離真正的 function 越遠,雖然因為 complexity 高所以 training error 低,但當應用到新的 data 時,這個 model 的 performance 就會因為在 training set 中的 noise 不在新的 data 裡而變差。 ### linear model 課本在這裡提到: :::info 如果 model 並非 linear,那麼我們的 $d$ 就要用「有效的」parameter 數量來取代。 ::: Q:什麼意思?如果 parameter 有 $d$ 個,為什麼還能說這個 model 是 linear?(linear 不是應該只有一個斜率、一個截距,兩個 parameters 嗎?) A:在 machine learning 或 statistics 裡,我們說 <font color = "snake">linear model</font>,指的是 input features 和 output 之間的關係是 ++linear in the parameters++,而不一定是 linear in input features。 兩者之間差在哪,什麼意思? - <font color = "snake">linear in the parameters</font>:意思是 dependent variable (output) 可以用 coefficients (parameters) 的線性組合表示。 > 也就是每個 parameter 會乘上某個 input features 的 function,再把它們加總。 >> 看完下方的例子會比較清楚。 - <font color = "snake">linear in input features</font>:意思是 input features 和 output 之間的關係是一條直線(如果是在 higher dimension 就是 hyperplane),input features 沒有像 linear in parameters 一樣,經過 function 的 transoformation。 例子: 1. 兩種 linear 都滿足 \begin{equation} y = \beta_0 + \beta_1x \end{equation} > - linear in the parameters:parameters 為 $\beta_0, \beta_1$,所以 $y$ 是它們的線性組合。 > - linear in input features:input feature $x$ 沒有被 transformed,且 $x,y$ 之間的關係是 linear 的。 2. 滿足 linear in the parameters 但不滿足 linear in input features \begin{equation} y = \beta_0 + \beta_1x + \beta_2x^2 + \beta_3x^3 \end{equation} > - linear in the parameters:parameters 為 $\beta_0, \beta_1,\beta_2,\beta_3$,$y$ 是它們的線性組合。 > - linear in input features:input feature $x$ 有被 transformed(變成 $x^2,x^3$),且 $x,y$ 之間的關係不是一條直線,而是一條多項式曲線。 所以,linear model (滿足 linear in the parameters)用數學式表示,即為滿足: :::info \begin{equation} y = \beta_0 + \sum_{i=1}^d \beta_i f_i(x) \end{equation} ::: $\rightarrow$ 只要 model 為 linear in parameters $\beta_i$,那它就是一個 linear model,不管 $f_i(x)$ 是否為 linear。 說了這麼多,那什麼樣的 model 是 nonlinear 呢? 舉個例子,logistic regression 就非 linear,見下圖: ![image](https://hackmd.io/_uploads/ry5uCLUuA.png) > 在 logistic model 裡,我們用了 logistic (sigmoid) function $\sigma(z) = \frac{1}{1+e^{-z}}$,雖然在代入 $z$ 時 $b_0 + b_1x$ 為 linear combination,但 parameters $b_0,b_1$ 和 output $p$ 之間的關係並非 linear($p$ 不是 $b_0,b_1$ 的線性組合。) # 其餘決定 model 的方式 最後課本簡單介紹三種在 fit 和 complexity 的 trade-off 之間選擇 model 的方式,像上面講的 regularization 一樣,它們也會對 model 的 complexity 產生某種形式的 penalty,下面我們再分別好好說明。 ## SRM: Structural Risk Minimization <font color = "snake">Structural Risk Minimization (SRM)</font> 將 models 根據它們的 complexities 分成 nested subsets,再根據 order 選擇 simplest 且 empirical error 最小的 model。 詳細說明和例子如下圖: ![image](https://hackmd.io/_uploads/SJ6abFP_C.png) > 圖中提到常用的衡量 complexity 的方式為 VC dimension,相關說明可參考筆記「[2.2 Vapnik-Chervonenkis Dimension](https://hackmd.io/@pipibear/Sy1E6rEV0)」。 ## MDL: Minimum description length 先定義一個名詞 <font color = "snake">Kolmogorov complexity</font>: :::info 一個 dataset 的 Kolmogorov complexity 定義為 ++the shortest description of the data++。 ::: 什麼意思呢? 舉例來說: 如果我們的 data is simple,例如是一串零,那我們可以用 $0$ 和 sequence 的長度表示;但是如果我們的 data is completely random,那我們就沒辦法找到比 data 本身更短的 description 來描述它。 如果我們有一個 model 能夠 good fit data,那麼與其直接儲存 data,我們能 send / store model description。 從所有描述 data 的 models 裡面,我們挑出一個最 simple 的 model,有著最短的 description。 和之前的其他方式一樣,我們仍舊會面臨到 model simple 的程度和 model 能好好描述 data 的程度,兩者之間的 trade-off。 ## Bayesian Model Selection 最後一種就像我們前幾節在講的 Bayes' 相關的概念一樣,當我們對適合的 approximating functions 的 class 有一些 prior information 時,我們就可以用 <font color = "snake">Bayesian Model Selection</font>。 > 翻成中文有點拗口,課本原話為: > Bayesian Model Selection is used when we have some ++prior knowledge about the appropriate class of approximating functions++. 像我們之前定義 prior probability 一樣,我們這樣的 prior knowledge 也由一個 prior distribution over models ==$p(\text{model})$== 所定義。 如果給定 data,然後針對一個 model,我們也可以利用 Bayes' rule 去計算 posterior probability ==$p(\text{model}|\text{data})$==: \begin{equation} p(\text{model}|\text{data}) = \frac{p(\text{data}|\text{model})p(\text{model})}{p(\text{data})} \end{equation} 依據這個 posterior probability,我們可以在選擇 model 時直接選 posterior probability 最高的 model,或是用 posterior probability 當 weight,取所有 models 的平均。 接著,如果我們對這個式子取 $\log$ 會得到: ![image](https://hackmd.io/_uploads/SJCMQiPu0.png) 這樣的結果其實和前面提到的 augmented error function 有相同的意義: ![image](https://hackmd.io/_uploads/ry6FmsDuR.png) 為什麼這樣說呢?舉個例子比較清楚: ![image](https://hackmd.io/_uploads/HkRnmjPOC.png) 那麼在挑 model parameters $\vec{w}$ 時,我們就選能夠使 error 最小的那個,如果我們的 error function 定義如下: ![image](https://hackmd.io/_uploads/H1EGEjvuR.png) 那麼我們會發現,除了前面那項 sum of squared error 等同於 $E'$ 中的 error on data 之外,後面的各個 weight 平方和其實作用也等同去代表 complexity。 詳細解釋如下: ![image](https://hackmd.io/_uploads/HJeOEoPuA.png) > 在這個圖中有提到,如果我們要去 fit 一組 data,隨著 function 的 degree 增加,function 的係數通常也會變大。 > > 課本對這部分幾乎沒有任何說明,但我很好奇到底這個結論從哪來的,所以查了一些資料,寫一寫發現篇幅太大了,所以有興趣的話可參考這篇筆記:「[補充:large coefficients for high-order polynomials](https://hackmd.io/@pipibear/BkyBvBjOR)」。 >> 不過這篇筆記受限於我的能力,沒有寫得很詳細,也不算是有一個結論,所以就參考一下就好。 > [!Note]課本將這部分的詳細內容留到第十六章再說明。 --- 最後,這節提到的不管是 Bayesian approach, regularization, SRM, MDL,都是建立在 Occam's razor 的概念下,也就是越簡單的通常越好。 > 忘記之前在哪一小節有講過 Occam's razor,但這也沒有很重要,有興趣就看看 wiki 介紹就好。 並且,雖然只有 Bayesian approach explicitly 去定義一個 prior probablity,但是其他方式也都用不同的做法來去對 high complexity 的 models 施加額外的 penalty,這也可以被視為 implicitly 去選擇 使較為 simple 的 model 機率會較高的 prior。 唯一跟其他 methods 不同的只有 cross-validation。 $\rightarrow$ cross-validation 沒有對 model 的 parameters 做出任何 prior assumption。 因此: :::warning 如果我們有夠大的 validation dataset,那麼 cross-validation 就是最好的 approach;但是當 sample 比較小的時候,其他的方法就變得比較有用。 ::: 這一小節和這章就結束在這裡! --- # 參考資料 - [Structural Risk Minimization](https://www.svms.org/srm/)