マルチクラスのマルチラベル分類、つまり3つ以上のラベルがあり、各インスタンスが複数のラベルを持つことができる分類の精度とリコールメジャーを計算する方法を知りたいですか?
マルチラベル分類の場合、2つの方法があります。まず、以下を検討します。
指標はデータポイントごとに計算されます。予測されたラベルごとに、その唯一のスコアが計算され、これらのスコアがすべてのデータポイントで集計されます。
他の指標もあります。
ここでは、ラベルごとに処理が行われます。ラベルごとに指標(精度、再現率など)が計算され、次にこれらのラベルごとの指標が集計されます。したがって、この場合、バイナリ分類の場合と同様に(各ラベルにはバイナリ割り当てがあるため)、データセット全体で各ラベルの精度/再現率を計算し、それを集計します。
簡単な方法は、一般的なフォームを提示することです。
これは、標準のマルチクラスに相当するものの単なる拡張です。
ここに は、真陽性、偽陽性、真陰性、および偽陰性のカウントであり、それぞれ label.
ここで、$ B $は任意の混同行列ベースのメトリックを表します。あなたのケースでは、標準の精度をプラグインし、数式を呼び出します。マクロ平均の場合は、ラベルごとの数を渡してから合計し、ミクロ平均の場合は、最初に数を平均してから、メトリック関数を適用します。
マルチラベルメトリックのコードを調べてみてください here パッケージの一部 mldr[〜#〜] r [〜#〜] 。また、Javaマルチラベルライブラリ [〜#〜] mulan [〜#〜] を調べることもできます。
これは、さまざまなメトリックを理解するのに最適な論文です。 マルチラベル学習アルゴリズムのレビュー
答えは、各クラスの精度と再現率を計算してから、それらを平均する必要があるということです。例えば。クラス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-マルチクラスのマルチラベル分類のための計算精度リコール
ここで、ラベル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についても同じことを行う必要があります。これは、マルチクラス分類問題に適用されます。
ここ は、例を含め、マルチクラス分類問題の精度を計算して再現する方法について説明した記事全体です。
python sklearn
とnumpy
を使用して:
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)
クラスのバランスが取れている場合は、単純な平均化で十分です。
それ以外の場合、各実際のクラスの再現率はクラスの有病率によって重み付けする必要があり、各予測ラベルの精度は各ラベルのバイアス(確率)によって重み付けする必要があります。どちらの方法でも、Rand Accuracyが得られます。
より直接的な方法は、正規化された分割表を作成し(Nで割り、表がラベルとクラスの組み合わせごとに1になるようにする)、対角線を追加してRand精度を取得することです。
しかし、クラスのバランスが取れていない場合は、バイアスが残り、カッパなどのチャンス補正された方法、またはROC分析またはインフォームネス(ROCのチャンス線より上の高さ)などのチャンス正しい測定がより適切です。