改めて機械学習の基本から学び中です。今回は機械学習の基本である代表的手法である分類問題・回帰問題・クラスタリングのうち分類について書いていこうと思います。
分類問題とは与えられたデータをその性質に合わせて分類する課題のことです。例えば果物というデータがあり学習データとして色、大きさの属性および分類が与えられたデータが
あるとします。色:赤、大きさ:8cm、分類:リンゴといった具合です。色:赤、大きさ:2cm、分類:イチゴ、色:黄色、大きさ:5cm、分類:レモンなど。
そこに未知のデータがきたときにこれまでのデータから何であるのかを適切に分類する手法です。
では早速いつもお世話になっている手書き文字画像を用いてやっていきましょう。
全体の60%のデータを学習データ、残りをテストデータとして手書き文字の3と8を分類する分類器を作っていきます。
ソースは以下のような感じです
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import numpy as np from sklearn import datasets from sklearn import tree from sklearn import metrics # 手書き数字データの読み込み digits = datasets.load_digits() # 3 と 8 のデータ位置を求める flag_3_8 = (digits.target == 3) + (digits.target == 8) # 3 と 8 のデータを取得 images = digits.images[flag_3_8] labels = digits.target[flag_3_8] # 3 と 8 の画像データを1次元化 images = images.reshape(images.shape[0], -1) # 分類器の生成 n_samples = len(flag_3_8[flag_3_8]) train_size = int(n_samples * 3 / 5) classifier = tree.DecisionTreeClassifier(max_depth=3) classifier.fit(images[:train_size], labels[:train_size]) expected = labels[train_size:] predicted = classifier.predict(images[train_size:]) print('Accuracy:\n', metrics.accuracy_score(expected, predicted)) print('\nConfusion matrix:\n', metrics.confusion_matrix(expected, predicted)) print('\nPrecision:\n', metrics.precision_score(expected, predicted, pos_label=3)) print('\nRecall:\n', metrics.recall_score(expected, predicted, pos_label=3)) print('\nF-measure:\n', metrics.f1_score(expected, predicted, pos_label=3)) |
22行目で決定木というアルゴリズム使って分類器を作成しています。これについてはpart2で記載いたします
このソースを実行してみると筆者が実行したときは
Accuracy: 0.8741258741258742
Confusion matrix: [[59 16]
[ 2 66]]
Precision: 0.9672131147540983
Recall: 0.7866666666666666
F-measure: 0.8676470588235293
という結果になりました。上から正答率、混同配列、正常適合率、正常再現率、正常F値と言われるものになります。
一般的には正答率を見ることで分類器の性能を見ることは可能です。今回の場合3と8のサンプルが混同行列を見るとほとんど
同じ数なので問題ありません。しかしあるサンプルの数が極端に少ない場合正答率だけで判断できなくなります。
例えばある製品について正常か欠陥かを調べる分類器を作るとします。総数:16100、正常:15700、欠陥:400だったとします。
ある分類器を通して調べた結果、実際正常で正常判定されたものが15600、異常判定されたものが100、実際異常なもので正常判定されたものが150、異常判定されたものが250だったとします。
正解率は98.4%となりよいように思えますし、また正常適合率:99.0%、正常再現率:99.4%、正常F値:99.2%で文句ないように思えます。
しかし、異常適合率:71.4%、異常再現率:62.5%、異常F値:66.7%となってしまいます。欠陥商品のうち3割程度は誤検出され、4割程度は見落としてしまっています。実際の工場で欠陥製品を見落としてしまうことは大きな問題です。
このように正答率だけでは誤解しそうな場合でもそのほかの値を見ることで適した分類器であるかを見ることができるのです。
今回は以上になります。次は分類器について記載していければと思います。