No description, website, or topics provided.
Perl
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
MNIST.pm
README
bagging_nn.pl
conv_bin.pl
conv_csv.pl
conv_image.pl
simhash_nn.pl

README

MNIST idxフォーマット変換ツールとちょっとしたテスト

MNIST: http://yann.lecun.com/exdb/mnist/

* 必要
train-images-idx3-ubyte.gz:  training set images (9912422 bytes)
train-labels-idx1-ubyte.gz:  training set labels (28881 bytes)
t10k-images-idx3-ubyte.gz:   test set images (1648877 bytes)
t10k-labels-idx1-ubyte.gz:   test set labels (4542 bytes) 
File::Binary
(gzは展開する)

* オプション
Imager (conv_image.pl用)

* MNIST.pm
MNIST::load そのままロード
MNIST::load_half 半分のサイズでロード。
conv_*.plはload_halfしてるので、そのままがよければ書き換える。
読み込んだ構造はconv_csv.pl等参照。

* 変換スクリプト
** conv_csv.pl
CSVに変換。1行1データ。先頭要素がラベル。以降がベクトル。

** conv_image.pl
テキトウな画像に変換。

** conv_bin.pl
PerlのStorable。

* MNISTテスト
** bagging_nn.pl [95.76% (9576/10000), M=200,K=5]
perl conv_bin.pl
perl bagging_nn.pl

各数字をM個ずつランダムにサンプリングして最近傍決定則によりラベルを推定。
何度か繰り返し最初にK回推定されたラベル返す。
距離はユークリッド^2。最近傍だけ求めればいいので計算を途中で打ち切るために4分割して真ん中のほうから計算。
M=50,K=3くらいだとだいぶ速くなるけど精度は落ちる。

** simhash_nn.pl [91.07% (9107/10000)]
perl conv_bin.pl
perl simhash_nn.pl

コサイン類似度のLSHによる近似最近傍探索でラベルを推定。
このデータにコサイン類似度は向いてないと思うので…