《サポート・ベクター・マシン》のソースを表示
←
《サポート・ベクター・マシン》
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、以下のグループに属する利用者のみが実行できます:
登録利用者
。
このページは編集や他の操作ができないように保護されています。
このページのソースの閲覧やコピーができます。
'''【さぽーと・べくたー・ましん (support vector machine) 】''' サポート・ベクター・マシン (SVM) は, 判別関数を求める教師付き学習法のひとつである. 今, <math>N\, </math>個の属性を持ったデータが<math>M\, </math>個与えられており,これを,<math>N\, </math>次元空間<math>\mathbf{R}^{N}\, </math>の点<math>\boldsymbol{a}_{1}, \boldsymbol{a}_{2},\ldots, \boldsymbol{a}_{M} \in \mathbf{R}^{N}\, </math>と考える. 各点<math>\boldsymbol{a}_{j}\ (j=1,2,\ldots,M)\, </math>は2種類のクラスのいづれか一方に属しており, 対応する2値のラベル<math>y_{j} \in \{-1,+1\}\, </math>が与えられているとする. このとき, ラベルの値にしたがって点を判別する2クラスの判別問題を考える. SVMでは線形関数を用いた判別を行う. <math>N\, </math>次元の法線ベクトル<math>\boldsymbol{w} \, </math>および実数<math>b\, </math>で定まる線形関数を<math>f(\boldsymbol{x}) = \boldsymbol{x}^{T} \boldsymbol{w}- b\, </math> とすれば, 与えられたデータおよびラベルにしたがって, <center> <math> f(\boldsymbol{a}_{j}) = \boldsymbol{a}_{j}^{T} \boldsymbol{w}- b \left\{ \begin{array}{ll} > 0 & \mbox{if}\ \ y_{j} = 1,\\ < 0 & \mbox{if}\ \ y_{j} = -1, \end{array} \right.\quad j=1,2,\ldots,M \, </math> <math>(1)\, </math> </center> となるベクトル<math>\boldsymbol{w} \, </math>とスカラ<math>b\, </math>を次に示す最適化問題を解くことで算出する. 一般的には, 与えられた点全てに対して式 (1) を満たす<math>\boldsymbol{w},b\, </math>が存在するとは限らないので, 非負の変数<math>\xi_{j}\ (j=1,2,\ldots,M)\, </math>を導入し, 次の制約条件 <center> <math> \begin{array}{lll} {\displaystyle \boldsymbol{a}_{j}^{T} \boldsymbol{w}- b + \xi_{j} \geq 1 } & \mbox{if}& y_{j} = 1, \\ {\displaystyle \boldsymbol{a}_{j} \boldsymbol{w}- b - \xi_{j} \leq -1 } & \mbox{if}& y_{j} = -1 \end{array} \, </math> <math>(2)\, </math> </center> のもと,<math>\xi_{j}\, </math>の和と<math>\boldsymbol{w}\, </math>のノルムができるだけ小さくなる線形関数を考える. すなわち, 次の二次計画問題を解き<math>\boldsymbol{w},b\, </math>を算出する [2]. <table align="center"> <tr> <td> <table> <tr> <td rowspan="4"> <math>\left| \begin{array}{l} \\ \\ \\ \\ \\ \end{array} \right.</math></td> <td>最大化 </td> <td><math>\textstyle \frac{1}{2}\| \boldsymbol{w} \| \frac{2}{2} + C \ {\sum}_{j=1}^{M} \xi_{j}</math></td> <td rowspan="4"> <math>(3)\, </math></td> </tr> <tr> <td>制約 </td> <td><math>\textstyle \boldsymbol{a}_{j}^{T} \boldsymbol{w}- b + \xi_{j} \geq 1, \quad \mbox{if } y_{j} = 1,</math></td> </tr> <tr> <td></td> <td><math>\textstyle \boldsymbol{a}_{j}^{T} \boldsymbol{w}- b - \xi_{j} \leq -1, \quad \mbox{if } y_{j} = -1,</math></td> </tr> <tr> <td></td> <td><math>\textstyle \xi_{j} \ge 0, \quad j=1,2,\ldots,M</math></td> </tr> </table> </td> </tr> </table> ここで,<math>C\, </math>はあらかじめ設定された正の定数で, <math>\textstyle \| \boldsymbol{w} \|\frac{2}{2}\, </math>と<math>\textstyle {\sum}_{j=1}^{M} \xi_{j}\, </math>とのバランスをコントロールするパラメータである. また, <math>\textstyle \| \boldsymbol{w} \|\frac{2}{2}\, </math>は正則化項とも呼ばれ, これを小さくすることは判別関数に用いるデータの属性を少なくし, 過学習を防ぐ役割があるとされる [6]. 問題 (3) は, 1ノルムソフトマージンSVMと呼ばれる定式化である. 通常は,この問題の双対問題を考え最適化を行う [5]. <math>\alpha_{1},\alpha_{2},\ldots,\alpha_{M}\, </math> を双対変数とすれば, 問題 (3) の双対問題は <table align="center"> <tr> <td> <table> <tr> <td rowspan="4"> <math>\left| \begin{array}{l} \\ \\ \\ \\ \end{array} \right.</math></td> <td>最大化 </td> <td><math>\textstyle - \frac{1}{2} \sum_{i=1}^{M}\sum_{j=1}^{M} y_{i}y_{j} \boldsymbol{a}_{i}^{T} \boldsymbol{a}_{j}\alpha_{i}\alpha_{j} + \sum_{j=1}^{M} \alpha_{j}</math></td> <td rowspan="4"> <math>(4)\, </math></td> </tr> <tr> <td>制約 </td> <td><math>\textstyle \sum_{j=1}^{M} y_{j} \alpha_{j}= 0,</math></td> </tr> <tr> <td></td> <td><math>0 \leq \alpha_{j} \leq C,\quad j=1,2,\ldots,M</math></td> </tr> </table> </td> </tr> </table> と書くことができ, これは1本の等式制約と各変数の上下限制約のみの凹二次関数の最大化となる. この特殊構造を用いた最適化アルゴリズム [3, 4] が知られており, データ数<math>(M)\, </math>が数10万を超えるような大規模問題であっても, 高速に最適化が可能である. 双対問題 (4) の最適解を<math>\alpha^{*}_{1},\alpha^{*}_{2},\ldots,\alpha^{*}_{M}\, </math>とすれば,KKT条件より主問題 (3) の最適解<math>\boldsymbol{w}^{*},b^{*}\, </math>とは, <math>\textstyle \boldsymbol{w}^{*} = \sum_{j=1}^{M} \alpha_{j}^{*} y_{j} \boldsymbol{a}_{j}\, </math>となる関係があり, さらに<math>0<\alpha_{k}^{*}<C\, </math>となる添え字を<math>k\, </math>とすれば, <math>b^{*} = \boldsymbol{a}^{T}_{k} \boldsymbol{w}^{*}-y_{k}\, </math>となることが示される. また, 特に添え字の集合<math>SV=\{j|\alpha_{j}^{*} \not = 0 \}\, </math>を定義すれば,<math>j \in SV\, </math>に対応するデータ<math>\boldsymbol{a}_{j}\, </math>をサポート・ベクターと呼ぶ.したがって, 判別関数は双対問題の最適解とサポート・ベクターにより次のように表されることとなる. <center> <math> f(\boldsymbol{x}) = \boldsymbol{x}^{T} \boldsymbol{w}^{*} - b^{*} = \sum_{j \in SV} \alpha_{j}^{*} y_{j} \boldsymbol{x}^{T} \boldsymbol{a}_{j} - b^{*}\, </math> <math>(5)\, </math> </center> さらに, 双対問題 (4) や主問題 (3) は, サポート・ベクター以外を全て取り除いても最適解は不変であり, これらの点はSVMでの判別にはまったく寄与していないことになる. SVMの最大の特徴は, 双対問題(4)を応用することで非線形な判別関数を構成できる点にある. 非線形な判別関数を構成するためには, まず, 適当な非線形変換<math>\phi: \mathbf{R}^{N} \to {\mathcal F}\, </math>を使い各データ<math>\boldsymbol{a}_{j}\, </math>をより高い次元の特徴空間<math>{\mathcal F}\, </math>の元へと射影する. 射影された<math>{\mathcal F}\, </math>の元<math>\phi(\boldsymbol{a}_{1}),\phi(\boldsymbol{a}_{2}),\ldots,\phi(\boldsymbol{a}_{M})\, </math>に対して, <math>{\mathcal F}\, </math>上での線形な判別関数を求めれば, 元の空間で見れば非線形な判別関数を求めたこととなる. ここで, 双対問題 (4) に注目すれば,<math>{\mathcal F}\, </math>上の内積<math>\phi(\boldsymbol{a}_{i})^{T}\phi(\boldsymbol{a}_{j})\, </math>の値のみが得られれば定式化が可能であり, 特徴空間での点<math>\phi(\boldsymbol{a}_{j})\, </math>の座標を必ずしも必要としないことが分かる. そこで, SVMではカーネル関数と呼ばれる特殊な関数<math>\mathcal {K} ( {\cdot} , {\cdot} )\, </math>を用い元のデータ<math>\boldsymbol{x}, \boldsymbol{x}' \in \mathbf{R}^{N}\, </math>から直接<math>{\mathcal F}\, </math>の元<math>\phi(\boldsymbol{x}),\phi(\boldsymbol{x}')\, </math>の内積<math>\phi(\boldsymbol{x})^{T}\phi(\boldsymbol{x}')\, </math>を算出し, 双対問題の最適化により非線形の判別関数が求められる [1]. よく用いられる代表的なカーネル関数として, 多項式カーネル<math>\mathcal{K} (\boldsymbol{x}, \boldsymbol{x}' ) = \left( \boldsymbol{x}^{T}\boldsymbol{x}' + c \right)^{d}\,</math> やRBFカーネル <math>\mathcal{K} (\boldsymbol{x},\boldsymbol{x}' ) = \exp\left( -\| \boldsymbol{x} - \boldsymbol{x}' \|^{2}/ \sigma^{2} \right )\, </math>, (ただし<math>d\, </math>は自然数のパラメータ, <math>c,\sigma\, </math> は実数のパラメータである) などがある. カーネル関数の値<math>\mathcal{K} ( \boldsymbol{a}_{i}, \boldsymbol{a}_{j} ) \, </math>を<math>i-j\, </math>成分とする<math>M\, </math>次の対称行列を<math>K\, </math>とすれば, <math>K\, </math>が半正定値行列となるようなカーネル関数をMercerカーネル(あるいは半正定値カーネル)と呼び, このようなカーネル関数であれば,<math>\mathcal{K} ( \boldsymbol{a}_{i}, \boldsymbol{a}_{j} )=\phi(\boldsymbol{a}_{i})^{T}\phi(\boldsymbol{a}_{j})\, </math>となる特徴空間への変換<math>\phi(\cdot)\, </math>が存在することが保証される. 多項式カーネルやRBFカーネルはMercerカーネルである [5].また, Mercerカーネルを用いるのであれば, 対応した双対問題は常に凹二次関数の最大化となり, 通常の二次計画問題の解法を用いれば大域的に最適化が可能である. すなわち, 双対問題の最適解を<math>\alpha_{j}^{*}\, </math>とすれば, カーネル関数を用いた場合には, 次の非線形な判別関数が求められることとなる. <center> <math>f(\boldsymbol{x}) = \sum_{j \in SV}\alpha_{j}^{*} y_{j} \mathcal{K} ( \boldsymbol{x}, \boldsymbol{a}_{j} )- b^{*}.\, </math> <math>(6)\, </math> </center> すなわち, 判別関数<math>f(\cdot)\, </math>は, サポート・ベクター <math>\boldsymbol{a}_{j}\ (j \in SV)\, </math>に対応するカーネル関数<math>\mathcal{K} (\boldsymbol{x}, \boldsymbol{a}_{j} )\, </math>の重ね合せとして算出されると見ることができる. ---- '''参考文献''' [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.
《サポート・ベクター・マシン》
に戻る。
案内メニュー
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
その他
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ORWikiへのお問い合わせ
OR学会HP
OR学会アーカイブ集
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報