2019年7月4日木曜日

サポートベクターマシン(SVM)をする

AIのアルゴリズムでよく名前を聞くSVM。
簡単に説明すると入力されたn個の数値(ベクトル)からAであるかないか判別するプログラムです。分類器というようです。

例えば、入力は二個で掛け算の積が10以上ならばOKを返すものを作りたいならば


-1 1:2 2:3  #2*3でNG
1  1:5 2:4  #5*4でOK
...

こんな感じにOKとNGパターンのデータをたくさん作ると、勝手に掛け算の積が10以上ならばOKを返さないといけないんだなと学習してくれて、入力に対して結果を予想してくれるのです。
新聞見て競馬の予想するおっさんみたいな感じですね。

どうやってSVMのプログラム作るかと調べると、世の中には素晴らしい人がいて、svmlightというとっても便利なプログラムがすでにあります。
http://svmlight.joachims.org/
ソースコードもビルドしたものデータも全部公開されています。
おじさんの大好きなC言語だしとってもコンパクト。
コントロール+Cとコントロール+Vのコピペ大好きなおじさんや学生向きじゃないか。

svmlightの論文もここにありますね。
http://www.cs.cornell.edu/People/tj/publications/joachims_99a.pdf
何かいてあるかよくわかんない。
コーネル大学という世界6位のところが作ってるらしい。

SVMのすごいところは、内部の仕組みまったく知らなくても、この学習用のデータとプログラムさえ用意できれば、誰でもSVMで学習させて、競馬を予想するおっちゃんみたいなものを作れちゃうんです。なんてすばらしい。
PyTorchとかTelsorFlowとかをインストールしなくてもよいんです。
これ裁判のデータをベクトル化すれば離婚できるかできないかとか判断する裁判官とかも作れますね。

前回のブログで書いた通り、SVMもHLACも小学生でもわかるので、小学生でもがん細胞を見つけるSVMの学習済みモデルデータを作れちゃうのです。これおじさんうまくバイトの子にデータ作らせられれば大もうけできそう。だからいろんな会社がやってるのね。

そういえば、この前植物に水をやるかどうか判別するプログラムを作れないか相談を受けたんだった。それにも使える。

会社にいるロレックスの時計を買うために株を初めて1000万円損をしているかわいそうな後輩に教えてあげようかな。

このsvmlightに人のシルエットのHLACの結果を入れて学習させれば万引き判別とかもでるんですね。

https://arupaka-arupaka.hatenadiary.org/entry/20150511/1431309946
とりあえずここにある簡単なデータを用意して自分でビルドしたsvmlightを動かしてみました。

学習データ
-------
1 1:1 2:-1
1 1:2 2:-1
1 1:3 2:-3
1 1:4 2:-4
1 1:5 2:-5
1 1:6 2:-2
1 1:7 2:-3
-1 1:8 2:1
-1 1:9 2:1
-1 1:10 2:1
-1 1:11 2:3
-1 1:4 2:4
-1 1:5 2:1
-1 1:6 2:6
-1 1:7 2:30
-1 1:8 2:1
-------

テストデータ
-------
0 1:0 2:-1
0 1:1 2:-1
0 1:2 2:-1
0 1:3 2:1
0 1:4 2:1
0 1:5 2:5
-------

テスト結果
-------
1.0553405
0.8794504
0.70356032
0.055340479
-0.1205496
-1.2410992
-------

おー、データ数が少ないせいか一瞬で終わる。すげー。
あとは前回までのブログに書いたように万引きの瞬間の画像に対してHLACの特徴ベクトルでSVMの学習データを作り学習をさせれば、その行動をした人を検出できるっぽいです。ほんとにできるんだろうか。

SVMってとっても簡単なのね。

0 件のコメント:

コメントを投稿