【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 コマンド)し、以下のコマンドを実行します。
1 |
--> exec('step1.sci'); |
ただし、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 も同様に以下のコマンドで実行します。
1 |
--> exec('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 では、文字認識の識別結果を表示します。以下のコマンドで実行します。
1 |
--> exec('step3.sci'); |
「CONF」と入力すれば、混合行列(confusion matrix)を表示できます。
以上が、「部分空間法」を使った手書き数字文字認識でした。
関連記事
-
【Scilab(サイラボ)】フリーの MATLAB のインストール方法。
Scilab(サイラボ)は、数値計算・数式処理・グラフィック表示に特化したプログラム言語のことです。