*SJE2015 ex09 [#o38e5fce] **課題A [#t6bddda4] 手書き数字を最短距離法で識別してみよう. ***MNISTのデータを入手する [#t1dd5fdb] MNIST handwritten digit database http://yann.lecun.com/exdb/mnist/ の Four files are available on this site の所の4つのファイルを手元にダウンロードしよう(ブラウザ右クリックして「リンク先を別名で保存」等).拡張子 .gz でわかるように,これらのファイルは gzip で圧縮されている.gunzip で伸長しよう.やり方は自分で調べてください. ***MNISTのデータを扱うプログラムを動かしてみる [#wa970c92] https://gist.github.com/takatakamanbou/35d12aaa81b91d8d7e2c から mnist.py と mnistimage.py を手元にダウンロードして,''それぞれ''実行してみよう.この課題では,これらのプログラムの詳細について理解することは求めていません. これらのプログラムでは,カレントディレクトリ中に mnist というディレクトリを作ってその中に MNIST の4つのファイルが置いてあると想定している.置き場所が違う場合は mnist = MNIST( pathMNIST = './mnist' ) 等の pathMNIST 引数を書き換えてください.これらのプログラムとMNISTのデータファイルが同じディレクトリ中にある場合は,引数 pathMNIST を指定しないで mnist = MNIST( ) とすればok.その仕組みについて理解することは課題ではありませんが,興味あるひとは「キーワード引数」で調べたらよいでしょう. ***MNISTの最短距離法による識別 [#h7becfcf] mnist.py を利用して,その3同様の方法で10クラス手書き数字識別のプログラムを書こう.ただし, mnist.py を利用して,最短距離法で10クラス手書き数字識別のプログラムを書こう.ただし, - training data を使ってクラス毎の平均を計算 -- 課題とはしないが,クラス毎の平均を画像として眺めてみるのも面白いかも - trianing data を識別したときの誤識別率を計算する.たとえばデータ数が100個で正解数が95個なら誤識別率は5%. - test data を識別したときの誤識別率を計算する.平均は,training data から求めたものを使うんですよ(為念). -- 課題とはしないが,混同行列(confusion matrix)を求めると,どの数字とどの数字を間違えやすいかがわかって面白いかも.クラス数xクラス数の行列で,(i,j)要素は,「正解はi番目のクラスなのに識別結果はj番目のクラスだった」ものの数.この行列の対角要素の和をデータ数で割ったものが正識別率となる.