マルチクラス-マルチラベル分類の精度/リコールを計算する方法は?


72

マルチクラスマルチラベル分類、つまり、2つ以上のラベルがあり、各インスタンスが複数のラベルを持つことができる分類の精度を計算し、測定値をリコールする方法を疑問に思っていますか?


1
マルチラベルの部分は非常に難しく、私もこれに興味があります。マルチラベルの問題には当てはまらないと思いますが、まったく信用していません。
-user798719

1
実際、すべてのマルチラベルの問題はマルチクラスなので、RのutimlパッケージまたはJavaのMulanを使用できます。
アドリアーノリヴォリ

回答:


19

分類器のパフォーマンスを測定するためのもう1つの一般的なツールはROC / AUCです。これもマルチクラス/マルチラベル拡張機能を備えています。[Hand 2001]を参照してください

[Hand 2001]:ROC曲線下の領域の複数のクラス分類問題への単純な一般化


人気がありますが、バグが多い場合があります。私は完全にそれを信頼していません。 stats.stackexchange.com/questions/93901/...
EngrStudent

3
スタックオーバーフローを変更しないでください!Guyは問題を尋ねますが、ほとんどの投票された答えは実際には彼の質問に答えませんが、もっと良い他のツール/ライブラリを指摘します
-ragvri

はい、この回答にはどのように+20を設定できますか?精度と想起という言葉さえ含まれていません。
サイモンDirmeier

よく考えれば、精度とリコールが実際にAUCによってキャプチャされることに気付くでしょう。
oDDsKooL

16

ここではいくつかの混乱行列とマルチクラス精度/リコール測定についてコーセラフォーラムのスレッドの議論です。

基本的な考え方は、すべてのクラスのすべての精度とリコールを計算し、それらを平均して単一の実数測定値を取得することです。

混同マトリックスを使用すると、クラスの精度とリコールを簡単に計算できます。

以下は、そのスレッドからコピーされた混同マトリックスに関する基本的な説明です。

混同マトリックスは、3つ以上のクラスがある場合に、真の陽性、真の陰性、偽陽性、および偽陰性を分類する方法です。精度とリコールを計算するために使用されるため、マルチクラス問題のf1-scoreに使用されます。

実際の値は列で表されます。予測値は行で表されます。

例:

実際に8である10のトレーニング例は、5として誤って分類(予測)されています5
実際に4である13のトレーニング例は、9として誤って分類されています

混同マトリックス

cm =
     0 1 2 3 4 5 6 7 8 9 10
     1 298 2 1 0 1 1 3 1 1 0
     2 0 293 7 4 1 0 5 2 0 0
     3 1 3 263 0 8 0 0 3 0 2
     4 1 5 0 261 4 0 3 2 0 1
     5 0 0 10 0 254 3 0 10 2 1
     6 0 4 1 1 4 300 0 1 0 0
     7 1 3 2 0 0 0 264 0 7 1
     8 3 5 3 1 7 1 0 289 1 0
     9 0 1 3 13 1 0 11 1 289 0
    10 0 6 0 1 6 1 2 1 4 304

クラスxの場合:

  • 真の正:対角位置、cm(x、x)。

  • 偽陽性:列xの合計(主対角線なし)、sum(cm(:, x))-cm(x、x)。

  • 偽陰性:行xの合計(主対角線なし)、sum(cm(x、:)、2)-cm(x、x)。

コースの公式に従って、精度、再現率、F1スコアを計算できます。

すべてのクラスの平均化(重み付けの有無にかかわらず)により、モデル全体の値が得られます。


2
軸が反転しました。書いた内容に基づいて、CMを転置する必要があります。
スペイシー

@Tarantulaなぜあなたはそう思いますか?彼は正しいと思う。
shahensha

@shahensha 1つの列で試してみてください、それは間違っています。
スペイシー

1
Courseraスレッドへのリンクが壊れています
-shark8me

8
この答えがマルチラベル問題を処理するとは思わない。マルチクラスの問題に適用されます。マルチラベル問題における誤検知または誤検知の概念は何ですか?
ユーザー798719

13

マルチラベル分類には、2つの方法があります。まず、次のことを考慮してください。

  • n
  • Yiith
  • xiith
  • h(xi)ith

例ベース

メトリックは、データポイントごとに計算されます。予測されたラベルごとに、そのスコアのみが計算され、これらのスコアがすべてのデータポイントにわたって集計されます。

  • 1ni=1n|Yih(xi)||h(xi)|
  • 1ni=1n|Yih(xi)||Yi|

他のメトリックもあります。

ラベルベース

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

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

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

  • 1qj=1qB(TPj,FPj,TNj,FNj)

  • B(j=1qTPj,j=1qFPj,j=1qTNj,j=1qFNj)

TPj,FPj,TNj,FNjjth

B

あなたはMULT-ラベルメトリックのコードに見ていて興味があるかもしれないここに、どのパッケージの一部mldrR。また、JavaマルチラベルライブラリMULANを調べることもできます。

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


あるウィキペディアの参照のように、あなたが書いたメトリックの信頼性に関する参照を与えることができれば良かったでしょう。あなたが言及した参考文献は、メトリックや研究論文のコーディング一部である...
hacker315

2
レビューペーパーは、回答(マルチラベル学習アルゴリズムのレビュー)ieeexplore.ieee.org/document/6471714の終わりに既にリンクされています。これらは、実装の実施に基づいた文献でよく知られているメトリックです。信頼性をどのように証明できるかわかりません。
フォクシス

8

マルチラベル部分については知りませんが、マルチクラス分類では、これらのリンクが役立ちます

このリンクは、各カテゴリの精度とリコールを計算するために使用できる混同マトリックスの作成方法を説明しています

また、このリンクでは、分類器全体を評価するためのマイクロf1およびマクロf1メジャーの計算方法について説明しています。

それがあなたの役に立つことを願っています。


4
重要な点は、正しいものを定義する方法が複数あるため、これらのメトリックを計算する有効な方法が複数あることです(たとえば、micro-F1とmacro-F1)。これは、アプリケーションと有効性基準に依存します。
ジャックタナー

アーメド:リンクをありがとう!@JackTannerおそらくこれについてのリファレンスがありますか(マルチクラスマルチラベル分類の場合)?
バム

1
@MaVe、申し訳ありませんが、リンクはありません。これは個人的な経験からです。目的に対して真陽性と偽陽性を構成するものを考えるだけでそこに到達します。
ジャックタナー

4
最初のリンクが
失われた

1

このリンクは私を助けてくれました。https://www.youtube.com/watch?v=HBi - P5j0Kec私はそれがあなたにも役立つことを願っています

以下のように分布を言う

    A   B   C   D
A   100 80  10  10
B   0    9   0   1
C   0    1   8   1
D   0    1   0   9

Aの精度は

P(A)= 100/100 + 0 + 0 +0 = 100

P(B)= 9/9 + 80 + 1 + 1 = 9/91 psst ...基本的にクラスの真のポジティブを取得し、行全体の列データで除算します

のリコールは

R(A)= 100 / 100+ 80 + 10 + 10 = 0.5

R(B)= 9 / 9+ 0 + 0 + 1 = 0.9

psst ...は本質的にクラスの真のポジティブを取り、列全体の行データで除算します

すべての値を取得したら、マクロ平均を取る

avg(P)= P(A)+ P(B)+ P(C)+ P(D)/ 4

avg(R)= R(A)+ R(B)+ R(C)+ R(D)/ 4

F1 = 2 * avg(P)* avg(R)/ avg(P)+ avg(R)


0

ハーバードのcs205.orgからこれらのスライドをチェックしてください。エラー測定のセクションに進むと、マルチクラス設定(たとえば、1対すべてまたは1対1)および混同マトリックスでの精度とリコールの説明があります。混同行列はここで本当に欲しいものです。

参考までに、Pythonソフトウェアパッケージscikits.learnには、マルチクラスデータでトレーニングされた分類器から混同行列などを自動的に計算する組み込みメソッドがあります。おそらく、あなたのために精密リコールプロットを直接計算することもできます。一見の価値があります。


4
残念ながら、スライドへのリンクは死んでおり、他の場所でスライドを見つけることができました。
f3lix

今年のコースでその講義を受講すると、補充されます。PDFを永続的なリンクの場所にコピーできれば、できますが、できません。定期的に破損することは避けられず、メモを見つける場所は他にありません。それらはそのコースに固有のものです。
12

sklearnは混同マトリックスのマルチラベルをサポートしていませんgithub.com/scikit-learn/scikit-learn/issues/3452
フランクデルノンクール


0

セットを使用して、一般的な場合とまったく同じ方法で:

http://en.wikipedia.org/wiki/F1_score

http://en.wikipedia.org/wiki/Precision_and_recall

以下は、まさにそれを行う単純なPython関数です。

def precision(y_true, y_pred):
    i = set(y_true).intersection(y_pred)
    len1 = len(y_pred)
    if len1 == 0:
        return 0
    else:
        return len(i) / len1


def recall(y_true, y_pred):
    i = set(y_true).intersection(y_pred)
    return len(i) / len(y_true)


def f1(y_true, y_pred):
    p = precision(y_true, y_pred)
    r = recall(y_true, y_pred)
    if p + r == 0:
        return 0
    else:
        return 2 * (p * r) / (p + r)


if __name__ == '__main__':
    print(f1(['A', 'B', 'C'], ['A', 'B']))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.