【Scilab】手書き数字文字認識をしてみた【部分空間法】

公開日: : 最終更新日:2018/08/08 Scilab , ,

Scilab で、機械学習の手法の1つの「部分空間法」を使って手書き数字文字認識をしてみました。

とはいっても、以下のサイトに Scilab のソースコードと手書き文字データがあるので、その通りに実行させてもらいました。

http://web.tuat.ac.jp/~s-hotta/ss2008/

Contents

手書き数字文字データ

手書き数字文字データには、USPSというものを使います。USPSとはアメリカ合衆国郵便公社のことで、おそらく、そこが公開している手書き文字データだと思われます。

データは、以下の4つのファイルに分かれています。

  • test_data.txt -> テストデータを格納した 256 × 2007 の行列
  • test_label.txt -> テストデータのラベルを格納した 2007 × 1 のベクトル(「0」~「9」のいずれかが入る)
  • trai_data.txt -> 学習データを格納した 256 × 7291 の行列
  • trai_label.txt -> 学習データのラベルを格納した 7291 × 1 のベクトル(「0」~「9」のいずれかが入る)

学習データを使って学習をしてモデルを構築して、テストデータで識別の精度を確認します。

プログラムの実行

基本的に、

  • step1.sci
  • step2.sci
  • step3.sci

の3つのステップに分かれていて、それぞれ実行していきます。

ただし、そのままではエラーで実行できなかった箇所があったので記載していきます。

step1.sci を実行

step1.sci では、手書き文字データ(行列になっている)について、直交基底を計算し、各基底による寄与率(固有値)の特性を計算します。

実行方法は、コンソール画面で、step1.sci の置いてあるディレクトリまで移動(cd コマンド)し、以下のコマンドを実行します。

ただし、Scilab の Version 6.x.x を使っていたら、

fscanfMat: ファイル をオープンできません.

のようなエラーが出てしまったので、参照サイトのバージョンと合わせて、「Scilab 4.1.2」をインストールし直したら、無事実行できました。

ちなみに、「Scilab 4.1.2.exe」は、以下からダウンロードしました。

http://www.maizuru-ct.ac.jp/control/kawata/study/book2/book2_page.html

step2.sci を実行

step2.sci では、直交展開したものを可視化します。

step2.sci も同様に以下のコマンドで実行します。

すると、以下のようなエラーが出てしまいます。

imshow(allIMG);
!–error 4
undefined variable : imshow
at line 41 of exec file called by :
exec(‘step2.sci’);

画像を表示するための toolbox がインストールされていなかったのが原因のようなので、インストールします。

以下から、sivp-0.4.3.exe をダウンロードします。

https://sourceforge.net/projects/sivp/files/sivp-win-binary/0.4.3/

無事にインストールできたら、メニューに「toolboxes」が追加されます。

【インストール前】

【インストール後】

toolboxes」->「SIVP-0.4.3」を実行します。

–>mode(-1);
SIVP – Scilab Image and Video Processing Toolbox 0.4.3
shared archive loaded
Link done
shared archive loaded
Link done
shared archive loaded
Link done
shared archive loaded
Link done
shared archive loaded

再度、step2.sci を実行すると、以下のような画像が表示されます。

これは、上段の画像が、対象パターンを表していて、下段が「0」~「9」の各クラスの基底により直交展開し、そのうち寄与率上位 30個 により近似したパターンを表しています。

step3.sci を実行

step3.sci では、文字認識の識別結果を表示します。以下のコマンドで実行します。

「CONF」と入力すれば、混合行列(confusion matrix)を表示できます。

以上が、「部分空間法」を使った手書き数字文字認識でした。

関連記事

【Scilab(サイラボ)】フリーの MATLAB のインストール方法。

Scilab(サイラボ)は、数値計算・数式処理・グラフィック表示に特化したプログラム言語のことです。

記事を読む

無料動画編集ソフト AviUtl で mp4 形式の動画を読み込み・出力する方法【Windows】

今回は、無料動画編集ソフト AviUtl で mp4 形式の動画を読み

【Cubase】イヤホンから音がでないときの対処方法。

Cubase でイヤホンから音がでなくなったときの対処方法のメモです。

【Cubase】特定のトラックを無効にする方法。

今回は、Cubaseで特定のトラックのみを無効にする方法について紹介し

【転移学習】学習済みVGG16 による転移学習を行う方法【PyTorch】

今回は、PyTorch を使って、学習済みのモデル VGG16 を用い

【PyTorch】畳込みニューラルネットワークを構築する方法【CNN】

今回は、PyTorch を使って畳込みニューラルネットワーク(CNN)

→もっと見る

PAGE TOP ↑