機械学習-SVM(サポートベクトルマシン)

#SVM(サポートベクトルマシン)
教師あり学習。

2クラス分類問題(与えられた入力データが2つのカテゴリーのどちらに属するかを識別する。1か-1どちらかに分類する)を扱える。

最初は2クラス問題のために考案されたが、実は下記にも応用されている。
- 回帰問題
- 教師なし問題

##決定関数
忘れてしまうので、決定関数は下記ですよ。

```math
f(x) = w^Tx+b \\
f(x) = w^T\phi(x)+b \\
```

この関数の正負で判断する。
分類するときは$ sign (w^Tx+b)$ で判断するので、-1 or 1 で分類する。

##線形サポートベクトル分類(ハードマージン)
分類境界を挟んで2つのクラスがjはなれている距離をマージンと呼ぶ。
マージンを最大化するような分類境界を探す。
訓練データを完璧に分類できる決定関数f(x)が存在するという仮定を置いています。
これ、重要。

分類境界と、点の距離は下記で表せる。

```math
||w|| = \sqrt{w_1^2+w_2^2 + ... + w_n^2}\\
として、\\

\frac{|f(x_i)|}{||w||} = \frac{|w^Tx_i+b|}{||w||}\\
=\frac{y_i[w^Tx_i+b]}{||w||}\\
```
上記を最大化する。

※ ||w|| はL2ノルムです。

距離に関する式は下記となり。。。

```math
\underset{i}{min}[y_i[w^Tx_i+b]] = M(w,b)
```

【制約条件】
全ての i に対して$y_i[w^Tx_i+b] \geqq M(w, b) $

元に戻って、この距離を最大化することなので、やりたいことは下記式。

```math
\underset{w,b}{max}\frac{M(w,b)}{||w||}
```

wとbを規格化すると、

```math
\tilde{w} = \frac{w}{M(w,b)}\\
\tilde{b} = \frac{b}{M(w,b)}
```

距離の式をゴニョゴニョすると。。。

```math
\underset{w,b}{min}\frac{1}{2}{||w||}^2
```

【制約条件】
全ての i に対して $y_i[w^Tx_i+b] \geqq 1$

この式を最適化する。
分離可能性を仮定したSV分類のことを一般にハードマージン(hard margin)と呼ぶ。

分類境界に最も近いデータ$x_i$(マージン上のサンプル)をサポートベクトルと呼ぶ。


##線形サポートベクトル分類(ソフトマージン)
線形サポートベクトル分類(ハードマージン)は、訓練データを完璧に分類できる決定関数f(x)が存在するという仮定がある。これを現実に適用すると、そんなことはない。
SV分類を分離可能でないデータに適用できるように拡張したもの。

どうするかというと、制約条件を変える。

```math
y_i[w^Tx_i+b] \geqq 1 -\xi_i
```

マージン内に入るデータや誤分類されたデータに対する誤差を表す変数 $\xi$ を導入している。

$\xi$ をスラック変数と呼ぶ。

それで、最適化する式は下記となる。

```math
\underset{w,b,\xi}{min} [ \frac{1}{2}{||w||}^2 + C \sum_{i=1}^n \xi_i ]
```

【制約条件】
全ての i に対して$y_i[w^Tx_i+b] \geqq 1 -\xi_i$ で $\xi \geqq 0$

Cを正則化係数という。
Cが大きいほど誤分類が少なく良い分類境界を構成できる。
Cが無限大に近くなると、誤判定は許さないよ！(過学習気味。ハードマージンと変わらない)
Cが小さいと、多少の誤判別許すよ。まあ、いいじゃん的な。(汎化寄り。未学習)

Cが大きすぎるとデータが分離可能でない場合、あらゆる分離境界に対して目的関数が発散する可能性がある。
Cはちょうど良い値を決める必要がある。

最適化する式を、SV分類の主問題(primal problem)と呼ぶ。
でも、等価な相対問題(dual problem) を解くのが一般的。

下記のメリットがある。
- 双対問題の方が変数を少なくできる
- 分類境界の非線形化を考えうと、双対問題の形式(双対形式)の方が良い。

##双対問題

ラグランジュ関数を導入して、これを解く。

```math
L(w,b,\xi,\alpha,\mu) = \frac{1}{2}||w||^2 + C\sum_{i=1}^n\xi_i - \sum_{i=1}^n\alpha_i[y_i[w^Tx_i + b]-1+\xi_i]-\sum_{i=1}^n\mu_i\xi_i\\
\alpha = (\alpha_1,...,\alpha_n)^T\\
\mu = (\mu_1,...,\alpha_n)^T\\
```

やりたいことは、下記を最大化すること。

```math
\underset{w,b,\xi}{min}L(w,b,\xi,\alpha,\mu)
```

色々、ゴニョゴニョすると、要するに。。。

```math
\underset{\alpha,\mu}{max}L(w,b,\xi,\alpha,\mu) =
\underset{\alpha}{max}[-\frac{1}{2}\sum_{i=1}^n\sum_{j=1}^n\alpha_i\alpha_jy_iy_jx_i^Tx_j + \sum_{i=1}^n\alpha_i]
```

ただし、下記条件を満たす。

```math
\sum_{i=1}^n\sum_{j=1}^n\alpha_iy_i = 0\\
0 \leqq \alpha_i \leqq C
```

$\alpha$の制約は下記。

```math
C - \alpha_i - \mu_i = 0\\
C - \alpha_i = \mu_i \geq 0\\
C \geq \alpha_i \geq 0
```

$\alpha$ だけの最適化問題になってます。

##主問題と双対問題のまとめ
主問題は、主変数{w,b,$\xi$)に対する最適化問題。

双対問題は、双対変数{$\alpha, \mu$)に対する最適化問題。

最適化問題の最適解を右肩に*をつけると、それぞれの最適値は下記になる。

###主問題
```math
\underset{\alpha,\mu}{max}L(w^*,b^*,\xi^*,\alpha,\mu)
```
###双対問題
```math
\underset{w,b,\xi}{min}L(w,b,\xi,\alpha^*,\mu^*)
```

主問題と双対問題の間で下記不等式が成り立つ。

```math
\underset{w,b,\xi}{min}L(w,b,\xi,\alpha^*,\mu^*)
\leq
\underset{\alpha,\mu}{max}L(w^*,b^*,\xi^*,\alpha,\mu)
```

この関係性を 弱相対性と呼ぶ。
弱相対性は、あらゆる最適化問題で成立する。

そして、SV分類の場合には、これよりさらに強い強双対性(strong duality)が成り立つ。

```math
\underset{w,b,\xi}{min}L(w,b,\xi,\alpha^*,\mu^*)
=
\underset{\alpha,\mu}{max}L(w^*,b^*,\xi^*,\alpha,\mu)
```

※強双対性は、「鞍点定理」とも呼ばれる。

##カーネルトリック
特徴ベクトルを非線形変換して、その空間での線形分類を行う。
これによって、線形な決定関数では、うまく分離できないケースに対して解くことができる。

何をするかというと、入力データを高次元(特徴空間)に拡張する。
すると、線形分離が可能になる場合がある。

高次元に拡張 -> 2次元を3次元に変換する。

変換の際、カーネル関数を使うので、カーネルトリック(かな？)。

###カーネル関数
カーネル関数として使用する代表的な関数は下記がある。

- 正規化線形カーネル

```math
K(x, x')= \frac{x^Tx'}{||x|| ||x'||}\\
定義を下記とすると\\
k(x,x') = \phi(x)^T\phi(x')\\
特徴ベクトル \phi(x) は、\frac{x}{||x||} になる。
```

- 多項式カーネル

```math
K(x_i, x_j)=[x_i^Tx_j + c]^d
```

- ガウスカーネル (RBFカーネル)

```math
K(x_i, x_j)=exp(-\gamma || x_i-x_j||^2)
```

- シグモイドカーネル

```math
K(x_i, x_j)=\tanh(bx_i^Tx_j + c)
```

※c, d, $\gamma$ はハイパーパラメータ