【機械学習】 scikit-learn で精度・再現率・F値を算出する方法【Python】

今回は、2クラス分類で Python の scikit-learn を使った評価指標である、精度(Precision)、再現率(Recall)、F値(F-measure)について調べてみました。

混同行列(Confusion matrix)

2クラス分類で、精度や再現率を求めるときに必要になってくるのが、TP、TN、FP、FN という概念です。これらの4つは分類時の結果からいずれかに分けられるのですが、それを表形式で表したのが混同行列(Confusion matrix)になります。

この例では、「same」「diff」の2クラス分類結果を表しています。

2クラス分類では、陽性(Positive)であるクラスを決めないといけません。

今回は「diff」クラスを陽性として扱っています。ちなみに残りのクラスを陰性クラスと呼びます。

scikit-learn で陽性クラスを指定するには、labels で与えます。

[‘same’, ‘diff’] として、後ろに与えたラベルが陽性クラスの扱いになるようです。

そうすると、以下のように4つの分類が割り当てられます。

  • TP(True Positive):陽性(diff)と予測した中で実際に陽性(diff)
  • TN(True Negative):陰性(same)と予測した中で実際に陰性(same)
  • FP(False Positive):陽性(diff)と予測した中で実際は陰性(same)
  • FN(False Negative):陰性(same)と予測した中で実際は陽性(diff)

少し混乱しそうですが、True がつけば 正解 を表して、Positive が 陽性クラス を表しています。

TP、TN、FP、FN の数をそれぞれ取得するには、flatten 関数を使います。

結果は、以下のようになります。

精度(Precision)

精度(Precision)は、適合率や正確性などともいいます。

精度は「識別器が陽性と判断したもののうち、正しく陽性と判断した割合」を表します。

式で書くと「TP/(TP+FP)」となります。

検索エンジンの例でたとえると、「ある検索ワードで検索してヒットした件数のうち、欲しい(正しい)ページの件数」といえます。

scikit-learn では precision_score で精度を算出することができます。

正解ラベルは、テストデータの正解ラベル(same or diff)になります。

今回は Series 型になっています。

予測ラベルは、テストデータについて分類器が予測したラベル(same or diff)になります。

今回は リスト型になっています。

正解ラベルと予測ラベルは、Series型でもリスト型でもどちらでも問題ないようです。

以下のようなエラーがでました。

これは、ラベルデータ(pos_label)がデフォルトでは「1」となっているため、陽性のラベル(diff)を明示する必要があります。

結果は、無事に以下のように出力されました。

再現率(Recall)

再現率(Recall)は、網羅性を表している指標です。

「テストデータの実際に陽性のデータのうち、正しく陽性と判断した割合」を表します。

式で書くと「TP/(TP+FN)」となります。

検索エンジンの例で例えると、「あるワードで検索して、欲しい情報が手に入る件数のうち、実際に正しく得られた件数」といえます。

scikit-learn では recall_score で再現率を算出することができます。

結果は以下のとおり。

F値(F-measure)

F値(F-measure)は、精度と再現率を合わせたものになります。

scikit-learn では f1_score でF値を算出することができます。

結果は以下のとおり。

関連記事

【機械学習】 scikit-learn で不正解データを抽出する方法【Python】

Python の scikit-learn ライブラリを使って機械学習でテストデータを識別(2クラス

記事を読む

【機械学習・手法比較】決定木とナイーブベイズを比較してみた。

同じデータを使って、教師有り機械学習手法の 決定木(Decision Tree)とナイーブベイズ(N

記事を読む

【探索】縦型・横型・反復深化法の探索手法の比較。

探索とは、チェスや将棋や囲碁などのゲームをコンピュータがプレイするときに、どの手を指すかを決定するの

記事を読む

機械学習の手法のまとめ。

機械学習は、「与えられた入出力事例をモデル化する行為」のことで、ディープラーニングなどで注目を集めて

記事を読む

【機械学習】パーセプトロン(Perceptron)について。

パーセプトロンは、教師あり学習の中でも、入出力モデルベース(eager learning:働き者の学

記事を読む

【Weka】フリーの機械学習ソフトをインストールする方法。

Weka は、GUIで使えるフリーの機械学習ソフトです。 https://ja.wikiped

記事を読む

【探索】ダイクストラ法・最良優先探索・Aアルゴリズムの比較。

縦型探索や横型探索では、機械的に順序を付け、最小ステップでゴールを目指します。 つまり、

記事を読む

【深層学習】 TensorFlow と Keras をインストールする【Python】

今回は、Google Colaboratory 上で、深層学習(DeepLearning)フレームワ

記事を読む

【Weka】ARFF 形式から CSV 形式に簡単に変換する方法。

フリーのデータマイニングツールである WEKA では、ARFF 形式と CSV 形式のデータを読み込

記事を読む

【Weka】アソシエーション・ルール(association rule)【機械学習】

フリーの機械学習ツール Weka でアソシエーション・ルール(association rule)を使

記事を読む

【TensorFlow】GPUを認識しない時の対処方法【Python】

TensorFlow で GPU を認識させようとしたときにハマってし

【耳コピ】音楽ファイルを楽器ごとに分離する方法【Spleeter:フリー】

今回は、mp3 などの音楽ファイルをボーカル、ベース、ドラムなどの楽器

【Chainer】手書き数字認識をしてみた【Deep Learning】

Chainerを用いて、ニューラルネットワークを構築し、手書き数字認識

【Spyder】引数のあるスクリプトを実行する方法。

Python の統合開発環境(IDE)である Spyder では、簡単

【Anaconda】Prompt 上で Git コマンドを実行する方法。

Anaconda のコマンドプロンプト(Anaconda Prompt

→もっと見る

PAGE TOP ↑