web-dev-qa-db-ja.com

マルチクラスマルチラベル分類の精度/再現率

マルチクラスのマルチラベル分類、つまり3つ以上のラベルがあり、各インスタンスが複数のラベルを持つことができる分類の精度とリコールメジャーを計算する方法を知りたいですか?

28
MaVe

マルチラベル分類の場合、2つの方法があります。まず、以下を検討します。

例に基づく

指標はデータポイントごとに計算されます。予測されたラベルごとに、その唯一のスコアが計算され、これらのスコアがすべてのデータポイントで集計されます。

  • 精度= $\frac{1}{n}\sum_{i=1}^{n}\frac{|Y_{i}\cap h(x_{i})|}{|h(x_{i})|}$ 、予測のどれだけが正しいかの比率。分子は、予測ベクトル内のグラウンドトゥルースと共通するラベルの数を見つけ、比率が計算して、実際にグラウンドトゥルース内にある予測トゥルーラベルの数を計算します。
  • リコール= $\frac{1}{n}\sum_{i=1}^{n}\frac{|Y_{i}\cap h(x_{i})|}{|Y_{i}|}$ 、予測された実際のラベルの数の比率。分子は、予測ベクトル内のグラウンドトゥルースと共通するラベルの数(上記のように)を検出し、実際のラベルの数に対する比率を検出します。したがって、予測された実際のラベルの割合を取得します。

他の指標もあります。

ラベルベース

ここでは、ラベルごとに処理が行われます。ラベルごとに指標(精度、再現率など)が計算され、次にこれらのラベルごとの指標が集計されます。したがって、この場合、バイナリ分類の場合と同様に(各ラベルにはバイナリ割り当てがあるため)、データセット全体で各ラベルの精度/再現率を計算し、それを集計します。

簡単な方法は、一般的なフォームを提示することです。

これは、標準のマルチクラスに相当するものの単なる拡張です。

  • マクロ平均 $\frac{1}{q}\sum_{j=1}^{q}B(TP_{j},FP_{j},TN_{j},FN_{j})$

  • マイクロ平均 $B(\sum_{j=1}^{q}TP_{j},\sum_{j=1}^{q}FP_{j},\sum_{j=1}^{q}TN_{j},\sum_{j=1}^{q}FN_{j})$

ここに $TP_{j},FP_{j},TN_{j},FN_{j}$ は、真陽性、偽陽性、真陰性、および偽陰性のカウントであり、それぞれ $j^{th}$label.

ここで、$ B $は任意の混同行列ベースのメトリックを表します。あなたのケースでは、標準の精度をプラグインし、数式を呼び出します。マクロ平均の場合は、ラベルごとの数を渡してから合計し、ミクロ平均の場合は、最初に数を平均してから、メトリック関数を適用します。

マルチラベルメトリックのコードを調べてみてください here パッケージの一部 mldr[〜#〜] r [〜#〜] 。また、Javaマルチラベルライブラリ [〜#〜] mulan [〜#〜] を調べることもできます。

これは、さまざまなメトリックを理解するのに最適な論文です。 マルチラベル学習アルゴリズムのレビュー

16
phoxis

答えは、各クラスの精度と再現率を計算してから、それらを平均する必要があるということです。例えば。クラスA、B、Cの場合、精度は次のとおりです。

(precision(A) + precision(B) + precision(C)) / 3

リコールについても同じです。

私は専門家ではありませんが、次の情報源に基づいてこれを決定しました。

https://list.scms.waikato.ac.nz/pipermail/wekalist/2011-March/051575.html http://stats.stackexchange.com/questions/21551/how-to-マルチクラスのマルチラベル分類のための計算精度リコール

7
Mark E. Haase
  • ラベルA、B、Cを持つ3クラスのマルチ分類問題があると仮定します。
  • 最初に行うことは、混同行列を生成することです。対角線の値は常に真陽性(TP)であることに注意してください。
  • ここで、ラベルAのrecallを計算するには、混同行列から値を読み取って計算します。

    = TP_A/(TP_A+FN_A)
    = TP_A/(Total gold labels for A)
    
  • ここで、ラベルAのprecisionを計算してみましょう。混同行列から値を読み取って計算できます。

    = TP_A/(TP_A+FP_A)
    = TP_A/(Total predicted as A)
    
  • 残りのラベルBとCについても同じことを行う必要があります。これは、マルチクラス分類問題に適用されます。

ここ は、例を含め、マルチクラス分類問題の精度を計算して再現する方法について説明した記事全体です。

5
kavgan

python sklearnnumpyを使用して:

from sklearn.metrics import confusion_matrix
import numpy as np

labels = ...
predictions = ...

cm = confusion_matrix(labels, predictions)
recall = np.diag(cm) / np.sum(cm, axis = 1)
precision = np.diag(cm) / np.sum(cm, axis = 0)
1
Cristian Garcia

クラスのバランスが取れている場合は、単純な平均化で十分です。

それ以外の場合、各実際のクラスの再現率はクラスの有病率によって重み付けする必要があり、各予測ラベルの精度は各ラベルのバイアス(確率)によって重み付けする必要があります。どちらの方法でも、Rand Accuracyが得られます。

より直接的な方法は、正規化された分割表を作成し(Nで割り、表がラベルとクラスの組み合わせごとに1になるようにする)、対角線を追加してRand精度を取得することです。

しかし、クラスのバランスが取れていない場合は、バイアスが残り、カッパなどのチャンス補正された方法、またはROC分析またはインフォームネス(ROCのチャンス線より上の高さ)などのチャンス正しい測定がより適切です。

1