--- disqus: ierosodin --- # Introduction > Organization contact [name= [ierosodin](ierosodin@gmail.com)] ###### tags: `machine learning` `學習筆記` ==[Back to Catalog](https://hackmd.io/@ierosodin/Machine_Learning)== ## Diffrence bettween algorithm and machine learning Algorithm 是 ==step by step== 的告訴 machine 要怎麼做才能達到目標結果,而 machine learning 並沒有告訴機器 detail,也就是 ==machine don't know waht data is or what data for==,我們只告訴機器要用甚麼方法來找到一個適合的 model to fit our data。 # Linear Regression Linear regression 被應用在像是 curve fitting 以及 classification 在多維空間中,我們將每一點視為一筆資料,因此可以利用一個高維的空間,來記錄一群數據。然而,我們希望找到一個關係,它能代表這個空間中的所有資料,以一個二維空間為例: :::info 我們有兩筆資料: $(1, 2) 與 (4, 7)$ 現在希望能從這些資料 (data) 中找到一個對應,使得給出一個體重,就能得出相對應的身高,我們可以利用一個簡單的二維數學式子來表達這件事: ${ax + b = y}$ 其中,$x$ 為input,$y$ 為output,或是我們稱為target,而 $a$ 與 $b$ 就是我們要找出的關係。 在這個例子中,我們可以得出以下式子: ${{\left[ \begin{array}{cc} 4 & 1 \\ 1 & 1 \\ \end{array} \right]}{\left[ \begin{array}{c} a \\ b \\ \end{array} \right]} = {\left[ \begin{array}{c} 7 \\ 2 \\ \end{array} \right]}}$ ::: 要解以上的問題,有許多數值分析的方法能找到答案,例如 Gauss Jordden elimation 、 LL 、 LU 分解等。 :::danger ## Gauss Jordden elimation ${{\left[ \begin{array}{cc|cc} 4 & 1 & 1 & 0 \\ 1 & 1 & 0 & 1 \\ \end{array} \right]} = {\left[ \begin{array}{cc|cc} 1 & 0 & \frac13 & \frac{-1}3 \\ 0 & 1 & \frac{-1}3 & \frac43 \\ \end{array} \right]} \Rightarrow {\left[ \begin{array}{c} a \\ b \\ \end{array} \right]} = {\left[ \begin{array}{cc} \frac13 & \frac{-1}3 \\ \frac{-1}3 & \frac43 \\ \\ \end{array} \right]} {\left[ \begin{array}{c} 7 \\ 2 \\ \end{array} \right]}}$ 缺點:時間複雜度為 ${O(n^3)}$ ::: :::danger ## LDL ${\begin{split} {\left[ \begin{array}{ccccc} a_{11} & a_{12} & a_{13} & ... & a_{1n} \\ a_{21} & a_{22} & a_{23} & ... & a_{2n} \\ a_{31} & a_{32} & a_{33} & ... & a_{3n} \\ ... & ... & ... & ... & ... \\ a_{n1} & a_{n2} & a_{n3} & ... & a_{nn} \\ \end{array} \right]} = & {\left[ \begin{array}{ccccc} 1 & 0 & 0 & ... & 0 \\ l_{21} & 1 & 0 & ... & 0 \\ l_{31} & l_{32} & 1 & ... & 0 \\ ... & ... & ... & ... & ... \\ l_{n1} & l_{n2} & l_{n3} & ... & 1 \\ \end{array} \right]} \times \\ & {\left[ \begin{array}{ccccc} d_1 & 0 & 0 & ... & 0 \\ 0 & d_2 & 0 & ... & 0 \\ 0 & 0 & d_3 & ... & 0 \\ ... & ... & ... & ... & ... \\ 0 & 0 & 0 & ... & d_n \\ \end{array} \right]} \times {\left[ \begin{array}{ccccc} 1 & l_{21} & l_{31} & ... & l_{n1} \\ 0 & 1 & l_{32} & ... & l_{n2} \\ 0 & 0 & 1 & ... & l_{n3} \\ ... & ... & ... & ... & ... \\ 0 & 0 & 0 & ... & 1 \\ \end{array} \right]} \end{split}}$ 其中, ${d_k = a_{kk} - \sum_{t=1}^{k-1} l_{kt}^2d_t}$ ${l_{jk} = \frac{1}{d_k}(a_{jk} - \sum_{t=1}^{k-1} l_{jt}l_{kt}d_t),\ j > k}$ ::: :::danger ## LU ${\begin{split} {\left[ \begin{array}{ccccc} a_{11} & a_{12} & a_{13} & ... & a_{1n} \\ a_{21} & a_{22} & a_{23} & ... & a_{2n} \\ a_{31} & a_{32} & a_{33} & ... & a_{3n} \\ ... & ... & ... & ... & ... \\ a_{n1} & a_{n2} & a_{n3} & ... & a_{nn} \\ \end{array} \right]} = &{\left[ \begin{array}{ccccc} 1 & 0 & 0 & ... & 0 \\ l_{21} & 1 & 0 & ... & 0 \\ l_{31} & l_{32} & 1 & ... & 0 \\ ... & ... & ... & ... & ... \\ l_{n1} & l_{n2} & l_{n3} & ... & 1 \\ \end{array} \right]} \times {\left[ \begin{array}{ccccc} u_{11} & u_{12} & u_{13} & ... & u_{1n} \\ 0 & u_{22} & u_{23} & ... & u_{2n} \\ 0 & 0 & u_{33} & ... & u_{3n} \\ ... & ... & ... & ... & ... \\ 0 & 0 & 0 & ... & u_{nn} \\ \end{array} \right]} \end{split}}$ 其中, ${u_{1j} = a_{1j},\ j = 1, 2, 3, ..., n}$ ${l_{j1} = \frac{a_{j1}}{u_{11}},\ j = 2, 3, ..., n}$ ${u_{kj} = a_{kj} - \sum_{t=1}^{k-1}l_{kt}u_{tj},\ j = k, k + 1, k + 2, ..., n, k = 2, 3, 4, ..., n}$ ${l_{jk} = \frac{1}{u_{kk}}(a_{jk} - \sum_{t=1}^{k-1}l_{jt}u_{tk}),\ j = k + 1, k + 2, k + 3, ..., n,\ k = 2, 3, 4, ..., n}$ ::: 然而真實世界中,==通常找不到一個完美的 model to fit our data==,因為我們得到的資料通常是不完美的,例如資訊亮得不夠多、判斷誤差、量測誤差等,要如何在有缺陷、數量不足的資料情況下,找出背後隱藏的==趨勢==,就是我們想知道的。 ![](https://i.imgur.com/pxMsu3I.png) 以上圖為例,我們有 9 筆資料,他可能是一個 sin 波函數所得到的量測資料,由於蒐集資料過程中各種誤差的結果,導致我們無法直接得到正確的函數。 但我們仍希望有一種方法,找到這些資料間的一個趨勢,即使這個趨勢無法完美套用在每筆資料上,但整體而言,趨勢是對的。 其中一種預測方式是利用==多項式 (polynomial basis funciton)== 來預測輸出與輸入之間的關係: :::danger ${y(x, w) = w_0 + w_1x + w_2x^2 + ... + w_Mx^M = \sum_{j=0}^Mw_jx^j}$ 其中, ${x = [x_1 x_2 ... x_N]^T}$ 為已知的輸入 ${y = [y_1 y_2 ... y_N]^T}$ 為經由函式所得到的結果 ${w}$ 則是我們想要找出的關係的參數 而我們會有一組 ${t = [t_1 t_2 ... t_N]^T}$ 代表我們希望的結果 (target),因此當 $y$ 與 $t$ 越相近,則此方程式越能代表這些輸出與輸入之間的關係 ::: 因為==對 ${w}$ 來說,此方程式是線性的==,所以又稱為 ==linear method==,至於 non-linear case,在往後的課程會提到。 # LSE 有了模型,我們還必須有一個方法,來決定這個 model 的好壞,也就是常說的評估 ==loss、cost、distance 或者有時會稱作 likelihood==,這裡介紹 least square error (LSE),也就是將目標結果與經由函式所得到的結果相減,再取平方和: :::danger ${E(\textbf w) = min_w\ \{y(x_n, \textbf w) - t_n\}^2}$ or ${E(\textbf w) = min\ \sum(f(x_i) - y_i)^2 = min\ ||A\vec{x} - \vec{b}||^2}$ 其中, $A$ 為 input data 的集合 $\vec{x}$ 為所求函式的參數 $\vec{b}$ 則是目標 (target) 的集合 ::: 因此當這個函式越接近真實的關係時,LSE 就會愈小,找最小極值即找出方程式==微分 $=0$== 的地方: :::danger ${min\ ||A\vec{x} - \vec{b}||^2 = (A\vec{x} - \vec{b})^T(A\vec{x} - \vec{b}) = {\left[ \begin{array}{c} (ax_0 - b - y_0)^2 \\ (ax_1 - b - y_1)^2 \\ ... \\ \end{array} \right]}}$ ::: :::danger ${\begin{split} min\ ||A\vec{x} - \vec{b}||^2 &= (A\vec{x} - \vec{b})^T(A\vec{x} - \vec{b}) \\ &= (\vec{x}^TA^T - \vec{b}^T)(A\vec{x} - \vec{b}) \\ &= \vec{x}^TA^TA\vec{x} - \vec{b}^TA\vec{x} - \vec{x}^TA^T\vec{b} + \vec{b}^T\vec{b}\end{split}}$ ${\because \vec{b}^TA\vec{x} 和 \vec{x}^TA^T\vec{b}}$ 皆為純量,因此轉置後的值相同 ${\vec{b}^TA\vec{x} = (\vec{b}^TA\vec{x})^T = \vec{x}^TA^T\vec{b}}$ ${\therefore min\ ||A\vec{x} - \vec{b}||^2 = \vec{x}^TA^TA\vec{x} - 2\vec{x}^TA^T\vec{b} + \vec{b}^T\vec{b}}$ 微分可得:${\frac{d(min\ ||A\vec{x} - \vec{b}||^2)}{d(\vec{x})} = \frac{d(\vec{x}^TA^TA\vec{x})}{d(\vec{x})} - 2\frac{d(\vec{x}^TA^T\vec{b})}{d(\vec{x})}}$ 首先解 ${\frac{d(\vec{x}^TA^TA\vec{x})}{d(\vec{x})}}$,令 ${A^TA = G}$,且 ${G}$ 為一對稱矩陣 ${\begin{split} 則 \frac{d(\vec{x}^TA^TA\vec{x})}{d(\vec{x})} &= {\left[ \begin{array}{c} \frac{\partial}{\partial x_1} \\ \frac{\partial}{\partial x_2} \\ \frac{\partial}{\partial x_3} \\ ... \\ \frac{\partial}{\partial x_n} \\ \end{array} \right]} {\left[ \begin{array}{ccccc} x_1 & x_2 & x_3 & ... & x_n \end{array} \right]} {\left[ \begin{array}{ccccc} g_{11} & g_{12} & g_{13} & ... & g_{1n} \\ g_{21} & g_{22} & g_{23} & ... & g_{2n} \\ g_{31} & g_{32} & g_{33} & ... & g_{3n} \\ ... & ... & ... & ... & ... \\ g_{n1} & g_{n2} & g_{n3} & ... & g_{nn} \\ \end{array} \right]} {\left[ \begin{array}{c} x_1 \\ x_2 \\ x_3 \\ ... \\ x_n \end{array} \right]} \\ &= {\left[ \begin{array}{c} \frac{\partial}{\partial x_1} \\ \frac{\partial}{\partial x_2} \\ \frac{\partial}{\partial x_3} \\ ... \\ \frac{\partial}{\partial x_n} \\ \end{array} \right]} {\left[ \begin{array}{c} x_1(g_{11}x_1 + g_{12}x_2 + g_{13}x_3 + ... + g_{1n}x_n) + \\ x_2(g_{21}x_1 + g_{22}x_2 + g_{23}x_3 + ... + g_{2n}x_n) + \\ x_3(g_{31}x_1 + g_{32}x_2 + g_{33}x_3 + ... + g_{3n}x_n) + \\ ... + \\ x_n(g_{n1}x_1 + g_{n2}x_2 + g_{n3}x_3 + ... + g_{nn}x_n) \\ \end{array} \right]} \\ &= {\left[ \begin{array}{c} (g_{11}x_1 + g_{12}x_2 + ... + g_{1n}x_n) + (g_{11}x_1 + g_{21}x_2 + ... + g_{n1}x_n) \\ (g_{21}x_1 + g_{22}x_2 + ... + g_{2n}x_n) + (g_{12}x_1 + g_{22}x_2 + ... + g_{n2}x_n) \\ (g_{31}x_1 + g_{32}x_2 + ... + g_{3n}x_n) + (g_{13}x_1 + g_{23}x_2 + ... + g_{n3}x_n) \\ ... \\ (g_{n1}x_1 + g_{n2}x_2 + ... + g_{nn}x_n) + (g_{1n}x_1 + g_{2n}x_2 + ... + g_{nn}x_n) \\ \end{array} \right]} \\ &= {\left[ \begin{array}{c} (g_{11}x_1 + g_{12}x_2 + ... + g_{1n}x_n) \\ (g_{21}x_1 + g_{22}x_2 + ... + g_{2n}x_n) \\ (g_{31}x_1 + g_{32}x_2 + ... + g_{3n}x_n) \\ ... \\ (g_{n1}x_1 + g_{n2}x_2 + ... + g_{nn}x_n) \\ \end{array} \right]} + {\left[ \begin{array}{c} (g_{11}x_1 + g_{21}x_2 + ... + g_{n1}x_n) \\ (g_{12}x_1 + g_{22}x_2 + ... + g_{n2}x_n) \\ (g_{13}x_1 + g_{23}x_2 + ... + g_{n3}x_n) \\ ... \\ (g_{1n}x_1 + g_{2n}x_2 + ... + g_{nn}x_n) \\ \end{array} \right]} \\ &= G\vec{x} + G^T\vec{x} = 2G\vec{x} (\because\ G\ is\ symmetric) \end{split} }$ ::: :::danger ${\begin{split} 接著是\frac{d(\vec{x}^TA^T\vec{b})}{d(\vec{x})} &= {\left[ \begin{array}{c} \frac{\partial}{\partial x_1} \\ \frac{\partial}{\partial x_2} \\ \frac{\partial}{\partial x_3} \\ ... \\ \frac{\partial}{\partial x_n} \\ \end{array} \right]} {\left[ \begin{array}{ccccc} x_1 & x_2 & x_3 & ... & x_n \end{array} \right]} {\left[ \begin{array}{ccccc} a_{11} & a_{12} & a_{13} & ... & a_{1n} \\ a_{21} & a_{22} & a_{23} & ... & a_{2n} \\ a_{31} & a_{32} & a_{33} & ... & a_{3n} \\ ... & ... & ... & ... & ... \\ a_{n1} & a_{n2} & a_{n3} & ... & a_{nn} \\ \end{array} \right]} {\left[ \begin{array}{c} b_1 \\ b_2 \\ b_3 \\ ... \\ b_n \end{array} \right]} \\ &= {\left[ \begin{array}{c} \frac{\partial}{\partial x_1} \\ \frac{\partial}{\partial x_2} \\ \frac{\partial}{\partial x_3} \\ ... \\ \frac{\partial}{\partial x_n} \\ \end{array} \right]} {\left[ \begin{array}{c} x_1(a_{11}b_1 + a_{12}b_2 + a_{13}b_3 + ... + a_{1n}b_n) + \\ x_2(a_{21}b_1 + a_{22}b_2 + a_{23}b_3 + ... + a_{2n}b_n) + \\ x_3(a_{31}b_1 + a_{32}b_2 + a_{33}b_3 + ... + a_{3n}b_n) + \\ ... + \\ x_n(a_{n1}b_1 + a_{n2}b_2 + a_{n3}b_3 + ... + a_{nn}b_n) \\ \end{array} \right]} \\ &= {\left[ \begin{array}{c} (a_{11}b_1 + a_{12}b_2 + ... + a_{1n}b_n) \\ (a_{21}b_1 + a_{22}b_2 + ... + a_{2n}b_n) \\ (a_{31}b_1 + a_{32}b_2 + ... + a_{3n}b_n) \\ ... \\ (a_{n1}b_1 + a_{n2}b_2 + ... + a_{nn}b_n) \\ \end{array} \right]} \\ &= A^T\vec{b} \end{split} }$ ${\therefore \frac{d(min\ ||A\vec{x} - \vec{b}||^2)}{d(\vec{x})} = 2A^TA\vec{x} - 2A^T\vec{b} = 0 \\ \Rightarrow \vec{x} = (A^TA)^{-1}A^T\vec{b}}$ ::: > Note: > 為甚麼找到的極值就會是最小值? >> 因為這裡的 loss 必有最小值,所以對於一個二次式,==必為開口向上的 function==,因此找極值必為最小值 另外,也可以以幾何的方式解釋: ![](https://i.imgur.com/RgDgCLu.png) 從上述的結果,我們可以發現,這其實是一個==投影問題==,${\vec{x} = (A^TA)^{-1}A^T\vec{b}}$ 相當於在 ${A}$ 的空間中,找到 ${\vec b}$ 的投影向量,我們假設投影出的向量為 ${\vec x}$,則 ${\vec{b} - A\vec{x}}$ 與 A 必為==正交關係== ${<\vec{b} - A\vec{x}, A> = A^T(\vec{b} - A\vec{x}) = 0 \\ \Rightarrow A^T\vec{b} = A^TA\vec{x} \\ \Rightarrow \vec{x} = (A^TA)^{-1}A^T\vec{b}}$ 但由於 ==${A^TA}$ 只保證半正定 (Semidefinite)==,只能保證 ${det(A^TA)} \geq 0$,故無法保證 ${A^TA}$ 可逆 > Note: > 因為在 data 中,可能有 (0, 0, 0, ..., 0) 的資料存在 :::info ### Semidefinite For any vector ${\mu}$, if ${M^T\mu M}$ always ${\geq 0}$, then ${X}$ is called semidefinite. ::: 所以我們必須要==決定 w 以及每一項的次方 (basic function 的形式)== :::info ### basic function 如果我們希望 input 是高次方的,可以令 ${\phi(x) = x^n}$,即可將一次的 input 轉換為 n 次的資料。 利用這種方式,即可將 ${x_0}$ fit to ${x_0^0,\ x_0^1,\ x_0^2,\ ...}$, using ${\phi_0(x) = x^0,\ \phi_1(x) = x^1,\ \phi_2(x) = x^2,\ ...}$ ::: 因為 LSE 是二次多項式,其微分為一次多項式,故 ==${E'(w) = 0}$ 有唯一解。== 以下我們以 sin 函數為例,在一個 sin 函數中取 9 筆資料作為我們的 training set,並以不同的次方模型進行訓練> ![](https://i.imgur.com/siz0DYp.png) 從上圖我們可以發現,次方的選擇會大大的影響預測的結果: 1. 當次方太小時,可能不足以表達一個較複雜的資料分布 2. 當次方太大,可能由於資料量的不足,而使我們誤判分布的趨勢;換個方式說,當次方太大時,可能將問題想得太複雜,雖然計算模型時,可以將所有點 (training set) 預估在趨勢線上,但對於其他未知的點 (testing point),反而會做出錯誤的預判,也就是所謂的 overfitting。 ![](https://i.imgur.com/S3KZCC9.png) 上圖為利用 root mean square (RMS) 來評估訓練的結果,可以發現當維度提高時,對於 training set 來說,RMS 越來越低,但是 testing set 反而做出嚴重錯誤的結果。也就是說,對於這九筆資料,我們一樣可以利用高維的 model 來找出適合的方程式,但僅是對於這九筆資料,而非對於其他沒有被取樣的資料,因此在做 testing 時,才會反而得到更差的結果。 從以下各維度 training 出來的 model 參數,我們也可以發現,==當發生 overfitting 時,其係數的絕對值都非常的大。== ![](https://i.imgur.com/5FlxyHf.png) 而造成 overfitting 的原因可能有以下幾點: 1. 訓練的資料量太小 2. 有雜訊 因此當我們將訓練的資料量提高,即可發現它與真實的 sin 函數更加相近。 ![](https://i.imgur.com/9PZbDx0.png) :::info ### Root Mean Square (RMS) 對於每一點 input data 的 $y$ 及 $t$,我們可以計算其 RMS 為: ${\sqrt{\frac{\sum_{i=0}^N\ \{y(x_i, \textbf w) - t_i\}^2}{N}}}$ ::: # rLSE 為了解決係數太大的問題,我們可以==將係數的大小加入 loss error 中==,在某種程度上的避免 overfitting,也就是在 error 中,增加一項來懲罰係數太大的項: :::danger ${E(\textbf w) = min\ \{y(x_n, \textbf w) - t_n\}^2 + \lambda\ || \textbf w ||^2}$ ::: 然而,${\lambda}$ 的選擇也相當重要,太小則相當而沒有,太大則會造成前項的 error 不明顯而被忽略,本末倒置。 ![](https://i.imgur.com/P6vzOOB.png) 同樣,我們將其微分: :::danger ${\frac{d(min\ \{A\vec{x} - \vec{b}\}^2 + \lambda\ || \vec{x} ||^2)}{dx} = \frac{d(min\ \{A\vec{x} - \vec{b}\}^2}{dx} + \frac{d(\lambda\ || \vec{x} ||^2)}{dx} = 2A^TA\vec{x} - 2A^T\vec{b} + 2\lambda \vec{x} \\ \Rightarrow \vec{x} = (A^TA + \lambda I)^{-1}A^T\vec{b}}$ 因為 ${\lambda > 0 \Rightarrow \lambda I}$ is positive definite 所以如果 ${A^TA}$ 為正定,則 ${A^TA + \lambda I}$ 必定為正定,若前者不為正定,${A^TA + \lambda I}$ 仍為正定,因此可以保證其可逆性。 ::: :::danger > Note: > ${\begin{split}\frac{d(\lambda\ || \vec{x} ||^2)}{dx} &= \frac{d(\lambda \vec x^T \vec x)}{d\vec x} \\ > &= \lambda{\left[ \begin{array}{c} \frac{\partial}{\partial x_1} \\ \frac{\partial}{\partial x_2} \\ \frac{\partial}{\partial x_3} \\ ... \\ \frac{\partial}{\partial x_n} \\ \end{array} \right]} {\left[ \begin{array}{ccccc} x_1 & x_2 & x_3 & ... & x_n \end{array} \right]} {\left[ \begin{array}{c} x_1 \\ x_2 \\ x_3 \\ ... \\ x_n \end{array} \right]}\\ > &= \lambda{\left[ \begin{array}{c} \frac{\partial}{\partial x_1} \\ \frac{\partial}{\partial x_2} \\ \frac{\partial}{\partial x_3} \\ ... \\ \frac{\partial}{\partial x_n} \\ \end{array} \right]} {\left[ \begin{array}{c} x_1^2\ +\ x_2^2\ +\ x_3^2\ +\ ...\ +\ x_n^2 \end{array} \right]} \\ > &= 2\lambda \vec{x}\end{split}}$ ::: 若以幾何來解釋: ![](https://i.imgur.com/YjDX5zW.png) 上圖中藍色的等高線為不同的 ${\textbf w}$ 所得到的 ${\{y(x_n, \textbf w) - t_n\}^2}$,而實心土色的圓則為${|| \textbf w ||^2}$,因此 ${\lambda}$ 會影響最後結果接近哪個圓,若 ${\lambda}$ 很大,則會造成嚴重偏離藍色圓心,使得最後的結果並不是我們所期望的;但若 ${\lambda}$ 太小,則會產生 ${\textbf w}$ 係數絕對值太大的問題,而得到 overfitting 的結果。 這種方法被稱為 ==ridge relular LSE==,或是 ==L2 regular LSE==。 > Note: > 藍色的同心圓在 ${(w_1,\ w_2,\ loss)}$ 的 dimension 中,即為 ${(w_1,\ w_2)}$ 對 ${loss}$ 的三維拋物線 > ![](https://i.imgur.com/qBhk2Ya.png) 類似的方法還有 ==Lasso regular LSE==,或稱為 ==L1 regular LSE==: :::danger ${E(\textbf w) = min\ \{y(x_n, \textbf w) - t_n\}^2 + \lambda\ || \textbf w ||}$ ::: 以此方式對係數做懲罰,則會得到類似下圖的結果: ![](https://i.imgur.com/EjXm8Lh.png) 會喜歡使用 L1 regular LSE 的原因為,其==最佳點通常會發生在頂點上==,意味著其他維度的參數值皆為零,能簡化後續的運算。 > Note: > 但是 ${\lambda ||\textbf w||}$ 不可微,必須要其他的數值方法來解