---
# System prepended metadata

title: ' Support Vector Regression'
tags: [機器學習技法]

---

# Kernel Ridge Regression

既然 LogReg 可以 Kernelize，那我們也來把原本的 [Ridge Regression 問題](https://hackmd.io/@ShawnNTU-CS/B1Be6DN3n)給 Kernelize：

$$
\min_{\mathbf{w}} \frac{\lambda}{N}\mathbf{w}^{T}\mathbf{w}+\frac{1}{N}\sum_{n=1}^{N}(y_{n}-\mathbf{w}^{T}\mathbf{z}_{n})^{2}
$$

再搭配上一章提過的 Representer Theorem，可改成解 $\boldsymbol{\beta}$ 的 Linear model；並且由於這是 [Ridge Regression 問題](https://hackmd.io/@ShawnNTU-CS/B1Be6DN3n)，所以可以使用一些線性代數和微積分的操作，找到公式解：

$$
\boldsymbol{\beta}=\left(\lambda\mathbf{I}+\mathbf{K}\right)^{-1}\mathbf{y}
$$

根據 Mercer's Condition，可以知道 $\lambda\mathbf{I}+\mathbf{K}$ 這個部分只要 $\lambda > 0$ 必定存在反矩陣。

因此我們在原版的 Linear Ridge Regression 上成功的使用了 Kernel Trick，可以容易解出 non-Linear Ridge Regression。

:::info
要注意 $I$ 是對角線都是 1 的矩陣，也就是 np.eye。不是 np.ones。
:::

## Tradeoff

線性的最佳解：

$$
\mathbf{w}=\left(\mathbf{Z}^{T}\mathbf{Z}+\lambda\mathbf{I}\right)^{-1}\mathbf{Z}^{T}\mathbf{y}
$$

非線性最佳解：

$$
\boldsymbol{\beta}=\left(\lambda\mathbf{I}+\mathbf{K}\right)^{-1}\mathbf{y}
$$

可以看出：

- 線性：
    - 比較有限制
    - 訓練需要 $O(d^{3}+d^{2}N)$
        - 反矩陣運算會多一個次方
    - 預測需要 $O(d)$
    - 當 $N \gg d$ 時比較有效率
- 非線性
    - 因為有了 $\mathbf{K}$ 所以比較有彈性
    - 訓練需要 $O(N^{3})$
    - 預測需要 $O(N)$
    - 一旦當 $N$ 很大 效率就不太好

所以線性跟非線性就是效率跟彈性的取捨。

## Least-Squares SVM (LLSVM)

跟之前提到過的一樣， Regression 也可以拿來做分類；而拿來做分類的 KRR 又叫做 Least-Squares SVM。


$$
g(\mathbf{x})=sign\left(\sum_{n=1}^{N}\beta_{n}K(\mathbf{x}_{n},\mathbf{x})\right)
$$

:::info
要注意如果沒有用 kernel trick 需要自己補 $x_{0}$。
:::

## dense $\boldsymbol{\beta}$

但是 KLR 跟 KRR 有個共同的缺點，$\boldsymbol{\beta}$ 通常是緻密矩陣，也就是說 SV 的數量很多，人人都是 SV (?，一旦 N 很大運算就會很慢。

而 SVM 的 $\boldsymbol{\alpha}$ 反而是大多是 0 的 sparse matrix 稀疏矩陣。

所以對於 KRR 我們也希望可以有稀疏的 $\boldsymbol{\beta}$ 矩陣，於是我們想了新的 Regression err。

# Tube Regression

## $\epsilon$-insensitive error

「管子」內的不算錯，管子外的才開始算錯：

$$
err(y,s)=max(0,|s-y|-\epsilon)
$$

由於 err 是線性的，所以相比原本 Regression 的 二次 err，當 s 跟 y 偏差越大，也就是發生 outlier 的時候，更不容易被影響。

## L2-Regularized Tube Regression

$$
\min_{\mathbf{w}} \frac{\lambda}{N}\mathbf{w}^{T}\mathbf{w}+\frac{1}{N}\sum_{n=1}^{N}max(0,|\mathbf{w}^{T}\mathbf{z}_{n}-y_{n}|-\epsilon)
$$

要解這個會面臨兩個問題：

- 雖然沒有限制，但 max 存在不可微分的點
- 就算 kernelize 用下去，也看不出可以產生稀疏矩陣的地方

此時回想原本 SVM：

- 雖然可以表示成 max 形式，但是其對應著一個 QP 的形式，所以可以用 QP 來解
- 因為可以轉成 dual，在 KKT 條件下會產生稀疏矩陣的解

所以我們來模仿 SVM ，但是在那之前先轉換一下表示法：

$$
\min_{\mathbf{w},b} \frac{\lambda}{N}\mathbf{w}^{T}\mathbf{w}+\frac{1}{N}\sum_{n=1}^{N}max(0,|\mathbf{w}^{T}\mathbf{z}_{n}+b-y_{n}|-\epsilon)
$$

通常在 SVM 中習慣將 b 單獨列出來。

# Standard Support Vector Regression Primal

回想當初 SVM 為甚麼可以轉換成如下形式：

$$
\frac{1}{2}\mathbf{w}^{T}\mathbf{w}+C\sum_{n=1}^{N}max\left(1 - y_{n}(\mathbf{w}^{T}\mathbf{x}+b),0\right)
$$

- 如果 $1 - y_{n}(\mathbf{w}^{T}\mathbf{x}+b)\le0$，代表沒有犯任何錯
    - 所以會導致取 max 後為 0
- 如果 $1 - y_{n}(\mathbf{w}^{T}\mathbf{x}+b)>0$，代表犯了錯
    - 所以會導致取 max 後產生了錯誤量 $\xi_{n}$

所以對於沒有犯錯的點，$1 - y_{n}(\mathbf{w}^{T}\mathbf{x}+b)\le0$，那如果是有犯錯的點，**「如果我想要維持 $\le$ 的關係」**，我就必須在右側加上犯錯量，也就是 $1 - y_{n}(\mathbf{w}^{T}\mathbf{x}+b)\le \xi_{n}$，這樣就成功地維持了 $\le$ 的關係，也就代表我們成功的把 max 換成了 QP 問題中的線性條件：

$$
1 - y_{n}(\mathbf{w}^{T}\mathbf{x}+b)\le \xi_{n}\\
\xi_{n} \ge 0
$$

原本問題就可以轉成：

$$
\min_{b,\mathbf{w},\boldsymbol{\xi}} \frac{1}{2}\mathbf{w}^{T}\mathbf{w} + C\sum_{n=1}^{N}\xi_{n}
$$

所以依樣畫葫蘆：

$$
\min_{\mathbf{w},b} \frac{\lambda}{N}\mathbf{w}^{T}\mathbf{w}+\frac{1}{N}\sum_{n=1}^{N}max(0,|\mathbf{w}^{T}\mathbf{z}_{n}+b-y_{n}|-\epsilon)
$$

- 如果 $|\mathbf{w}^{T}\mathbf{z}_{n}+b-y_{n}|-\epsilon\le0$，代表落在管子內，沒有犯任何錯
    - 所以會導致取 max 後為 0
- 如果 $|\mathbf{w}^{T}\mathbf{z}_{n}+b-y_{n}|-\epsilon>0$，代表落在管子外，犯了錯
    - 所以會導致取 max 後產生了錯誤量 $\xi_{n}$

所以如果要維持 $\le$ 關係，就是一樣加上錯誤量：

$$
|\mathbf{w}^{T}\mathbf{z}_{n}+b-y_{n}|-\epsilon\le\xi_{n}\\
\xi_{n}\ge0
$$

原本問題就可以轉成...，可以嗎？還不行，因為條件中有絕對值，所以要拆開：

$$
|\mathbf{w}^{T}\mathbf{z}_{n}+b-y_{n}|\le\epsilon+\xi_{n}\\
\Rightarrow -(\epsilon+\xi_{n})\le y_{n} - \mathbf{w}^{T}\mathbf{z}_{n} - b \le \epsilon+\xi_{n}
$$

但是既然變成了兩邊，我們可以知道一個點到時候只會需要看其中一邊就好，另一邊錯誤量是 0，所以兩個錯誤量要分開：

$$
-\epsilon-\xi_{n}^{\vee}\le y_{n} - \mathbf{w}^{T}\mathbf{z}_{n} - b \le \epsilon+\xi_{n}^{\wedge}\\
\xi_{n}^{\vee}\ge0\\
\xi_{n}^{\wedge}\ge0
$$

有了線性條件後才可以把原問題轉成 QP 問題：

$$
\min_{b,\mathbf{w},\boldsymbol{\xi^{\vee}},\boldsymbol{\xi^{\wedge}}} \frac{1}{2}\mathbf{w}^{T}\mathbf{w} + C\sum_{n=1}^{N}\xi_{n}^{\vee}+\xi_{n}^{\wedge}
$$

所以我們成功的找到了 Support Vector Regression (Linear SVR) 的 Primal Problem。

- 有 $\tilde{d}+1$ 加上 $2N$ 個變數
- 有 $2N$ 加上 $2N$ 個條件

:::warning
將 max 轉換成線性限制的流程應該是重要的技巧，要記起來，也就是「保持 $\le$ 的話要...」的部分
:::

# SVR Dual

使用我們早已熟稔的傳統藝能，轉換成 dual 問題：

$$
\min_{\boldsymbol{\alpha^{\vee}},\boldsymbol{\alpha^{\wedge}}}\frac{1}{2}\sum_{n=1}^{N}\sum_{m=1}^{M}(\alpha^{\wedge}_{n}-\alpha^{\vee}_{n})(\alpha^{\wedge}_{m}-\alpha^{\vee}_{m})K_{n,m}+\sum_{n=1}^{N}\left((\epsilon-y_{n})\alpha^{\wedge}_{n}+(\epsilon+y_{n})\alpha^{\vee}_{n}\right)
$$

$$
\sum_{n=1}^{N}\alpha^{\wedge}_{n}-\alpha^{\vee}_{n} = 0\\
0\le\alpha^{\wedge}_{n}\le C \\
0\le\alpha^{\vee}_{n}\le C \\
$$

- 有 $2N$ 個變數
- 有 $2N+1$ 個條件

所以一樣可以使用寫好的工具包解 QP 問題。其中：

$$
\mathbf{w}=\sum_{n=1}^{N}(\alpha^{\wedge}_{n}-\alpha^{\vee}_{n})\mathbf{z}_{n}
$$

恰好符合之前提到的線性組合的形式。

## Sparsity

之前是從 primal feasibilty 推導出誰是 SV  誰不是，所以：

$$
-\epsilon-\xi_{n}^{\vee}\le y_{n} - \mathbf{w}^{T}\mathbf{z}_{n} - b \le \epsilon+\xi_{n}^{\wedge}\\
\Downarrow \\
-\epsilon-\xi_{n}^{\vee} - (y_{n} - \mathbf{w}^{T}\mathbf{z}_{n} - b )\le 0\\
y_{n} - \mathbf{w}^{T}\mathbf{z}_{n} - b - (\epsilon+\xi_{n}^{\wedge})\le 0\\
\Downarrow\\
\alpha_{n}^{\vee}(-\epsilon-\xi_{n}^{\vee} - (y_{n} - \mathbf{w}^{T}\mathbf{z}_{n} - b ))=0\\
\alpha_{n}^{\wedge}(y_{n} - \mathbf{w}^{T}\mathbf{z}_{n} - b - (\epsilon+\xi_{n}^{\wedge}))=0\\
\Downarrow\\
\alpha_{n}^{\vee}(\epsilon+\xi_{n}^{\vee} + y_{n} - \mathbf{w}^{T}\mathbf{z}_{n} - b )=0\\
\alpha_{n}^{\wedge}(\epsilon+\xi_{n}^{\wedge} - y_{n} + \mathbf{w}^{T}\mathbf{z}_{n} + b)=0\\
$$

所以對於任何落在管子內的點，$|\mathbf{w}^{T}\mathbf{z}_{n} + b - y_{n}|<\epsilon$，可以知道並沒有犯任何錯，也就是說 $\xi_{n}^{\wedge}=\xi_{n}^{\vee}=0$；這樣的話，根據 complementary
 slackness 就可以知道 $\alpha_{n}^{\vee}=\alpha_{n}^{\wedge}=0$，也就說：
 
$$
\mathbf{w}=\sum_{n=1}^{N}\underbrace{(\alpha^{\wedge}_{n}-\alpha^{\vee}_{n})}_{\beta_{n}}\mathbf{z}_{n}=\sum_{n=1}^{N}0\mathbf{z}_{n}\\
\beta_{n}=0
$$

我們成功透過 dual problem 的 KKT 條件，得到了想要的稀疏矩陣。

---

# Map of Linear and Kernel Models

Linear 的實務上：

- PLA/pocket 在處裡非線性可分的表現上， linear soft-margin SVM (primal by QP) 比較好。
- linear SVR(Regularized Tube) by QP 的 err 是線性的，如果希望是二次的 err，要用 Linear Ridge Regression。

所以 Linear 的 soft-margin SVM、ridge Regression 跟 regularized logistic regession 比較常用。

:::info
這三個在 LIBLINEAR 工具包中都有。
:::

而加上 Kernel 的話，KRR 跟 KLR 會因為緻密矩陣的問題而不常用，常用的是 SVM、SVR 跟 Probabilistic SVM。

:::info
這三個 LIBSVM 工具包有。
可以看到非線性的是比較常用的工具，名字就是代表性的縮寫；所以通常來說講 SVM 是指採用了 kernel 的 SVM 而非線性的 SVM
:::
