SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

機械学習(ニューラルネットワーク)の性能をはかる分類性能評価指標の見方を整理する

f:id:arakan_no_boku:20190707151819j:plain

目次

ニューラルネットワークモデルの分類性能指標

機械学習で「十分な精度で学習できているかどうか」を判定する指標には多くの種類があります。

こちらで網羅的にまとめてもらっているサイトもありますが、

www.procrasist.com

とりあえず、SONYの「Neural Network Console」の結果画面で使われている基本的な分類性能評価指標の意味を理解できるようになっておこうと思います。

 

分類性能指標の意味を理解するための前提知識

残念ながら、ここからの話は、ちょっとだけ数学っぽくなります。

実は分類性能評価指標の整理は、以下の言葉をつかわないと話がすすめられません。

  • 調和平均
  • TP・FP・FN・TN

です。

上記を先に整理します。 

前提知識:調和平均

調和平均も「平均」です。

でも、一般的な平均(算術平均)とは違います。

算術平均は値そのものの合計値を個数等で割って求めますが、調和平均は2つの値の比で表す数値の平均をとって求めます。

toukeigaku-jouhou.info

上記のサイトから引用すると。f:id:arakan_no_boku:20191212184806p:plain

調べてみると。

時速の計算に使われる平均の求め方なので、意外とお馴染みだったりします。

これは、F-Measureという指標で使われます。 

前提知識:TP・FP・FN・TN

それぞれ以下の略です。

  • TP=True Positive
  • FP= False Positive
  • FN= False Negative
  • TP= True Negative

これはつまり。

  • Positive=これが正解だと予測した
  • Negative=これは不正解だと予測した

だと考えれば、

  • TP=Positiveだと予測して正解した
  • FP=Positiveだと予測したけど間違った
  • FN=Negativeだと予測したけど間違った
  • TN=Negativeだと予測して正解だった

 という状態を表します。

当然ですが。

分類の結果は必ず、この4つの状態のどれかとなります。

なので、例えば。

TP+FP+FN+TNは「評価対象全体の個数」になります。

TP+FNは、

  • Positiveと判断して正解だった数(TP)
  • Negativeと判断して間違った数(TF)

の合計なので、結局「Positiveと判断されるべきすべての数」になります。

TP+FPは、

  • Positiveと判断して正解だった数(TP)
  • 間違った数(FP)

の合計なので、「分類でPositiveと判断された全体の数」になります。

これらが、各指標の計算に使われます。

Neural Network Consoleの評価結果画面

SONYの「Neural Network Console」で評価結果を確認できる「Confusion Matrix」はこんな感じです。

f:id:arakan_no_boku:20190707152840p:plain

こういう風に分類結果をまとめた表を、混同行列(Confusion Matrix)といいますす。

ここにでてくる指標は以下の4つです。

  • Accuracy
  • Precision
  • ReCall
  • F-Measure

 上記の4つの指標について、ざっくりとみていきます。

分類性能評価指標:Accuracy

日本語で言うと正答率です。

計算式は

(TP+TN)/(TP+FP+FN+TN)

です。

TP+TNは「正解した数全体」なので、「全体の中の正解だったものの比率」です。

簡単にすませるなら、これだけ計算する時も多いですし、ネットとかのサンプルとかでも、そうなっているものがあるくらい、代表的な指標です。

分類性能評価指標:Precision

日本語では「適合率」です。

Positiveに対する適合率と、Negativeに対する適合率の2種類が定義可能で、それぞれの計算式は以下になります。

TP /(TP+FP)

または

TN  /  (TN+FN)

前者は「Positiveと判断した中での正解率」です。

後者は「Negativeと判断した中での正解率」です。

でも、Neural Network ConsoleのConfusion Matrixでは「Positive=正解と同じラベルだと判断して正解した数」に対する「適合率」のみが計算されてます。

実際の例で検算してみると

f:id:arakan_no_boku:20190708002954p:plain

Y' つまり、分類の予測結果の縦列で計算しているのがわかります。

Y'=0の例でいけば。

正解(y)が0の時に0と予測して正解した数(TP)と、正解(y)が1の時に[0」と予測(つまりNegativeと判断)して正解した数(TN)が縦に並んでいると読めるので、以下で計算できます。

235 / (235 + 8)  = 0.9670781893004
分類性能評価指標:ReCall 

日本語だと再現率です。

これもPositive・Negativeごとの計算ができますが、Neural Network ConsoleのConfusion Matrixでは、Positive分だけなので、そちらの計算式のみ。

TP / (TP + FN)

 Positiveと判定して正解したものと、Negativeと判断して間違ったものの中での、正解したものの比率です。

こちらの、今回のサンプルでみてみると。

f:id:arakan_no_boku:20190708094321p:plain

y’は判定結果です。

上段を例にすると、y=0が正解の場合に、y'=0と判断(つまりPositiveと判断)して正解だった数(TP=235)、Y'=1と判断(つまりNegativeと判断)して不正解だった数(FN=15)ですから。</p

235 / (235 + 15)  = 0.94

 となります。

分類性能評価指標:F-Measure

日本語で言えば「F値」です。

F値は「Precision」と「Recall」の平均(調和平均)です。

計算式は以下です。

2 /  ((1 / Precision) + ( 1 / Recall))

今回の例にあてはめて検算してみます。

f:id:arakan_no_boku:20190708101320p:plain

Neural Network ConsoleのConfusion Matrixでは、1列目と1行目、2列目と2行目・・みたいに対応づけして計算しているようです。

前者は。

 2 / (( 1 / 0.9670) + ( 1/ 0.94)) = 0.9533088621

後者が

2 / (( 1 / 0.9416) + ( 1/ 0.968)) = 0.9546175115

とですから、その理解であってるみたいです。 

分類性能指標を使った結果判断事例 

上記の指標を使って、結果を判断する例をやってみます。

例えば・・。

工場で「正常(出荷OK)」と欠陥(出荷NG)」を判定するものとします。

そのためにモデルを作って学習させて、実際の製品のデータを使って、モデルが適切にできていることをテストしてみたというケースの場合には。

各指標は以下のような意味を持ちます。

Accuracy 正常か欠陥のいずれかを、どのくらい正しく判定できたか 
Precision(正常) 正常と判定したものが、どのくらい正確なのか?
Precision(欠陥) 欠陥と判定したものが、どのくらい正確なのか?
Recall(正常) 正常と判定すべきものを、どのくらい見逃さずに拾えているか?
Recall(欠陥) 欠陥と判定すべきものを、どのくらい見逃さずに拾えているか?

わかりやすいのは「Accuracy」です。

これが例えば99.9%です・・とか言われると、かなり良い精度だからOKじゃないかといいたくなります。

でも、それだけでは不十分です。

なぜかというと。

上記の表の「Accuracy」以外をを以下のように読み替えてみると

  • 正常または欠陥と判定したものが、どのくらい正確なのか?(Precision)
  • 正常または欠陥と判定すべきものを、どのくらい見逃さずに拾えたか?(ReCall)

になるからです。

欠陥商品を見逃さないのが、出荷判定で最も大切なことですから、ここでは、ReCallが一番重要な指標なので、たとえ全体の正答率が落ちたとしても、ReCallを完璧に近づけるようにチューニングしていくのが、正しい方針になります。

このように、何を目的とするかで、重要な指標は変わってきます。

だから、いろいろな指標があるわけですね。 

分類性能指標を使った改善対策検討事例 

指標を使って、改善対策を検討する例も続けてやってみます。

前段の例の続きです。

欠陥のRecallの値が低い。

これは「欠陥と判定する確度のしきい値が高すぎる」ということです。

だから、「欠陥と判定する確度のしきい値を下げて、見落としを少なくする」方向にモデルをチューニングすることになります。

すると当然、「今まで欠陥と判定されなかったものが欠陥と判定される」ようになりますから、欠陥に対する正確度を示すPrecisionの値は下がる可能性があります。

このへんを調整しながら

  • その辺の折り合いをどうつけるのか?
  • 合格基準をどのあたりに設定するのがベストなのか?

という検討をします。

その時に参考にするのが、2つの指標の平均(調和平均)である「F-Measure(F値)」ということになります。

指標のうち、欠陥(Negative)のPrecisionとRecallの値は、Neural Network ConsoleのConfusion Matrixにはありません。

現状、手計算してやる必要があります。

以上、分類性能評価で基本的な指標を、SONYの「Neural Network Console」の「Confusion Matrix」を参考にして整理してみました。

ではでは。