Python, scikit-learn

【scikit-learn】クラス別の分類結果を取得する【classification_report】


分類予測の結果を評価するに当たって、クラス別の分類スコアの算出は需要な工程です。

本記事では、scikit-learnのclassification_reportメソッドを用いてクラス別の分類結果を取得する方法について書きます。

実際にプログラムを作成してみる

それでは、実際にクラス別の分類結果を取得するプログラムを作成してみます。

プログラム作成の手順

ここでは、以下の手順で処理を実装します。

  1. ダミーの正解ラベル、及び予測結果を用意する
  2. 1で用意したものを基にクラス別の分類スコアを算出する

クラス別スコアの算出に利用するメソッド

scikit-learnには、クラス別の分類結果を取得するclassification_reportメソッドが存在するため、今回はこれを利用します。

classification_reportメソッドの引数、及び戻り値はそれぞれ以下の通りです。

  • 引数:正解ラベル、予測結果、クラス名(いずれも1次元配列)
  • 戻り値:クラス別の分類スコア(1次元配列)

なお、classification_reportメソッドはsklearn.metricsからインポートします。

実装例

上記の手順に従ってプログラムを作成します。使用する言語はPythonです。

from sklearn.metrics import classification_report

if __name__ == "__main__":

    y_true = [0, 0, 1, 1, 2, 2]
    y_pred = [0, 0, 0, 1, 1, 2]
    target_names = ['class0', 'class1', 'class2']

    report = classification_report(y_true, y_pred, target_names=target_names)
    print(report)

このプログラムを実行すると以下の出力結果が得られます。

             precision    recall  f1-score   support

     class0       0.67      1.00      0.80         2
     class1       0.50      0.50      0.50         2
     class2       1.00      0.50      0.67         2

avg / total       0.72      0.67      0.66         6

なお、上記のprecisionは精度、recallは感度、f1-scoreはF値を指します。