# 吳恩達_機器學習_第3週_2_Regularization ###### tags: `andrew` `machine learning` `coursera` [課程連結](https://www.coursera.org/learn/machine-learning/home/week/3) [TOC] ## Solving the Problem of Overfitting ### The Problem of Overfitting [課程連結](https://www.coursera.org/learn/machine-learning/lecture/ACpTQ/the-problem-of-overfitting) ![](https://i.imgur.com/V4N78xQ.png) #### Example: Linear regression(housing prices) ![](https://i.imgur.com/Q1EiCTi.png) 回到線性迴歸的範例,我們以房子的大小來預測房價 * 左圖: * 簡單線性來 * underfitting * high bias(高偏差) * 中圖: * 二次式,我們看到似乎較為完美 * just right * 右圖: * 更高項式(polynomial)(四次) * 此線會配合資料走動的扭來扭去 * overfitting * high variance(高方差) 過高的項式造成了函數過於龐大的問題,如果沒有足夠的資料去約束變量過多的模型即產生overfitting的問題,此時你的成本函數幾乎是接近或是等於0,也造成泛化(generalize)效果不好的問題。 註:generalize指一個模型應用到新樣本的能力 #### Example: Logistic regression ![](https://i.imgur.com/xicSfXr.png) 在邏輯斯迴歸上也是一樣的問題,透過更高的多項式,都是有可能造成決策邊界滿足去訓練資料集因而造成overfitting。 過多的特徵,甚至特徵數超過你的數據集量,也會造成overfitting。 #### Addressing overfitting ![](https://i.imgur.com/jVz5Hfy.png) 避免overfitting作法如下: * 減少特徵,將特徵再精選。(reduce number of features) * 透過模型選擇演算法來挑選特徵(如隨機森林..) * 在捨棄特徵的同時,你也捨棄了一些資料所給出的訊息。 * 正規化(Regularization) * 保留所有的特徵 * 減少$\theta_j$的值,讓每一個特徵都為預測值做一些貢獻 ### Cost Function [課程連結](https://www.coursera.org/learn/machine-learning/lecture/B1MnL/cost-function) ![](https://i.imgur.com/bukqjdz.png) #### Intuition ![](https://i.imgur.com/IkSSQoM.png) 稍早提到,透過更高的多項式會造成overfitting的問題(上圖右),但是,假如我們透過『懲罰(penalize)』使得$\theta_3 , \theta_4$變小,相對的也是降低了成本函數的均方誤差,如下式子(1000只是假設上的亂填): $min_\theta\ \dfrac{1}{2m}\sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2 + 1000\cdot\theta_3^2 + 1000\cdot\theta_4^2$ 我們發現到以上述式子計算成本函數非常的大,所以我們的目標是將$\theta_3,\theta_4$盡可能的接近於零,直到可以忽略它的影響,這樣雖然是使用多項式,但因為3次方與4次方被我們調整到接近於0,整個影響力變小了,就相對於是利用了2次式加上一點點點的影響來擬合數據,也因此,多項次的圈形將不再扭曲,變的像2次式一樣(上圖右紫線)。 #### Regularization ![](https://i.imgur.com/itoc56g.png) ![](https://i.imgur.com/eUcZuUZ.png) 這後面的概念,就是正規化(Regularization),透過較小的參數值來取得一個簡單的演算法,因此上一個案例中$\theta_3,\theta_4$是接近於0的值,對應於較為平滑的函數,就可以有效降低overfitting的問題。 實務上,我們可能有上百上千個特徵,也不知道那幾個特徵較為重要,所以,我們就在參數計算上直接加入了正規項如下 $min_\theta\ \dfrac{1}{2m}\ \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2 + \lambda\ \sum_{j=1}^n \theta_j^2$ * $\lambda\ \sum_{j=1}^n \theta_j^2$ * 正規化項目 * 從$\theta_1$開始的,不會懲罰$\theta_0$ * $\lambda$為正規化參數 * $\lambda$做的就是維持資料集與參數的平衡,從而保持hypothesis的相對簡單(因為參數會因為正規項而減小) #### Regularization ![](https://i.imgur.com/99AdD80.png) 當$\lambda$設置過大就意味著懲罰項的值很大,意思上就像是我們將$\theta_1....\theta_n$調整到接近0,只會剩下$\theta_0$是有效的,導致呈現一條水平線的結果,造成的就是underfitting。 ### Regularized Linear Regression [課程連結](https://www.coursera.org/learn/machine-learning/lecture/QrMXd/regularized-linear-regression) ![](https://i.imgur.com/3uWNCMc.png) #### Regularized Linear Regression ![](https://i.imgur.com/ptnPYDa.png) 上圖是上節最後加入正規化之後的成本函數,目標是尋找可以最小化成本函數的參數$\theta$。前面的部份是一般線性迴歸的目標函數,而後面是加入的正規項,$\lambda$則為正規項的參數。 #### Gradient Descent ![](https://i.imgur.com/x9Dge0o.png) $\begin{align*} & \text{Repeat}\ \lbrace \newline & \ \ \ \ \theta_0 := \theta_0 - \alpha\ \frac{1}{m}\ \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})x_0^{(i)} \newline & \ \ \ \ \theta_j := \theta_j - \alpha\ \left[ \left( \frac{1}{m}\ \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} \right) + \frac{\lambda}{m}\theta_j \right] &\ \ \ \ \ \ \ \ \ \ j \in \lbrace 1,2...n\rbrace\newline & \rbrace \end{align*}$ $\theta_0$不做正規化,另外分開計算,再將原始成本函數加入正規項,就是完整的成本函數,再利用梯度下降來優化: $\theta_j:=\theta_j(1-\alpha\frac{\lambda}{m})-\alpha\frac{1}{m}\sum^m_{i=1}(h_\theta(x^{(i)}-y^{(i)}))x_j^{(i)}$ 其中$\theta_j(1-\alpha\frac{\lambda}{m})$得到的結果就有點像是將$\theta$的原始值乘上0.99一般的效果,因為$1-\alpha\frac{\lambda}{m}$是一個小於1又很接近1的值,而後面的$\alpha\frac{1}{m}\sum^m_{i=1}(h_\theta(x^{(i)}-y^{(i)}))x_j^{(i)}$則與原始未加入正規項一樣沒有改變。 現在我們知道,正規化就是先將每一個被正規化的參數$\theta_j$先乘上一個比1小一點的值,也就是將參數縮壓了一點,再減掉原始梯度更新的數值。 #### Normal equation ![](https://i.imgur.com/uVSYVmL.png) 梯度下降只是我們擬合線性迴歸的兩種演算法中的其中一種,另一種稱為正規方程,作法如下: 1. 建立一個矩陣-$X$,每一個row都對應一個訓練樣本,維度為$m\times(n+1)$ 2. 建立一個向量-$y$,$m$維,為訓練集的標籤 3. 令$\theta=(X^TX)^{-1}X^Ty$ * 如果加入正規項的話就加入一個矩陣($n+1,n+1$),其對角元素除第一個元素為0之外其餘為1,剩餘元素也皆為0,再乘上參數$\lambda$。 以上面的正規方程來實作的話可以讓參數直接達到全域最小值。 #### Non-invertibility (optional/advanced) ![](https://i.imgur.com/I7Kg3c7.png) 這邊討論不可逆性的問題,做為上次可選課程的補充說明。 假設,資料集總數小於特徵數,即$m \leq n$,那$X^TX$會是不可逆的,或稱[奇異的](http://terms.naer.edu.tw/detail/2124786/),或另一種說法,這矩陣是退化的(degenerate)。這種時候如果你用Octive的函數-`pinv`來取得偽逆矩陣,會有值,但那可能不是一個很好的演算法。如果在Octave用函數-`inv`或其它語言的線性計算的話,基本上是計算不出來的,那會回傳矩陣為奇異,不可逆的。但**加入正規項**會讓這個不可逆的矩陣變為可逆。 ### Regularized Logistic Regression [課程連結](https://www.coursera.org/learn/machine-learning/lecture/4BHEy/regularized-logistic-regression) ![](https://i.imgur.com/tn1js7K.png) #### Regularized Logistic Regression ![](https://i.imgur.com/lKQAx5Z.png) 之前的課程中我們看到Logistic Regression在使用高階多項式來擬合資料的情況下會出現overfitting的情況,可以看到它的決策邊界會完美的擬合,但這不是一個好的hypothesis,即使你不是使用高階多項式,一但特徵過多,也是會造成overfitting的情況。 原始的cost function: $J(\theta)=-\dfrac{1}{m}\sum^m_{i=1}\left[y^{(i)}\log(h_\theta(x^{(i)}))+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))\right]$ 加入正規項: $J(\theta)=-\dfrac{1}{m}\sum^m_{i=1}\left[y^{(i)}\log(h_\theta(x^{(i)}))+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))\right]+\dfrac{\lambda}{2m}\sum^n_{j=1}\theta^2_j$ 一樣的,正規項的懲罰並不會針對$\theta_0$,這樣整個決策邊界看起來就會合理很多(紫線) #### Gradient descent ![](https://i.imgur.com/HVZwKx0.png) $\begin{align*} & \text{Repeat}\ \lbrace \newline & \ \ \ \ \theta_0 := \theta_0 - \alpha\ \frac{1}{m}\ \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})x_0^{(i)} \newline & \ \ \ \ \theta_j := \theta_j - \alpha\ \left[ \left( \frac{1}{m}\ \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} \right) + \frac{\lambda}{m}\theta_j \right] &\ \ \ \ \ \ \ \ \ \ j \in \lbrace 1,2...n\rbrace\newline & \rbrace \end{align*}$ 跟Linear Regression一樣,我們另外將$\theta_0$拉出來計算,其餘的參數就加入正規項,雖然整個項目看起來跟Linear Regression是一樣的,但注意到,兩者的$h_\theta$是不同的,Logistic Regression的$h_\theta$是$\dfrac{1}{1+e^{-\theta^Tx}}$ #### Advanced optimization ![](https://i.imgur.com/UMBE3CA.png) 這邊說明在Octave中使用高階最佳化演算法來優化Logistic Regression的方法,需注意到的是Octave的索引是從1開始,因此$\theta_0$在Octave是1。