前回は、機械学習のクラス分類精度を評価するために、まず混同行列 (Confusion matrix)についてまとめました。
Python/scikit-learn/分類精度を評価する際に使われる混同行列 (Confusion matrix)について - データサイエンティストへの修行日記
今回は、混同行列の値TP,FP,FN,TNを使った指標についてまとめていきたいと思います。
あらためて、混同行列のテーブルを見ていきます。
前回、以下のようにパターンが存在することを示しました。
パターン1:正答と予測して、実際正答だった場合
パターン2:正答と予測して、実際誤答だった場合
パターン3:誤答と予測して、実際正答だった場合
パターン4:誤答と予測して、実際誤答だった場合
混同行列(Confusion matrix)では、それぞれのパターンを、以下のように表現しています。
パターン1:真陽性: TP (True-Positive)
パターン2:偽陽性: FP (False-Positive)
パターン3:偽陰性: FN (False-Negative)
パターン4:真陰性: TN (True-Negative)
それぞれの頭文字の意味は、以下の通りです。
T(True, 真):予測と実際が一致している状態
F(False, 偽):予測と実際が一致していない状態
P(Positive, 陽):正答が予測された状態
N(Negative, 陰):誤答が予測された状態
これらのパターンを用いて、精度を評価するための指標があります。
今回は、主に4つの以下をとりあげます。
- 正解率 (Accuracy)
- 適合率 (Precision) ※精度とも言う
- 検出率 (Recall)
- F値 (f-score)
それぞれの指標の定義は、以下の通りです。
正解率 (Accuracy) = TP+TN / 全体
→全体のうち、予測通り正誤分類できた割合
真陽性: TP (True-Positive)
真陰性: TN (True-Negative)
適合率 (Precision) = TP / (TP + FP)
→予測が正答だった中で、予測通り正答分類できた割合
真陽性: TP (True-Positive)
偽陽性: FP (False-Positive)
検出率 (Recall) = TP / (TP + FN)
→実際に正答だった中で、予測も正答だった割合
真陽性: TP (True-Positive)
偽陰性: FN (False-Negative)
F値 (f-score) = 適合率と検出率の調和平均
→ 適合率と検出率の調和平均を求めて、極端に振れないようにする値です。
F1 score - Wikipedia
以上が主な分類精度の評価指標となります。
それぞれの実装は、scikit-learnでメソッドになっていますので、以下で実装例が確認できます。
- 正解率 (Accuracy) : sklearn.metrics.accuracy_score
- 適合率 (Precision) : sklearn.metrics.precision_score
- 検出率 (Recall) : sklearn.metrics.recall_score
- F値 (f-score) : sklearn.metrics.f1_score
API Reference — scikit-learn 0.19.1 documentation
Classification metrics
また、上記のうち、適合率・検出率・F値をまとめて表示する
sklearn.metrics.classification_report
が定義されていますので、便利です。
#sklearn.metrics.classification_report from sklearn.metrics import classification_report y_true = [0, 1, 2, 2, 2] y_pred = [0, 0, 2, 2, 1] target_names = ['class 0', 'class 1', 'class 2'] print(classification_report(y_true, y_pred, target_names=target_names))
実行結果 precision recall f1-score support class 0 0.50 1.00 0.67 1 class 1 0.00 0.00 0.00 1 class 2 1.00 0.67 0.80 3 avg / total 0.70 0.60 0.61 5
以上で、主な分類精度の評価指標についてまとめました。