2016年1月20日水曜日

MNISTの自己組織化マップ(SOM)を作った[Python]

さっき昔の記事の修正してたら操作を誤ってしまい,古い投稿がさっき投稿されたようになっててちょっとつらいです…….なのでもう少し温めてから出そうと思ってた内容をさっさと書いちゃいます.

自己組織化マップというのは,教師なしクラスタリングの一種で,似た者同士がまとまっていくものです.詳細はプログラムのコメントに書いたリンク先を参照してください.

とりあえずこういった感じの画像が得られます.(実際に使うときはこういった画像を探してくるのではなくて写像した2次元座標を使います.scikit-learnにもクラスが無く,ひょっとしたら可視化以外に使う人はもういないのかもしれません)

MNISTの手書き数字を似た者同士でまとめてる感じです.上のような画像を作るには結構演算が必要なので以下のプログラムのパラメータを幾つか変更してやる必要がありますが,基本的にはこのプログラムで出来ます(n_side=50,n_learn=5000ぐらい).これを見て,画像認識のプログラムを作る際に,どういった特徴量を作るかを考えるのに役立てることができます.

まぁ画像以外にも元素のデータ突っ込んで似た元素でまとめたりとか,動物の特徴から似た者同士をまとめたりとかという使い方もあります.よくネットに上がっている例だと色の自己組織化マップがあります.そんなに時間がかからないので出来る様子を動画にしてみました.

最初は結構変化しますが,時間が立つに連れて落ち着いてくるようすがわかります.

以下ソースコード

0 件のコメント:

コメントを投稿