サポートベクターマシン

**サポートベクターマシン**（, **SVM**）は、教師あり学習を用いるパターン認識モデルの1つである。分類や回帰へ適用できる。1963年にウラジーミル・ヴァプニクとAlexey Ya. Chervonenkisが線形サポートベクターマシンを発表し、1992年にBernhard E. Boser、Isabelle M. Guyon、ヴァプニクが非線形へと拡張した。

サポートベクターマシンは、現在知られている手法の中でも認識性能が優れた学習モデルの1つである。サポートベクターマシンが優れた認識性能を発揮することができる理由は、未学習データに対して高い識別性能を得るための工夫があるためである。

## 基本的な考え方
サポートベクターマシンは、線形入力素子を利用して2クラスのパターン識別器を構成する手法である。訓練サンプルから、各データ点との距離が最大となるマージン最大化超平面を求めるという基準（超平面分離定理）で線形入力素子のパラメータを学習する。

最も簡単な場合である、与えられたデータを線形に分離することが可能な（例えば、3次元のデータを2次元平面で完全に区切ることができる）場合を考えよう。

このとき、SVMは与えられた学習用サンプルを、もっとも大胆に区切る境目を学習する。学習の結果得られた超平面は、境界に最も近いサンプルとの距離（マージン）が最大となるパーセプトロン（マージン識別器）で定義される。すなわち、そのようなパーセプトロンの重みベクトル \boldsymbol{w}\in\mathbb{R}^p を用いて、超平面は \{\boldsymbol{x}\in\mathbb{R}^p\mid\boldsymbol{x}\cdot\boldsymbol{w}=0\} で表される。

学習過程はラグランジュの未定乗数法とKKT条件を用いることにより、最適化問題の一種である凸二次計画問題で定式化される。ただし、学習時のサンプルサイズが大きくなると急速に計算量が増大するため、分割統治法の考え方を用いた手法なども提案されている。

## 概念的特長
次のような学習データ集合\mathcal{D}が与えられた場合を考える。
:\mathcal{D} = \{ (\boldsymbol{x}_i, y_i) \mid \boldsymbol{x}_{i}\in\mathbb{R}^p,\, y_{i}\in\{-1,1\} \}_{i=1}^n
y_iは1もしくは−1の値を持つ変数で\boldsymbol{x}_iが属したクラスを意味する。\boldsymbol{x}_iはp次元の特徴ベクトルである。

ニューラルネットワークを含む多くの学習アルゴリズムは、このような学習データが与えられた時y_i=1であるいくつかの点とy_i=-1であるいくつかの点とを分離する超平面をさがすのが共通の目標である。SVMが他のアルゴリズムと差別化される特徴は、ただいくつかの点を分離する超平面を捜すことで終わるのではなく、いくつかの点を分離することができる幾多の候補平面の中でマージンが最大になる超平面 (maximum-margin hyperplane) を探す点にある。ここでマージンとは、超平面から各いくつかの点に至る距離の最小値を言い、このマージンを最大にしながらいくつかの点を2つのクラスで分類しようとすると、結局クラス1に属するいくつかの点との距離の中の最小値とクラス−1に属するいくつかの点との距離の中の最小値とが等しくなるように超平面が位置しなければならず、このような超平面をマージン最大の超平面という。結論として、SVMは2つのクラスに属しているいくつかの点を分類する幾多の超平面の中で、最大限に2つのクラスのいくつかの点と距離を維持するものを探すアルゴリズムといえる。

## 線形 SVM

以下のような形式の n 個のトレーニング・データセットが与えられる。

: (\boldsymbol{x}_1, y_1), \ldots, (\boldsymbol{x}_n, y_n),

y_iは1または−1であり、それぞれ、点\boldsymbol{x}_i が属するクラスを示す。\boldsymbol{x}_iはp-次元の実数ベクトルである。y_i = 1となる点\boldsymbol{x}_i のグループとy_i = -1となる点\boldsymbol{x}_i のグループとを分ける「最大マージン超平面」を求めたい。この超平面は、超平面と各グループのもっとも近い点\boldsymbol{x}_iとの距離が最大になるように定義される。

超平面は下記を満たす点\boldsymbol{x}の集合として記述できる。

:\boldsymbol{w}^T \boldsymbol{x} - b = 0,

ここで、\boldsymbol{w}は超平面への法線ベクトルである。ヘッセ正規形とよく似ているが、\boldsymbol{w}は単位ベクトルとは限らない。原点から超平面までの法線ベクトルに沿った距離は、b/\|\boldsymbol{w}\|で求められる。

### ハードマージン
学習データが線形分離可能であるとき、なるべくその距離が大きくなるように、2つのクラスのデータを分離するような、2つの平行な超平面を選択することができる。2つの超平面の間はマージン、2つの超平面の中間に位置する超平面は最大マージン超平面と呼ばれる。

正規化ないし標準化されたデータセットでは、これらの超平面は次の式で表される。

: \boldsymbol{w}^T \boldsymbol{x} - b = 1（この境界以上の点は、全てラベル1）
と
: \boldsymbol{w}^T \boldsymbol{x} - b = -1（この境界以下の点は、全てラベル−1）

この2つの超平面の間の距離は、幾何学的には、の公式を用いて、2/\|\boldsymbol{w}\|となる。だから、超平面の間の距離を最大化するためには、\|\boldsymbol{w}\| を最小化したい。

点がマージンに入らず、正しい側にいるための制約条件は、全てのiに対し、以下の式が成立することである。

:
\begin{cases}
\boldsymbol{w}^T \boldsymbol{x}_i - b \ge 1 & \text{if} \quad y_i = 1 \\
\boldsymbol{w}^T \boldsymbol{x}_i - b \le -1 & \text{if} \quad y_i = -1
\end{cases}


つまり、全てiに対し、次のようになる。

: y_i(\boldsymbol{w}^T \boldsymbol{x}_i - b) \ge 1 \qquad\cdots\cdots\,(1)

以上をまとめると、次の最適化問題が得られる。

: "Minimize \|\boldsymbol{w}\| subject to y_i(\boldsymbol{w}^T \boldsymbol{x}_i - b) \ge 1 for i = 1, \ldots, n."

これを解いて得られる\boldsymbol{w}とbを用いて、分類器\boldsymbol{x} \mapsto \sgn(\boldsymbol{w}^T \boldsymbol{x} - b)を決定することができる。ここで、\sgn(\cdot)は符号関数である。

この幾何学的記述から、最大マージン超平面は、それと最も近い位置にある\boldsymbol{x}_iによって定まるという重要な帰結が得られる。\boldsymbol{x}_iをサポートベクターと呼ぶ。

### ソフトマージン
SVMを拡張して線形分離可能ではないデータを扱えるようにするためには、関数が有用である。

: \max\left(0, 1 - y_i(\boldsymbol{w}^T \boldsymbol{x}_i - b)\right).

ここで、y_iはi番目のターゲット（すなわち、1または−1）であり、\boldsymbol{w}^T \boldsymbol{x}_i - bはi番目の出力である。

この関数の値は、(1) の制約が満たされている場合、つまり、\boldsymbol{x}_iがマージンの正しい側にある場合にはゼロとなる。マージンの反対側にあるデータに対しては、関数の値はマージンからの距離に比例する。

最適化の目的は、以下を最小化することである。

: \left[\frac 1 n \sum_{i=1}^n \max\left(0, 1 - y_i(\boldsymbol{w}^T \boldsymbol{x}_i - b)\right) \right] + \lambda\lVert \boldsymbol{w} \rVert^2,

パラメータ\lambdaは、マージンサイズを大きくすることと、\boldsymbol{x}_iがマージンの正しい側にあることとのトレードオフを決定する。\lambdaが充分に小さいとき、損失関数の第2項は無視可能になり、ハードマージンSVMと同様の振る舞いをする。

## 線形分離不可能な問題への適用
1963年にウラジーミル・ヴァプニク、Alexey Ya. Chervonenkis が発表した初期のサポートベクターマシンは、線形分類器にしか適用できなかった。しかし、再生核ヒルベルト空間の理論を取り入れたを用いてパターンを有限もしくは無限次元のへ写像し、特徴空間上で線形分離を行う手法が 1992年にBernhard E. Boser、Isabelle M. Guyon、ヴァプニクらによって提案された。これにより、非線形分類問題にも優れた性能を発揮することがわかり、近年特に注目を集めている。

なお、カーネル関数を取り入れた一連の手法では、どのような写像が行われるか知らずに計算できることから、カーネルトリック (Kernel Trick) と呼ばれている。

主に下記のカーネル関数がよく使われていてLIBSVMでも実装されている。
* 線形
* 多項式
* 放射基底関数
* シグモイド関数

## SVM分類器の計算
ソフトマージンSVM分類器の計算は、次のような式を最小化することになる

: \left[\frac 1 n \sum_{i=1}^n \max\left(0, 1 - y_i(\boldsymbol{w}^T \boldsymbol{x}_i - b)\right) \right] + \lambda \|\boldsymbol{w}\|^2 \qquad\cdots\cdots\,(2)

線形分離可能な入力データに対して、\lambdaの値を充分に小さく取るとハードマージン分類器が得られる。以下に詳述する古典的なアプローチは、(2) を 二次計画法問題に帰着するものである。

### 主形式
(2) の最小化問題は、微分可能な目的関数を持つ制約付き最適化問題に書き換えることができる。

i \in \{1,\,\ldots,\,n\}のそれぞれに対して変数 \zeta_i = \max\left(0, 1 - y_i(\boldsymbol{w}^T \boldsymbol{x}_i - b)\right)を定義する。なお、 \zeta_iは  y_i(\boldsymbol{w}^T \boldsymbol{x}_i - b) \geq 1 - \zeta_iを満たす最小の非負の数である。

したがって、最適化問題を次のように書き換えることができる。

:  \text{minimize } \frac 1 n \sum_{i=1}^n \zeta_i + \lambda \|\boldsymbol{w}\|^2 
:  \text{subject to } y_i(\boldsymbol{w}^T \boldsymbol{x}_i - b) \geq 1 - \zeta_i \, \text{ and } \, \zeta_i \geq 0,\, \text{for all } i.

### 双対形式
次のような双対形式に帰着することができる。

:  \text{maximize}\,\, f(c_1 \ldots c_n) =  \sum_{i=1}^n c_i - \frac 1 2 \sum_{i=1}^n\sum_{j=1}^n y_ic_i(\boldsymbol{x}_i^T \boldsymbol{x}_j)y_jc_j,
:  \text{subject to } \sum_{i=1}^n c_iy_i = 0,\,\text{and } 0 \leq c_i \leq \frac{1}{2n\lambda}\;\text{for all }i.

双対形式の最大化問題は、線形制約を前提とした c_iの二次関数であり、二次計画法のアルゴリズムで効率的に解くことができる。

ここで、 c_iは次のように定義される。

:  \boldsymbol{w} = \sum_{i=1}^n c_iy_i \boldsymbol{x}_i.

さらに、 \boldsymbol{x}_iが正しい側にあるときは c_i = 0であり、 \boldsymbol{x}_iがマージン境界にあるときは 0 である。このことから、\boldsymbol{w}はサポートベクターの線形結合として書くことができる。

オフセットbは、マージン境界上に\boldsymbol{x}_iを見つけ、次の式を解くことで復元することができる。

:  y_i(\boldsymbol{w}^T \boldsymbol{x}_i - b) = 1 \iff b = \boldsymbol{w}^T \boldsymbol{x}_i - y_i .

ここで、y_i = \pm 1なのでy_i ^ {-1} = y_iとなることを利用した。

## 構造化SVM
2005年にIoannis Tsochantaridisらがを発表した。任意のデータ構造を扱えるように拡張したものである。

通常の二値分類SVMは以下の値で分類する。
: \hat{y}(x; w) = \text{sign} \langle w, x \rangle
これは、このようにも書ける。
: \hat{y}(x; w) = \underset{y \in \{-1, 1\}}{\operatorname{arg\,max}}\ \langle w, y x \rangle
その上で、これを二値から一般の値に拡張する。\Psi は入出力から特徴量を作り出す実数ベクトルを返す関数。問題ごとに定義する。
: \hat{y}(x; w) = \underset{y \in \mathcal{Y}}{\operatorname{arg\,max}}\ \langle w, \Psi(x, y) \rangle
そして、下記の損失関数を最小化するように、最適化問題を解く。ここではL2正則化を付けている。Cは正則化の強さを表す定数。
\Deltaは出力の類似度を表す実数を返す関数。問題ごとに定義する。\Delta(y, y) = 0であり、異なる値同士なら0よりも大きくなるように設計する。
: E(w) = \| w \|^2 + C \sum_{i = 1}^n \Delta(y_i, \hat{y}(x_i; w))
上記の最適化問題を解くには工夫が必要であり、その後も提案が続いているが、2005年に提案された方法は下記のように上界となる関数L_i(w)を作る。
: \Delta(y_i, \hat{y}(x_i; w)) \le L_i(w)
その上で、下記の最適化問題を解く。
: E(w) = \| w \|^2 + C \sum_{i = 1}^n L_i(w)
L_i(w) の作り方として2通りが提案された。
; マージンリスケーリング
: L_i(w) = \sup_{y \in \mathcal{Y}} \Delta(y_i, y) + \langle w, \Psi(x_i, y) \rangle - \langle w, \Psi(x_i, y_i) \rangle
; スラックリスケーリング
: L_i(w) = \sup_{y \in \mathcal{Y}} \Delta(y_i, y) \left( 1 + \langle w, \Psi(x_i, y) \rangle - \langle w, \Psi(x_i, y_i) \rangle \right)

## 参照

## 教科書
* 阿部重夫：「パターン認識のためのサポートベクトルマシン入門」、森北出版、ISBN 978-4-627-84921-1 (2011年4月).
* 竹内一郎、鳥山昌幸：「サポートベクトルマシン」、講談社サイエンティフィク、ISBN 978-4-06-152906-9 (2015年8月7日).
* 田村孝廣：「やさしく学べる　サポートベクトルマシン：数学の基礎とPythonによる実践」、オーム社、ISBN 978-4-274-22967-1 (2022年11月30日).

## 関連項目
*カーネル法
*逐次最小問題最適化法 (SMO)
*人工知能
*パターン認識
*放射基底関数
*線形分類器
*実装
**LIBSVM（一般）、LIBLINEAR（線形）
**scikit-learn（LIBSVM、LIBLINEARのPythonラッパーを含む）