《サポート・ベクター・マシン》

提供: ORWiki
2007年7月7日 (土) 12:46時点における122.26.167.76 (トーク)による版
ナビゲーションに移動 検索に移動

【さぽーと・べくたー・ましん (support vector machine) 】

 サポート・ベクター・マシン (SVM) は, 判別関数を求める教師付き学習法のひとつである.

 今, 個の属性を持ったデータが個与えられており,これを,次元空間の点と考える. 各点は2種類のクラスのいづれか一方に属しており, 対応する2値のラベルが与えられているとする. このとき, ラベルの値にしたがって点を判別する2クラスの判別問題を考える.

 SVMでは線形関数を用いた判別を行う. 次元の法線ベクトルおよび実数で定まる線形関数を とすれば, 与えられたデータおよびラベルにしたがって,


    


となるベクトルとスカラを次に示す最適化問題を解くことで算出する.

 一般的には, 与えられた点全てに対して式 (1) を満たすが存在するとは限らないので, 非負の変数を導入し, 次の制約条件


    


のもと,の和とのノルムができるだけ小さくなる線形関数を考える. すなわち, 次の二次計画問題を解きを算出する [2].


構文解析に失敗 (不明な関数「\begin{array}」): {\displaystyle \begin{array}{l}\left| \\ \\ \\ \end{array}} 最小化 構文解析に失敗 (構文エラー): {\displaystyle { \displaystyle \frac{1}{2}\|\\|_{2}^{2} + C \sum_{j=1}^{M} \xi_{j} }} 制約


ここで,はあらかじめ設定された正の定数で, 構文解析に失敗 (構文エラー): {\displaystyle \|\\|^{2}_{2}と\sum_{j=1}^{M} \xi_{j}} とのバランスをコントロールするパラメータである. また, 構文解析に失敗 (構文エラー): {\displaystyle \|\\|^{2}_{2}} は正則化項とも呼ばれ, これを小さくすることは判別関数に用いるデータの属性を少なくし, 過学習を防ぐ役割があるとされる [6]. 問題 (3) は, 1ノルムソフトマージンSVMと呼ばれる定式化である.

 通常は,この問題の双対問題を考え最適化を行う [5]. を双対変数とすれば, 問題 (3) の双対問題は


\begin{equation} \left| \begin{array}{ll}

\mbox{最大化}
 & { %\displaystyle 
     - \frac{1}{2} \sum_{i=1}^{M}\sum_{j=1}^{M}
        y_{i}y_{j}{ }_{i}^{T}{ }_{j}\alpha_{i}\alpha_{j}
     + \sum_{j=1}^{M} \alpha_{j}
   }\\
\mbox{制約}
  & { %\displaystyle
      \sum_{j=1}^{M} y_{j} \alpha_{j}= 0,
   }\\
  & { 0 \leq \alpha_{j} \leq C,\quad j=1,2,\ldots,M
    }

\end{array} \right. \label{eq:StandradWolfeDualwithQ} \end{equation}


と書くことができ, これは1本の等式制約と各変数の上下限制約のみの凹二次関数の最大化となる. この特殊構造を用いた最適化アルゴリズム [3, 4] が知られており, データ数が数10万を超えるような大規模問題であっても, 高速に最適化が可能である.

 双対問題 (4) の最適解をとすれば,KKT条件より主問題 (3) の最適解構文解析に失敗 (構文エラー): {\displaystyle \^{*},b^{*}とは, \^{*} = \sum_{j=1}^{M} \alpha_{j}^{*} y_{j} { }_{j}} となる関係があり, さらにとなる添え字をとすれば, 構文解析に失敗 (構文エラー): {\displaystyle b^{*} = { }^{T}_{k}\^{*}-y_{k}} となることが示される. また, 特に添え字の集合を定義すれば,に対応するデータをサポート・ベクターと呼ぶ.したがって, 判別関数は双対問題の最適解とサポート・ベクターにより次のように表されることとなる.


\begin{equation} \label{eq:線形判別関数}

f(\Vx) = \Vx^{T} \^{*} - b^{*}
       = \sum_{j \in SV} \alpha_{j}^{*} y_{j}
                      \Vx^{T} { }_{j} - b^{*} 

\end{equation}


さらに, 双対問題 (4) や主問題 (3) は,サポート・ベクター以外を全て取り除いても最適解は不変であり, これらの点はSVMでの判別にはまったく寄与していないことになる.

 SVMの最大の特徴は, 双対問題(4)を応用することで非線形な判別関数を構成できる点にある.非線形な判別関数を構成するためには, まず, 適当な非線形変換を使い各データをより高い次元の特徴空間の元へと射影する. 射影されたの元に対して, 上での線形な判別関数を求めれば, 元の空間で見れば非線形な判別関数を求めたこととなる.

 ここで, 双対問題 (4) に注目すれば,上の内積の値のみが得られれば定式化が可能であり, 特徴空間での点の座標を必ずしも必要としないことが分かる. そこで, SVMではカーネル関数と呼ばれる特殊な関数構文解析に失敗 (不明な関数「\kernel」): {\displaystyle \kernel{\cdot}{\cdot}} を用い元のデータ構文解析に失敗 (不明な関数「\Vx」): {\displaystyle \Vx,\Vx' \in \boldsymbol{R}^{N}} から直接の元構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle \phi(\Vx),\phi(\Vx')} の内積構文解析に失敗 (不明な関数「\Vx」): {\displaystyle \phi(\Vx)^{T}\phi(\Vx')} を算出し, 双対問題の最適化により非線形の判別関数が求められる [1]. よく用いられる代表的なカーネル関数として, 多項式カーネル構文解析に失敗 (不明な関数「\kernel」): {\displaystyle \kernel{\Vx}{\Vx'} = \left( \Vx^{T} \Vx' + c \right)^{d}} やRBFカーネル 構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle \kernel{\Vx}{\Vx'} = \exp\left( -\| \Vx - \Vx' \|^{2}/ \sigma^{2} \right )} ,(ただしは自然数のパラメータ, は実数のパラメータである)などがある.

 カーネル関数の値構文解析に失敗 (不明な関数「\kernel」): {\displaystyle \kernel{{ }_{i}}{{ }_{j}}}成分とする次の対称行列をとすれば,Kが半正定値行列となるようなカーネル関数をMercerカーネル(あるいは半正定値カーネル)と呼び, このようなカーネル関数であれば,構文解析に失敗 (不明な関数「\kernel」): {\displaystyle \kernel{{ }_{i}}{{ }_{j}}=\phi({ }_{i})^{T}\phi({ }_{j})} となる特徴空間への変換が存在することが保証される. 多項式カーネルやRBFカーネルはMercerカーネルである [5].また, Mercerカーネルを用いるのであれば, 対応した双対問題は常に凹二次関数の最大化となり, 通常の二次計画問題の解法を用いれば大域的に最適化が可能である.

 すなわち, 双対問題の最適解をとすれば, カーネル関数を用いた場合には, 次の非線形な判別関数が求められることとなる.


構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle f(\Vx) = \sum_{j \in SV}\alpha_{j}^{*} y_{j} \kernel{\Vx}{{ }_{j}} - b^{*}. }      


 すなわち, 判別関数は, サポート・ベクター に対応するカーネル関数構文解析に失敗 (不明な関数「\kernel」): {\displaystyle \kernel{\Vx}{{ }_{j}}} の重ね合せとして算出されると見ることができる.



参考文献

[1] B. E. Boser, I. M. Guyon, and V. N. Vapnik, "A training algorithm for optimal margin classifiers," in Proceedings of the fifth annual workshop on Computationa learning theory, USA, 144-152, 1992.

[2] C. Cortes and V. Vapnik, "Support-vector networks," Machine learning, 20 (1995), 273-297.

[3] T. Joachims, "Making large-scale support vector machine learning practical," in Advances in Kernel Methods, B. Schölkopf, C. Burges, and A. Smola, eds., The MIT Press, 169-184, 1999.

[4] J. C. Platt, "Fast training of support vector machines using sequential minimal optimization," in Advances in Kernel Methods, B. Schölkopf, C. Burges, and A. Smola, eds., The MIT Press, 185-208. 1999.

[5] J. Shawe-Taylor and N. Cristianini, Kernel Methods for Pattern Analysis, Cambridge University Press, 2004.

[6] V. N. Vapnik, The nature of statistical learning theory, Statistics for Engineering and Information Science, Springer-Verlag, 2000.