# 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 的情形。
總之,如果我們把上面文字的描述透過數學表示,即為:

接下來,就像我們在筆記「[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,如下:

> - 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$ 就好,剩下的其實都一樣:



有了這些式子以後,如果我們定義以下的向量和矩陣:

就可以把原本 $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$ 的情形,如下圖:

不過使用 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:

### 合併 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