MNISTデータセット

投稿者: | 2018-04-12

MNIST[1]Modified National Institute of Standards and Technologyの略で「エムニスト」と呼びます。はDeep Learningや機械学習のチュートリアルで頻繁に登場するデータセットで、28×28ピクセルのグレースケール(8bit)の手書き数字(0-9)画像が

  • 学習用: 6万枚
  • 評価用: 1万枚

収録されています。元々はNISTと呼ばれる手書き文字を集めたデータセットから数字データを抜き出したものになっています。

入手方法

Yann LeCun先生の「THE MNIST DATABASE of handwritten digits」が公式ページで学習用/評価用データと正解ラベルが提供されています。ただ、バイナリ形式で取扱が煩雑なのでPythonであればscikit-learnのdatasets.fetch_mldata関数を使うのがオススメです。

from sklearn.datasets import fetch_mldata
mnist = fetch_mldata('MNIST original', data_home='./mnist_data/')

とすると初回実行時[2]“HTTP Error 500″が出ることがありますが私の環境では何度か実行すると動きました。はWEBからデータを落とすので少し時間がかかりますが、データはdata_homeで指定したディレクトリに保存されるため2回目以降はすぐにロードされます。

(2018/08/06追記)mldata.orgがダウンしておりfetch_mldataを実行すると

HTTPError: HTTP Error 404: Dataset ‘mnist-original’ not found on mldata.org.

とエラーがでます。この場合はgithubから

$ mkdir -p ./mnist_data/mldata
$ cd ./mnist_data/mldata
$ wget https://github.com/amplab/datascience-sp14/raw/master/lab7/mldata/mnist-original.mat

とmldata.orgで公開されていたデータを落としてくると動かすことができます。

mnist.dataに784(=28×28)次元のベクトルが70,000個、mnist.targetに正解ラベルのリストが格納されています。一つ注意しないといけないのは学習データと評価データがまとめれているため学習用データと評価用データはtrain_test_split関数などで自分で分割する必要があります。

有名手法での精度

公式ページには有名アルゴリズム(K-NN, SVM, CNNなど)でのエラー率もまとめられており

  • K-NN with non-linear deformation (P2DHMDM): 0.52%
  • Virtual SVM, deg-9 poly, 2-pixel jittered: 0.56%
  • committee of 35 conv. net: 0.23%

とK-NNやSVMでもかなり高精度が出せるデータセットですね。

蛇足ですが、あまりにチュートリアルに登場することが多く飽きてしまったためか「notMNIST」というアルファベット10文字(A-J)の様々なフォントで出力したデータセットも作られています。CNNを使って精度97%程度を達成したと報告されているのでMNISTと比べるとずっと難しいデータセットになっているようです。

脚注

脚注
1 Modified National Institute of Standards and Technologyの略で「エムニスト」と呼びます。
2 “HTTP Error 500″が出ることがありますが私の環境では何度か実行すると動きました。

スポンサーリンク


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です