今回は、SVMに関する他のサイトの情報を元にSageでSVMを試してみます。 参考(ほとんどコピー)にしたのは以下のサイトです。
上記で説明されたSVMを計算する2通りの方法が7章を理解する上で助けになりました。
SVMのテストには、PRMLの図7.4、
カーネルには、$exp(-\gamma||x - x'||^2)$のガウスカーネルを使い、$\gamma=0.45$とします。
|
|
「きちめも」で実装されている、「サポートベクターマシン入門」の付録に掲載されているSMO(Sequenctial Minimal Optimization) は、J. Platt(1988)で発表されたもので、2つのデータ点に対する最適化問題を解析的に求め、ヒューリスティクスな選択で反復的な処理を 高速に収束させる手法です。
以下では、「きちめも」の実装に若干の修正を加えています。
|
|
SMOの計算結果は、図7.4と同様のパターンを得ました。
|
|
「人工知能に関する断想録」では、適化ライブラリCVXOPTを使ってSVMを計算しています。
「人工知能に関する断想録」のポイントは、CVXOPTの入力形式に $$ \begin{array}{ll} \mbox{minimize} & (1/2)x^TPx + q^Tx \\ \mbox{subject to} & G x \leq h \\ & A x = b \end{array} $$ 制約条件$0 \le a_n \le C$をどうやって組み入れるかですが、 $$ G x \leq h $$ を $$ \begin{pmatrix} -1 & 0 \\ 0 & -1 \\ 1 & 0 \\ 0 & 1 \end{pmatrix} \begin{pmatrix} a_1\\ a_2 \end{pmatrix} \le \begin{pmatrix} 0 \\ 0 \\ C \\ C \end{pmatrix} $$ とすることで解決されたそうです。
「人工知能に関する断想録」からの変更点は
|
|
|
pcost dcost gap pres dres 0: 0.0000e+00 -6.0000e+03 4e+02 1e+00 1e+00 1: -6.4529e+01 -2.3215e+03 3e+02 1e+00 1e+00 2: -1.8484e+02 -1.0747e+03 2e+02 9e-01 9e-01 3: -3.7697e+02 -1.0604e+03 2e+02 8e-01 8e-01 4: -6.3559e+02 -1.3224e+03 1e+02 7e-01 7e-01 5: -8.8941e+02 -1.6107e+03 1e+02 7e-01 7e-01 6: -1.1981e+03 -1.9385e+03 1e+02 6e-01 6e-01 7: -1.4595e+03 -2.1869e+03 9e+01 5e-01 5e-01 8: -1.7532e+03 -2.4195e+03 7e+01 4e-01 4e-01 9: -1.9720e+03 -2.5556e+03 6e+01 3e-01 3e-01 10: -2.2906e+03 -2.6936e+03 4e+01 2e-01 2e-01 11: -2.5358e+03 -2.7486e+03 3e+01 8e-02 8e-02 12: -2.6860e+03 -2.7580e+03 1e+01 2e-02 2e-02 13: -2.7456e+03 -2.7557e+03 4e+00 3e-03 3e-03 14: -2.7530e+03 -2.7541e+03 6e-01 2e-04 2e-04 15: -2.7537e+03 -2.7539e+03 1e-01 2e-05 2e-05 16: -2.7538e+03 -2.7538e+03 5e-03 1e-06 4e-14 17: -2.7538e+03 -2.7538e+03 1e-04 5e-08 4e-14 pcost dcost gap pres dres 0: 0.0000e+00 -6.0000e+03 4e+02 1e+00 1e+00 1: -6.4529e+01 -2.3215e+03 3e+02 1e+00 1e+00 2: -1.8484e+02 -1.0747e+03 2e+02 9e-01 9e-01 3: -3.7697e+02 -1.0604e+03 2e+02 8e-01 8e-01 4: -6.3559e+02 -1.3224e+03 1e+02 7e-01 7e-01 5: -8.8941e+02 -1.6107e+03 1e+02 7e-01 7e-01 6: -1.1981e+03 -1.9385e+03 1e+02 6e-01 6e-01 7: -1.4595e+03 -2.1869e+03 9e+01 5e-01 5e-01 8: -1.7532e+03 -2.4195e+03 7e+01 4e-01 4e-01 9: -1.9720e+03 -2.5556e+03 6e+01 3e-01 3e-01 10: -2.2906e+03 -2.6936e+03 4e+01 2e-01 2e-01 11: -2.5358e+03 -2.7486e+03 3e+01 8e-02 8e-02 12: -2.6860e+03 -2.7580e+03 1e+01 2e-02 2e-02 13: -2.7456e+03 -2.7557e+03 4e+00 3e-03 3e-03 14: -2.7530e+03 -2.7541e+03 6e-01 2e-04 2e-04 15: -2.7537e+03 -2.7539e+03 1e-01 2e-05 2e-05 16: -2.7538e+03 -2.7538e+03 5e-03 1e-06 4e-14 17: -2.7538e+03 -2.7538e+03 1e-04 5e-08 4e-14 |
CVXOPTの計算は、SMOよりも高速で解も安定しています。
CVXOPTの計算結果も、図7.4と同様のパターンを得ました。
|
|
|
|