-Python- 分類器を使った評価

digitsデータの3と8の画像データを分類する分類器をscikit-learnで作るプログラム例を以下に示します.

 
# Import module
import numpy as np
from sklearn import datasets
from sklearn import tree
from sklearn import metrics
 
# load digits data
digits = datasets.load_digits()
 
# Find the positions of 3 and 8 data
flag_3_8 = (digits.target == 3) + (digits.target == 8)
 
# Get 3 and 8 data
images = digits.images[flag_3_8]
labels = digits.target[flag_3_8]
 
# Make data of 3 and 8 one-dimensional
images = images.reshape(images.shape[0], -1)
 
# Generation of classifiers
n_samples = len(flag_3_8[flag_3_8])
train_size = int(n_samples * 3 / 5)
classifir = tree.DecisionTreeClassifier()
classifir.fit(images[:train_size], labels[:train_size])
 
# Performance calculation of classifier
expected = labels[train_size:]
predicted = classifir.predict(images[train_size:])
 

 

print('Accuracy: \n', metrics.accuracy_score(expected, predicted))
 

<プログラムの解説>

  • 8行目のdatasets.load_digits()で手書き数字の画像データを読み込んでいます.
  • 11行目で今回対象となる3と8の画像データ位置を求めています.
  • 21-22行目で3と8の画像ラベルを取り出し,作業領域に保存しています.
  • 26行目で画像データを2次元から1次元データに変換しています.
  • 32行目のtree.DecisionTreeClassifier()で分類器(決定木)を生成しています.
  • 33行目のclassifir.fit()で生成した分類器に学習データを与えて,学習を実施しています.分類器の生成に使用する学習データは,ここでは全体の60%としています(性能評価に使用するテストデータは全体の残りの40%となる).
  • 37行目は正解ラベルとしてテストデータのラベルを取り出しています.
  • 38行目で分類を実行します(テストデータを与えて,分類結果(予測したラベル)を取得する).
  • 40行目は正答率を計算して出力します.scikit-learnではaccuracy_scoreによって正答率を計算することができます.


実行結果は以下のようになります.

Accuracy: 
 0.8811188811188811