手書き数字の認識 (3) -- MNISTの最近傍法による識別 --
前回の識別法では,クラス毎に1つの見本(プロトタイプ)を用意して,テストデータを,最も近いプロトタイプのクラスに分類していた.これを一般化すれば,1つのクラスに複数のプロトタイプを用意して,それらの中からテストデータと最も近いプロトタイプを探して,そのテストデータはそのプロトタイプと同じクラスに分類する,という方法が考えられる.これを最近傍(Nearest Neighbor)法という.
前回の最短距離法は,このNN法で1クラス1プロトタイプとし,かつプロトタイプを学習データの平均とした,という特別な場合に相当する.プロトタイプは,あらかじめ集めておいたクラスラベル既知のデータに何らかの処理を施して作成してもよいが,最も単純でよく使われるのは,「学習データ全部そのまんま使ってまえ」という方法である.
というわけで,MNISTのデータをこのようなNN法で識別するプログラムを作って実験しなさい.プログラムと,テストデータの誤識別率が何%になったかを報告すること(学習データの誤識別率は...調べる必要ないことは明らかですよね).
ただし,上記の説明から想像つくようにNN法は記憶コストも計算コストも大きい.最初のうちは 学習データの最初の1000件だけを用いてテストデータを識別させるようにしてデバグ&動作確認し,それから全部使って実行,という方針でやることをおすすめします.