機械学習の評価指標にTPとかFNとかRecallとかIoUとかなんとかかんとか。いっつもこんがらがるので自分なりにわかるようにメモ書き!(^^)!
画像処理ばかり扱ってるので、YOLOみたいな物体検出タスクやSemantic Segmentationを想定してます。あしからず(*ノωノ)

TP, TN, FP, FN

それぞれ次の言葉の略

  • TP: True Positive
  • TN: True Negative
  • FP: False Positive
  • FN: False Negative

表で説明すると以下のような感じ

真値が正真値が負
予測が正TPFP
予測が負FNTN

言葉としては、「合ってる(True)/間違ってる(False)」「 正(Positive)/負(Negative)」 という表し方になります。

前半のTrue/ False でその予測結果が正解か間違いか、後半のPositive/ Negative で予測は正か負か

。。。言葉じゃ伝わらなそう((+_+))

図で説明する

こんな風に予測したとする。YOLOとかの物体検出とかSemantic Segmentationみたいなタスクのイメージ。予測してほしい真の結果が赤、予測結果が緑。黒はなんらかの画像(背景)、つまり予測してほしい領域でもなく、予測結果でもない領域。

TP, TN, FP, FNはそれぞれ次のような感じ

正(Positive)と予測した領域(緑)の内、正解(True)である領域(赤と重なってる領域): True Positive

正(Positive)であるといったけど、それは合っている(True)。

(Negative)と予測した領域(緑以外の領域)の内、正解(True)である領域(赤と重なってない領域): True Negative

負(Negative)であるといったけど、それは合っている(True)。

正(Positive)と予測した領域(緑)の内、間違っている(False)である領域(赤と重なってない領域): False Positive

正(Positive)であるといったけど、それは間違ってて(False)本当は負である。

負(Negative)と予測した領域(緑以外の領域)の内、間違っている(False)である領域(赤と重なってる領域):False Negative

負(Negative)であるといったけど、それは間違ってて(False)本当は正である。

Accuracy, Precision, Recall, IoU

画像処理ではaccuracyは殆ど使われませんね。まぁ一応。

Accuracy: 予測領域全体の内の正解の割合

$$Accuracy = \frac{TP+TN}{TP+TN+FP+FN}$$

Accuracyの分母:つまり物体検出のタスクにおいては全領域

この領域の内、

Accuracyの分子:予測結果が正解である領域 ※図が間違ってます!

この領域が示す割合がAccuracy。画像処理タスクではAccuracyを計算しても評価として微妙。真の結果の領域が狭ければAccuracyが高く出てしまう傾向にあるので、その機械学習結果が本当に上手くできているのか不明になってしまう。

Precision: 予測結果が正の領域(緑)の内の正解の割合

$$Precision = \frac{TP}{TP+FP}$$

Precisionの分母:予測結果全体(緑)

この領域の内、

Precisionの分子:TP

この領域が占める割合。

セグメンテーションタスクでは,Precisionが高いと信頼度の高い領域しか選ばれないモデルであると定性的な見方ができる(と思う。)
真の結果が漏れなく選ばれているとは言っていない。(それを見るのはRecall)ほんの少ししか選ばれてなくても、それが真の結果がとマッチするならPrecisionは高く出る。

物体検出タスクでは,予測結果のバウンディングボックスが小さければPrecisionも高くでる傾向にある。真の結果と予測結果がマッチしてるのかよくわからないため、あまり使われているのを見ない。

Recall: 真の結果が正である領域(赤)のうち、正解である領域

$$Recall = \frac{TP}{TP+FN}$$

Recallの分母:真の結果全体(赤)

この領域の内、

Recallの分子:TP

この領域が占める割合。

セグメンテーションタスクでは,Recallが高いと真の結果である領域は殆ど選んでいるモデルであると定性的な見方ができる(と思う)
間違って負の領域を正といってしまう領域(FP)が多いかもしれない。(それを見るのはPrecision)
Precisionが低くてRecallが高いと、間違ってもいいから(FPでもいいから)とにかく真の結果を正とするようなモデルであると言える。

物体検出タスクでは,画像全体を正と予測してしまえばRecallは最大になるので、単純に評価に使うのは。。。

Precision-Recall curveについて

Precision, Recallを同時にみる事でモデルの性格を見ることができる。信頼度によって正か負かを決めるのだが、そのthresholdを低くするか高くするかでPrecision, Recallが変わる。thresholdを動かしてPrecision-Recallのグラフを描く事がよくある。(Precision-Recall curve, 参考

PrecisionもRecallも高いほうが良いので、Precision-Recall curveの面積が大きいほうがモデルの性能が良い。

F値

あと、precision, recallの両方を合わせてみる指標としてF値がある。Precision, Recallの調和平均。

$$F value = \frac{2 \times Recall \times Precision}{Recall + Precision}$$

IoU: 真の結果とのマッチ度

$$IoU=\frac{TP}{TP+FP+FN}$$

IoUの分母:真の結果と予測結果の和集合(赤+緑)

この領域の内、

IoUの分子:真の結果と予測結果の積集合(赤と緑の重なる領域)

この領域が占める割合。

ディープラーニング関係の評価でよく見るやつ。PrecisionとRecallではよくわからなかった予測結果と真の結果の重なり具合(漏れ具合)を評価できる指標。単純に、IoUが高ければよく漏れなく間違いなく予測できていて、低ければ間違い多い。

追記:こんどmAPについても書く(-_-)/~~~ピシー!ピシー!

いつも頭の中でイメージする図を描きました!ごちゃごちゃにならないくなるといいな((+_+))以上です!(^^)!

Categories:

2 Responses

  1. とても参考になりました。
    ただ、Accuraryの説明にあるTP+TNの画像が間違っていると思います。

    • 本当だ、、、確認したら間違ってますね
      ありがとうございます!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA