---
# System prepended metadata

title: 4.6 Regression
tags: [ML]

---

# 4.6 Regression


如果已經忘記 regression 在幹嘛，可以參考筆記「[2.6 Regression](https://hackmd.io/@pipibear/rJhgG8NNA)」。


---
# distribution of r given x

在 Regression 裡面，我們通常會稱：

- numeric output ==$r$== $\Rightarrow$ <font color = "snake">dependent variable</font>
- input ==$x$== $\Rightarrow$ <font color = "snake">independent variable</font>

並且我們假設 numeric output 是由下方式子所組成：

\begin{equation}
r = f(x) + \epsilon 
\end{equation}

其中：

- ==$f()$==：一個未知的 deterministic function
> deterministic function 代表 call 這個 function 時，只要 input 相同，就一定會 return 相同的 output。
- ==$\epsilon$==：random noise


因為 $f(x)$ 是一個未知的 function，所以我們就用一個 estimator $g(x|\theta)$ 來估計它。 $g(x|\theta)$ 由一個 set of parameters $\theta$ 所定義。

看個圖比較清楚：

![image](https://hackmd.io/_uploads/HJd6_PX_C.png)
> 在這個圖中，那條斜線其實指的就是我們的 estimator $g(x|\theta) = \theta_1 + \theta_2x$ 
>> $\theta = \{\theta_1, \theta_2\}$ 
>>
>>  $\rightarrow$ 根據不同的 $\theta_1,\theta_2$ 值，我們會得到不同的截距、不同的斜率，因此定義出不同的斜線，也就是不同的 $g(x|\theta)$，所以我們才說 $g(x|\theta)$ is defined by a set of parameters $\theta$。
> 
> 透過這條斜線我們預測，當 $X = x_i$ 時，我們的 output 應該要是斜線上對應的點，也就是 $Y = p_i$；但是實際上我們觀測到的 data point 是更上面的 $Y=y_i$，中間的這個差距就是我們的 random error $\epsilon_i$。
>> error 反映的其實就是那些沒辦法被我們的 model 所呈現的因素。
>> 例如在我們之前的例子裡，我們只考慮「年收入」作為衡量購買車款的因素，這個時候我們忽略的可能像是「購買者的家庭成員數」，就會造成我們的 model 和實際上有所落差。

## assume: random noise is normally distributed

接著，如果我們再假設 random noise 的分佈為：

\begin{equation}
\epsilon \sim N(0,\sigma^2)
\end{equation}
> 對應到上方圖中的例子，也就是如果我們把每個 $X=x_i$ 時，預測的 $Y$ 值 $p_i$ 和實際觀測到的值 $y_i$ 的差距都畫出來，所有的這些 $\epsilon_i$ 所形成的圖呈現 $N(0,\sigma^2)$ 的分佈。

如果我們將 estimator $g(x|\theta)$ 取代 $f(x)$，即：

\begin{equation}
r = g(x|\theta) + \epsilon
\end{equation}

那我們會得到：

:::success
\begin{equation}
p(r|x) \sim N(g(x|\theta),\sigma^2)
\end{equation}
:::

理由如下：

![image](https://hackmd.io/_uploads/H1OYwK7u0.png)
> 中間的 $f_{\epsilon}(r - g(x|\theta)) = f_r(r|x)$ 應該想一下就能轉過來，再詳細一點說：
> 
> 如果我們先看等號右邊，在 $x$ 確定的情況下，我們就能確定 $g(x|\theta)$，這個值代表的是以 $x$ 作為 input 時，我們++預測的 output++；那麼再看整個 $f_r(r|x)$，代表 input 為 $x$ 的情況下，output 為 $r$ 的機率。
> 
> $\rightarrow$ 既然預測 $g(x|\theta)$，output 又為 $r$，那麼也就代表 error 要為他們之間的差距 $r - g(x|\theta)$。那 error 為 $r - g(x|\theta)$ 的機率是多少，就是代進去 error 的 pdf 所產生的值了。
> - 至於 $r$ 為什麼仍是 normally distributed，看完下面的例子應該就會清楚了。

例子：

![image](https://hackmd.io/_uploads/ryI15tXdR.png)

# estimating parameters

## maximum likelihood estimation

從上面的例子裡，我們看到當一個 linear estimator 的 parameters $\theta = \{\theta_0 = 10, \theta_1 = 2\}$ 的情形，但是 $\theta_1,\theta_2$ 除了這樣的值以外當然也可能是各種其他的值，實際上到底要怎麼知道 $\theta$ 之中的 parameters 是多少，在這裡，課本用 maximum likelihood 去 learn 這些 parameters $\theta$。
> 關於 maximum likelihood estimation，如果忘記了，可以參考筆記：
> - [4.2 Maximum Likelihood Estimation](https://hackmd.io/@pipibear/rk9DvfgSC)
> - [補充：Maximum Likelihood Estimation](https://hackmd.io/@pipibear/SJtqpvSBR)

現在我們像以前一樣有 training set $X=\{x^t,r^t\}_{t=1}^N$，其中每一對 $(x^t,r^t)$ 都是從一個未知的 joint probability density $p(x,r)$ 中取的。

且我們可以把 $p(x,r)$ 寫成：

\begin{equation}
p(x,r) = p(r|x)p(x)
\end{equation}
> - $p(r|x)$ 為 given input $=x$，output $=r$ 的機率。
> - $p(x)$ 為 input density。
>> 關於這部分如果有疑惑，可以參考筆記「[補充：Bayesian Estimation](https://hackmd.io/@pipibear/Sy4XW138A)」。 

所以，在 given iid sample $X=\{x^t,r^t\}_{t=1}^N$ 的情況下，我們可以求 log likelihood：

![image](https://hackmd.io/_uploads/HJpco97u0.png)


## error function

### SSE (error sum of squares)


算出 log likelihood 以後，我們捨去和我們要估計的 $\theta$ 無關的值，接著我們想求能夠使得 likelihood 最大化的 $\theta$，但我們發現 log likelihood 是負的，所以求最大值等同求後面那串的最小值：

![image](https://hackmd.io/_uploads/BJ0ai57_A.png)

最後我們得到的要求最小值的：

:::success
\begin{equation}
E(\theta|X) = \frac{1}{2}\sum_{t=1}^N (r^t - g(x^t|\theta))^2
\end{equation}
:::
> 其中，各個符號代表的意義：
> * $\theta$：regression model 裡的 parameters
> * $X$：input data points 的集合
> * $r^t$：第 $t$ 個 data point 實際的值
> * $g(x^t|\theta)$：用 model with parameter $\theta$ 所產生的第 $t$ 個 data point 的 predicted value
> * $N$：data point 總數

這個 function 為 error function 的其中一種，也是最常用的一種，稱作 <font color = "snake">error sum of squares (SSE)</font>，而 minimize 這個 error function 的 $\theta$，稱作 <font color = "snake">least square estimates</font>。
> Note：
> 
> 其實 SSE 的原始定義並不包含前面的 scaled factor $\frac{1}{2}$，而是只有 $\sum_{t=1}^N (r^t - g(x^t|\theta))^2$，但是課本這裡留下 $\frac{1}{2}$ 並不會影響它作為一個 SSE，因為乘上一個常數並不會改變一個 function 的 minimum location，只會 scale function value。
> 
> 因此，我們可以對 SSE 乘上一個任意的 constant $C>0$，即：
> 
> $E(\theta|X) = C\sum_{t=1}^N (r^t - g(x^t|\theta))^2$


$\rightarrow$ 上述這樣的做法是我們在統計學中很常用的轉化方式，也就是當我們在發現 likelihood $l$ 中有指數時，與其直接求 $\max l$，我們定義 error function：

:::success
\begin{equation}
E = -\log l
\end{equation}
:::

### 求 min error
#### linear regression

如果是 linear regression，我們的 linear model 可以寫成：

\begin{equation}
g(x^t|w_1,w_0) = w_1x^t + w_0
\end{equation}

因為我們的目的還是要去找 $\min E$ 會發生在什麼樣的 parameters 值時，所以有了這個 linear model，我們再代回原本 error function 的式子裡，並且微分求最小值：

![image](https://hackmd.io/_uploads/BkCCniQ_C.png)

先對 $w_1$ 偏微並取微分 $=0$：

![image](https://hackmd.io/_uploads/HypsRsm_C.png)

再對 $w_0$ 偏微並取微分 $=0$：

![image](https://hackmd.io/_uploads/Syi6RoXu0.png)

解聯立：

![image](https://hackmd.io/_uploads/rk8MJnmuR.png)

寫成矩陣形式：

![image](https://hackmd.io/_uploads/r1Msy37O0.png)

#### polynomial regression

polynomial regression 其實就只是將前面的 linear regression 推廣到有很多（此處令為 $k+1$ 個）parameters 的狀況：

![image](https://hackmd.io/_uploads/HkABe2m_R.png)

Similarly,

![image](https://hackmd.io/_uploads/H1H5x2md0.png)

等同於寫成：

![image](https://hackmd.io/_uploads/HJN4mpmuR.png)

代回原本的式子 $A\vec{w} = \vec{y}$，再利用一些線性代數的特性，會發現我們可以求出 unique least squares solution $\vec{w}$：
> 也就是說我們找的到一組 parameters 使得我們的 model 和實際的 data set 之間的誤差最小。

![image](https://hackmd.io/_uploads/H12H7aQdA.png)
> 關於 Vandermonde 矩陣簡單的說明在筆記「[重點複習（數學）](https://hackmd.io/@pipibear/ryVZtAjDa)」中，「線代」的其中一小節「Vandermonde」。
>> 不過這個筆記很亂，就斟酌參考。
>> 
> 另外，其實上面所有的內容都和線性代數中在求 least squares solution 是一樣的，有興趣從線代角度來看的話，可參考筆記「[minimal solution / least squares solution](https://hackmd.io/@pipibear/Bk2TrjjPa)」中，「least squares solution」小節的內容。

### RSE (relative square error)

在上面的討論裡，assuming error 是 Gaussian distributed，我們發現要最大化 likelihood 就等同於最小化 errors 平方的和，因此我們用了 error function SSE，但是除了 SSE 之外，也有其他 error funtion，這裡我們要來介紹的是 <font color = "snake">relative square error (RSE)</font>，它的公式為：

:::success
\begin{equation}
E_{RSE} = \frac{\sum_{t=1}^N (r^t - g(x^t|\theta))^2}{\sum_{t=1}^N (r^t - \bar{r})^2}
\end{equation}
:::
> 也就是將 SSE 多除上一個 $\sum_{t=1}^N (r^t - \bar{r})^2$。

將這個公式這樣定會代表什麼意義呢？

其實它代表著：

:::warning
我們用一個簡單的 baseline model：
\begin{equation}
\bar{r} = \frac{1}{N}\sum_{t=1}^N r^t
\end{equation}
作為基準，並且將它的 error 定義成 $\sum_{t=1}^N (r^t - \bar{r})^2$，來和我們的 model 做比較。
:::

如果：

- ==$RSE<1$==：代表我們的 model 的 prediction 較好。
> 理由是因為當 $RSE<1$ 時，代表分子小於分母，因此也就代表我們的 model 所產生的 error，比單純取平均來做預測產生的 error 來得小。
- ==$RSE=1$==：代表我們的 model 的 prediction 平均來說，精准度和單純取平均來預測差不多。
- ==$RSE>1$==：代表我們的 model 的 prediction 較差。
> 理由同 $RSE<1$ 的說明，也就是當 $RSE>1$ 時，分子比分母來的大，代表我們的 model 所產生的 error，比單純取平均來做預測產生的 error 來得大。

整個概念其實也等同於我們除了有一個自己定義出來的 regression model 要去 fit 我們的 data points，我們也取這些 data points 的平均值，然後畫出一條值為這個平均值的水平線來 fit 這些 points。

基本上這兩個 function 畫出來都不會剛好 fit 每個點，所以我們各自加總整個 data set 裡所有點和這兩種 prediction 所產生的 error，然後再用比值來確認哪種方式比較好。

#### coefficient of determination

最後，我們定義一個東西叫做 <font color = "snake">coefficient of determination</font>，用來檢查 regression fit 的優劣程度，定義為：

:::info
\begin{equation}
R^2 = 1 - E_{RSE}
\end{equation}
:::

$\rightarrow$ 如果要被認為是有用的 regression，++$R^2$ 的值要接近 $1$++。

最後的最後，記得如果我們要得到最好的 generalization，我們應該要調整我們 model 的 complexity，使得它的 complexity best fit data 背後隱含的 function 的 complexity。
> 可參考筆記「[2.6 Regression](https://hackmd.io/@pipibear/rJhgG8NNA)」中最後的例子。