post Image
【機械学習】手書き文字データで分類器のパフォーマンスチェックをしてみる

こんにちは。
林@アイエンターです。

前回のブログでは、scikit-learnのk平均法アルゴリズムとOpenCVを用いて、画像の減色処理を行いました。

今回は、scikit-learnに用意されている、手書き文字データのサンプルを用いて
複数の分類器の簡単なパフォーマンスチェックを行ってみます。

手書き文字データの読み込み

scikit-learnのdatasetsには、手書き文字データのサンプルが用意されていますので、それを読み込みます。
shot1.png

説明変数Xが0〜9のイメージデータの配列、目的変数Yが各イメージに対応する0〜9の数字の配列になっています。

Xデータの先頭データはこのような64個の数値配列になっています。
shot2.png

実際はこの配列は、画像としては8×8のサイズのイメージデータなので、
配列を加工して、先頭の20個のデータを表示してみます。
イメージはグレースケールのピクセル画像で表示します。

shot3.png

K-fold交差検証

今回、分類器の精度を「K-fold交差検証」を用いて評価します。
「K-fold交差検証」とは、標本群をK個のブロックに分割して、K-1個のブロックを訓練データ、残りの1ブロックをテストデータとして評価します。
また、テスト用のブロックも1番目からK番目に切り替えながら評価していきます。
以下のようなイメージです。
shot4.png
scikit-learnではcross_validationにK-foldが用意されています。
今回は、標本データを10分割するK-foldを用意します。
shot5.png

評価する分類器

以下の分類器をパフォーマンスチェックします。
LogisticRegressionロジスティック回帰
GaussianNBナイーブベイズ
SVCサポートベクターマシン
DecisionTreeClassifier決定木
RandomForestClassifierランダムフォレスト
AdaBoostClassifierAdaBoost
KNeighborsClassifierK近傍法

また、SVCについては、カーネルの種類を「rbf(ガウシアンカーネル)」「linear(線形カーネル)」「poly(多項式カーネル)」の3種類で確認します。

以下のような分類器インスタンスと名前を要素とする配列を用意します。
shot6.png

パフォーマンスチェックについて

パフォーマンスチェックは、各分類器の精度と解析スピードで評価します。
精度については、K-foldでの10回の予測テストを、sklearn.metricsのaccuracy_scoreで、スコアリングして平均を取ります。
また、解析スピードは、学習(fit)から予測(predict)にかかる時間を計測して
平均を取ります。
shot7.png

以下のような結果が出力されました。
shot8.png

精度的に良い数値が出ているのが、3種類カーネルの「SVC」(サポートベクターマシン)と「KNeighborsClassifier」(K-近傍法)の分類器です。

最も高い精度は、SVC-rbfですが、解析時間もそれなりにかかっているようです。
KNeighborsClassifierは精度的には2番目の数値ですが、解析スピードはSVC-rbfの4倍のスピードが出ています。

精度とスピードを総合的に評価すると、K-近傍法(KNeighborsClassifier)の分類器が、このテストでは最も高いパフォーマンスの分類器と言えるかと思います。

今回のお話はここまで!


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。