# 5.8 Multivariate Regression 在 <font color = "snake">multivariate linear regression</font> 中,我們會假設 output ==$r$== 可以被寫成一個 ++linear function++,也就是我們的 ++input variables $x_1,...,x_d$ 的 weighted sum,再加上 noise++。 其實在統計學的術語裡面,這應該要叫作 <font color = "snake">multiple regression</font>,<font color = "snake">multivariate</font> 是用在當我們有 multiple outputs 的情形。 總之,如果我們把上面文字的描述透過數學表示,即為: ![image](https://hackmd.io/_uploads/SyMkbgD5R.png) 接下來,就像我們在筆記「[4.6 Regression](https://hackmd.io/@pipibear/HyGiwbGO0)」中講過的,為了要 fit 這些 polynomial functions $g(\vec{x}^t|w_0,...,w_d)$ to data sets,也就是說: 為了要找出一組最適合的 weight $w_0,...,w_d$,使得 $g()$ 最 fit data sets 中的點(當我們將 data sets 中的 $x^t$ 代入這組 weight 所定義出來的 $g()$,得到的 output 是 $r^t$ 的機率最高)我們要用 maximum likelihood 去找出能夠使 likelihood 最大的那組 $w_0,...,w_d$。 根據一點點推導我們會發現,在 ++assume noise 是 Gaussian++ 的情況下,如果我們用的 error function 是 sum-of-squares error function (++SSE++),去求 maximum likelihood 等同於去求 minimum error,如下: ![image](https://hackmd.io/_uploads/HyaI7ewc0.png) > - Recall:在 machine learning 的術語裡面,我們把 $-\log$ likelihood function 定義為 error function。 > > 關於 SSE 的介紹,以及這部分的詳細過程一樣參考筆記「[4.6 Regression](https://hackmd.io/@pipibear/HyGiwbGO0)」,下面的推導其實也都和那篇筆記中所做的事情一模一樣,只是我們現在是在將 univariate 推廣到 multivariate 而已。 - Note:assuming Gaussian noise 會使得 given input $x^t$ 的情況下,$r^t$ 的 conditional distribution 是 ++unimodal++ 的(也就是 pdf 畫出來只有一個只有一個 peak),但是這在一些應用裡面就不太適合,因此這種時候就要推廣到 conditional Gaussian distributions 的 mixtures,來允許 multimodal 的 conditional distributions。 > 這部分之後有機會再補充! 總之,現在為了要找出最適合的那組 weight $w_0,...,w_d$,我們的問題變成了要找出一組 $w_0,...,w_d$ 使得代入 error function $E()$ 以後會產生: \begin{equation} \min \frac{1}{2}\sum_{t=1}^N (r^t - w_o - \sum_{j=1}^d w_jx_j^t)^2 \end{equation} 講到求極值就會想到微積分,於是我們分別對 parameters $w_0,...,w_d$ 取 derivative。我們看 $w_0,w_1$ 就好,剩下的其實都一樣: ![image](https://hackmd.io/_uploads/B1k5slv5A.png) ![image](https://hackmd.io/_uploads/ry12jxPq0.png) ![image](https://hackmd.io/_uploads/r13zngDqR.png) 有了這些式子以後,如果我們定義以下的向量和矩陣: ![image](https://hackmd.io/_uploads/HkZu3xwq0.png) 就可以把原本 $5.37$ 這 $d+1$ 個式子寫成: \begin{equation} X^TX\vec{w} = X^T\vec{r} \end{equation} 因為 $X$ 是 Vandermonde 矩陣,所以 $X^TX$ 可逆,因此我們要求的 $\vec{w}$ 就是: \begin{equation} \vec{w} = (X^TX)^{-1}X^T\vec{r} \end{equation} > 上方所有這些內容,更詳細的說明都在 「[4.6 Regression](https://hackmd.io/@pipibear/HyGiwbGO0)」中: > 「estimating parameters」$\Rightarrow$ 「error function」$\Rightarrow$「求 min error」 > > 這裡就不再多解釋一樣的東西了。 不只是上面的作法和 $4.6$ 裡面相同,如果我們把這裡的 $x_1,x_2,...x_k$ 令為當時一個 input 的 polynomial regression 中的 $x,x^2,...,x^k$,也就是: \begin{equation} x_1 = x, \ x_2 = x^2,...,\ x_k = x^k \end{equation} 那麼這兩個問題其實就一模一樣了。 這樣的想法與提供了我們一個怎麼去做 multivariate polynomial regression 的提示,只是除非我們的 feature 數 $d$ 很小,不然在 mulutivariate regression 裡面,我們很少用 order 比 linear 還要大的 polynomials。 ## basis functions 可是假如我們真的有需要用到 inputs 的 higher-order terms 怎麼辦呢? $\rightarrow$ 舉例來說,假如我們需要用到 $x^3$、$\sin(x)$ 或是 $e^{x^2}$ Recall 我們原本的 model 長這樣: \begin{equation} g(\vec{x}|w_0,...,x_d) = w_0 + w_1x_1 + w_2x_2 + ... + w_dx_d \end{equation} 這樣子的 model 是 input variables $x_i$ 的 linear function,造成很大的限制(我們只能把每個 variable 乘上某個 weight),因此想法就是我們另外再用一些額外的 functions 叫做 <font color = "snake">basis functions</font> ==$\phi_j(\vec{x})$==,來定義 nonlinear functions of original inputs。 這樣一來,使得在我們新的 augmented space 裡,我們的 model 仍然是 linear 的;但在原本的 space 中,卻能對應到一個 nonlinear model。 這樣講好像太過抽象,但看看加入 basis functions 的 model 長怎樣就能理解了: :::success \begin{equation} g(\vec{x}|w_0,...,x_d) = w_0 + \sum_{j=1}^dw_j\phi_j(\vec{x}) \end{equation} ::: > 如果我們把 $\phi_1(\vec{x})$ 視為 $x_1$,⋯⋯,$\phi_d(\vec{x})$ 視為 $x_d$,這樣子就會是和我們原本的 model 長得一樣的 linear model,這也就是為什麼我們上面說在這個 augmented space 裡,model 仍然是 linear (in $\vec{w}$)的原因。 所以以前我們的 univariate polynomial regression 式子: \begin{equation} r = w_0 + w_1x + w_2x^2+ ... + w_dx^d \end{equation} 就是上面推廣後的公式,取 $\vec{x} = [\,x]\,$,並且令 basis functions 為 $\phi_j(x) = x^j$ 的情形,如下圖: ![image](https://hackmd.io/_uploads/H17MymDqA.png) 不過使用 polynomial basis functions 也有它的限制,其中一個限制是這些 functions 是 ++global++ 的,因此如果 input space 中的某個 region 改變,其他的 regions 也會被影響。 這個問題的解決方式是我們可以把 input spsace 切割成好幾個 regions,然後對每個 region 都用不同的 polynomial 去 fit,也就是之前有稍微提過的 <font color = "snake">spline functions</font>。 > 關於 spline functions 的一點點介紹,可參考筆記「[補充:large coefficients for high-order polynomials](https://hackmd.io/@pipibear/BkyBvBjOR)」的最後部分。 舉例來說,在下圖中我們將 input space 分成四個區段,$i1,i2,i3,i4$,每一段我們都用不同的 function 去 fit: ![image](https://hackmd.io/_uploads/SyZKmXD90.png) ### 合併 bias 在前面的式子裡,==$w_0$== 叫做 <font color ="snake">bias parameter</font>(不是誤差的那個 bias),用來作為一個 fixed offset。 如果我們再去額外定義一個 dummy basis function $\phi_0(\vec{x}) = 1$,這樣一來我們就能把 $w_0$ 寫成: \begin{equation} w_0 = w_0 \times 1 = w_0 \times \phi_0(\vec{x}) \end{equation} 也就能把這項 bias 也合併到我們的 $\sum$ 裡,變成: :::success \begin{equation} \begin{split} g(\vec{x}|w_0,...,x_d) &= \sum_{j=0}^dw_j\phi_j(\vec{x}) \\ &= \vec{w}^T\vec{\phi}(\vec{x}) \end{split} \end{equation} ::: 其中,第二個等號的地方是我們令: \begin{equation} \begin{split} \vec{w} &= [\,w_0,w_1,...,w_d]\,^T \\ \vec{\phi} &= [\,\phi_0,\phi_1,...,\phi_d]\,^T \end{split} \end{equation} ## advantages of linear models 不過看完上面的 basis functions 以後,我們發現 basis functions 的作用是為了要使我們的 model 在保持 linear (in parameters) 的情況下,仍然能夠對 input 去做出一些 nonlinear 的 transformations。 可是為什麼要讓 model 保持 linear 呢? linear model 的其中一種好處是,當我們直接去看 $w_1,...,w_d$ 時,就能直接獲得一些資訊。例如: - 看 $w_j$ 的正負號,就能知道 $x_j$ 對我們的 output 是有 positive / negative effect - 如果所有的 $x_j$ 都在同個範圍內,那麼看 $|w_j|$ 的大小,就能知道對應的 feature $j$ 會對 output 造成多大的影響,因此我們可以根據 features 的重要程度去做排序,甚至可以移除 weight 接近零的 features。 --- 最後,回應最一開始我們說 multivariate 應該要指的是當我們有 multiple outputs 的情形: 面對這樣的問題,我們只需要把它定義成上方所講的 single-output regression 的 set 即可。 第五章就結束在這裡,接下來就要進入第六章的 dimensionality reduction。 # 參考資料 - Christopher Bishop, Pattern Recognition and Machine Learning, p.138-141