人工知能に関する断創録スマートフォン用の表示で見るスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。Learning、Kerasに関する記事が多いです。2010-05-02非線形SVM機械学習PRML今回は、非線形サポートベクトルマシンを試してみます。線形SVM(2010/5/1)は、カーネル関数に線形カーネル(ただの内積)を使いましたが、これを多項式カーネル(A)やガウスカーネル(B)に変更します。カーネル関数は元のベクトルxを非線形写像によって高次元空間に写像した特徴ベクトルφ(x)の内積(C)で定義されます。一般に特徴ベクトルφ(x)は高次元空間(無限次元空間でもOK)になるので普通にやってたら内積の計算量が非常に大きくなります。そこで、特徴ベクトルφ(x)の内積を計算せずに多項式カーネル(A)やガウスカーネル(B)の計算で置き換えるテクニックをカーネルトリックと呼ぶとのこと。多項式カーネルやガウスカーネルを使うとφ(x)を陽に計算する必要がなくなります。特徴空間φ(x)の次元」という前提があったようです。いえば、非線形SVMの基本的な考え方は、入力空間xでは線形分離不可能でも高次元空間φ(x)に写してやれば線形分離可能になることを期待した手法でした。カーネルの理論は実のところまだよくわかってません・・・もっと深耕する必要があるなぁ。プログラムを書いて試してみます。Pythonのグラフ描画ライブラリmatplotlibで等高線を描く方法がよくわからなかったので下のサイトを参考にさせていただきました。下のサイトでは二次計画法のライブラリとしてcvxoptの代わりにOpenOptという最適化ライブラリを使ってます。show()データは、赤がクラス1、青がクラス2です。見ればわかるように元の空間xでは、直線「1本」では分離できません(線形分離不可能)。多項式カーネルでパラメータはp=3としてみました。高次元の特徴空間における超平面の分類境界を入力空間に戻すと上みたいなうねうねした曲線になるんですねー。次に、ガウスカーネルを使ってみます。パラメータはσ=5.0です。こっちは少し違いますね。パラメータをいろいろ変えて試してみるとよいかも。一般に、カーネル関数の最良のパラメータは実験で求めるしかないようです。classification(PDF)を読むと最適パラメータはグリッドサーチ(パラメータの組み合わせを網羅的に試す)で見つけようと書いてあります。パラメータを変えるとどのように分類境界が変わるかは次回試して見ます。最後に、PRMLの図7.4のデータを使って試してみましょう。下のプログラムを実行するには、PRMLの原書サポートページにあるclassification.txtというデータを同じディレクトリにおいてください。データはファイルから読み込みます。show()結果は、下のようになります。あれ?うまく分類できてないですねー。分類できなくて当たり前。重なりのあるクラス分布に書いてありますが、今までやってきたのはハードマージンSVMといって入力空間xでデータを完全に分離できることを仮定してきた手法だからです。上のデータを見ると2つのクラスのデータが入り組んでいて曲線でも完全に分離できません。データが重なっていて誤分類も許すようなSVMは、ソフトマージンSVM(C-SVM)と呼ぶそうです。この拡張は次回試してみますが、修正は驚くほど簡単です。ソフトマージンSVM線形SVM»プロフィールid:aidiary人工知能とその関連分野に興味があります。Blog|ブログを報告する。