【機械学習】 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値を算出することができます。

結果は以下のとおり。

関連記事

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

今回は、PyTorch を使って畳込みニューラルネットワーク(CNN)を構築する方法について紹介しま

記事を読む

【画像認識】 Google画像検索結果を取得する方法 【google image download】

今回は、深層学習(DeepLearning)で画像認識をするための画像データの収集を、Google画

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

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

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

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

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

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

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

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

今回は、PyTorch を使って、ニューラルネットワーク(NN)を構築

→もっと見る

PAGE TOP ↑