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

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

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

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

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

手書き数字文字データ

手書き数字文字データには、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(サイラボ)は、数値計算・数式処理・グラフィック表示に特化したプログラム言語のことです。

記事を読む

【Python】 DataFrame の特定の列で出現回数をカウントして降順でソートする方法。

Python で DataFrame 型の特定の列を指定して、対象列の

【テキストマイニング】 Amebaブログからデータ取得するための準備。

テキストマイニングを行うために、Ameba ブログ(アメブロ)のデータ

【Linux】 ローカルに Python をインストールする方法。

今回は、Linux サーバに、root 権限なしで、ローカルに Pyt

【Linux】 ファイルの重複した行を削除して、ファイルを結合する方法。

大容量の CSV ファイルの重複した行を削除して、ファイルを結合する処

【画像認識】 Google画像検索結果を取得する方法 【google image download】

今回は、深層学習(DeepLearning)で画像認識をするための画像

→もっと見る

PAGE TOP ↑