MNISTデータを機械学習する

投稿者: | 2019年1月22日

手書き文字の豊富なデータとしてMNISTデータがありますが、今回はMNISTデータを機械学習し、文字を予測してみたいと思います。

 

アルゴリズムの選定

使用するアルゴリズムは、scikit-learnのアルゴリズム・チートシートに則って選択しました。
http://scikit-learn.org/stable/tutorial/machine_learning_map

MNISTはサンプル数が10万以下なので、”LinearSVC”(サポートベクターマシンの一種)をアルゴリズムとして使用してみます。

 

LinearSVCでの実行

LinearSVCを使って書いてみたコードがこちら。fit と predict するだけのシンプルなものです。

 

ですがここで得られた正答率は僅か 0.8498。正答率が高いとは言えません。

 

チューニングの方法は多々あると思いますが、アルゴリズムの選択を見直してみます。

KNeighbors Classifierでの実行

先ほど使用したものと同じチートシートから、LinearSCVの後の”NOT WORKING”に進み、行き着いた”KNeighbors Classifier”(K近傍法)を試してみることにします。

 

LinearSVCの部分をKNeighborsClassifierに置換して再度実行します。こちらは私の環境で実行に30分程度かかりました。

 

今度は正答率が0.9688にまで向上しました。

 

学習結果の利用

ここで得られた学習結果を保存します。

 

保存した学習結果をロードして、手書きの文字を読み込ませてみます。

3.png

9.png

 

以下は”9.png”を読み込ませる例。

 

“3”も”9″も正しく出力されました。

 

但し線が細いと正答値が得られないこともあり、まだまだ改良の余地がありそうです。

 

 

カテゴリー: AI