sklearnで高次元の入力データをSVNして決定境界を可視化したい

sklearnで高次元の入力データをシンプルにSVNとPCAしてグラフにプロット

で64次元から2次元にデータを次元圧縮して表示したけど、このままだと結局どのようにSVMが決定境界を持っているかいまいちわからない.

かといって64次元空間で引かれている決定境界なんて2次元境界に可視化できない.

完全ではないけどひとまずそれっぽいもの

とりあえず圧縮された次元から決定境界を求めてみる.

1.プロットのx,y座標をPCAの逆変換で64次元に変換

2.変換後の64次元データでSVMのClfに突っ込む.

3.結果を元にプロットで可視化

64次元の2次元で60%の寄与率だったのもあってかそこそこ引けているように見える.実際には他62次元分を考慮していないので正確ではないのはしょうがない.今回のデータではうまくいっているように見える.

contourfではSVMのdecision_functionの結果(マージン)を入れているのである程度連続値として出ている.

まずコード

そんで結果

figure_1.png

 

がんばって境界面の点から境界面表示

どうにかする方法がないかを探していたら、頑張って表示しようとしている人を見つけた.

https://github.com/tmadl/highdimensional-decision-boundary-plot

まだ検証中のようなので完全とは言えないそうだが、絵だけ見るとそこそこできそうな感じ.

ここではこれを紹介する.

digits_logreg

 

ベースの考え方

githubのREADMEは以下のように試みていることが書かれている.

dr_model_overview

  1. 二つのクラスからの間を結び、決定境界のキーポイントを探す.
  2. 見つけた決定境界のキーポイントを結んでいく.
  3. もし決定境界の交わりが泣けrば、超球面上にどちらとも言えない領域を探す.(?正しい?)
  4. 見つけたキーポイントや境界をPCAやLDAなどの次元圧縮でプロットする.

なんかできそう.

使う

実際に使って実行するには、Nloptというのが必要なのでインストールする.pythonで行う場合はさらにSWIGも必要に見える.

Nloptのインストールは以下

https://nlopt.readthedocs.io/en/latest/NLopt_Installation/

SWIGは以下

http://www.swig.org/

最後に

https://github.com/tmadl/highdimensional-decision-boundary-plot/blob/master/decisionboundaryplot.py

のファイルを以下のPythonファイルと同じディレクトリにおく.

そしたらコードを実行.

About the author

コメントを残す