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

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

Contents

混同行列(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値を算出することができます。

結果は以下のとおり。

関連記事

【Weka】欠損データを自動的に補完するフィルタを使ってみた。

機械学習で用いるデータについてです。データは完璧なことに越したことはないが、通常は、ある属性の値が入

記事を読む

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

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

記事を読む

【PyTorch】GPUのメモリ不足でエラーになったときの対処方法。

PyTorch で深層学習していて、 GPUのメモリ不足でエラーが出てしまったので、対処方法のメモで

記事を読む

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

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

記事を読む

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

Chainerを用いて、ニューラルネットワークを構築し、手書き数字認識を行ったときのメモです。

記事を読む

【PyTorch】ニューラルネットワークを構築する方法【NN】

今回は、PyTorch を使って、ニューラルネットワーク(NN)を構築したときのメモです。 フ

記事を読む

【転移学習】学習済みVGG16 による転移学習を行う方法【PyTorch】

今回は、PyTorch を使って、学習済みのモデル VGG16 を用いて転移学習をしてみました。

記事を読む

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

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

記事を読む

【Fashion-MNIST】ファッションアイテムのデータセットを使ってみた【TensorFlow】

今回は、機械学習用に公開されているデータセットの1つである「Fashion-MNIST」について紹介

記事を読む

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

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

記事を読む

無料動画編集ソフト AviUtl で mp4 形式の動画を読み込み・出力する方法【Windows】

今回は、無料動画編集ソフト AviUtl で mp4 形式の動画を読み

【Cubase】イヤホンから音がでないときの対処方法。

Cubase でイヤホンから音がでなくなったときの対処方法のメモです。

【Cubase】特定のトラックを無効にする方法。

今回は、Cubaseで特定のトラックのみを無効にする方法について紹介し

【転移学習】学習済みVGG16 による転移学習を行う方法【PyTorch】

今回は、PyTorch を使って、学習済みのモデル VGG16 を用い

【PyTorch】畳込みニューラルネットワークを構築する方法【CNN】

今回は、PyTorch を使って畳込みニューラルネットワーク(CNN)

→もっと見る

PAGE TOP ↑