1. 序章

このチュートリアルでは、マルチクラス分類問題でF-1スコアを計算する方法について説明します。バイナリ分類とは異なり、マルチクラス分類はクラスごとに個別にF-1スコアを生成します。

また、単一のスコアが必要な場合に備えて、Pythonで分類子ごとに平均F-1スコアを計算する方法についても説明します。

2. F-1スコア

F-1スコアは、分類器の成功度を評価するための一般的な指標の1つです。これは、他の2つの指標、つまり適合率と再現率の調和平均です。 二項分類問題では、式は次のとおりです。

   

F-1スコアメトリックは、次の場合に適しています。

  • クラスの分布が不均衡です
  • 適合率と再現率のバランスの取れた尺度を探しています(タイプIおよびタイプIIのエラー)

F-1スコアはデータ分布に対してより敏感であるため、不均衡なデータセットの分類問題に適した尺度です。

3. マルチクラスF-1スコアの計算

マルチクラス分類問題の場合、全体的なF-1スコアは計算されません。 代わりに、クラスごとのF-1スコアを1対残りの方法で計算します。 このアプローチでは、クラスごとに個別の分類子があるかのように、各クラスの成功を個別に評価します。

例として、合計127個のサンプルを含む以下の混同行列を考えてみましょう。

次に、最初のクラスである classaのF-1スコアを計算してみましょう。 まず、適合率と再現率の値を計算する必要があります。

   

   

次に、クラスaの式を適用します。

   

同様に、最初に他のクラスの適合率と再現率の値を計算します。

次に、計算により、各クラスのクラスごとのF-1スコアが算出されます。

   

   

   

4. 実装

Python sci-kit learnライブラリでは、 F-1スコア関数を使用して、マルチクラス分類問題のクラスごとのスコアを計算できます。 

クラスごとのスコアを出力するには、averageパラメーターをNoneに設定する必要があります。

たとえば、一連の実際のy値( y_true )と予測されたy値( y_pred )があるとします。 次に、クラスごとのF-1スコアを出力しましょう。

from sklearn.metrics import f1_score
f1_score(y_true, y_pred, average=None)

この場合、計算された出力は次のとおりです。

array([0.62111801, 0.33333333, 0.26666667, 0.13333333])

一方、比較を容易にするために単一のF-1スコアを評価する場合は、他の平均化方法を使用できます。そのために、averageパラメーターを設定します。

ここでは、3つの一般的な平均化方法を検討します。

最初の方法であるmicroは、正と負の値をグローバルに計算します。

f1_score(y_true, y_pred, average='micro')

この例では、次の出力を取得します。

0.49606299212598426

別の平均化方法であるmacroは、各クラスのF-1スコアの平均を取ります。

f1_score(y_true, y_pred, average='macro')

出力を与えます:

0.33861283643892337

マクロメソッドは、サンプルサイズに関係なく、すべてのクラスを同等として扱うことに注意してください。

予想どおり、多数派クラス(クラスa )のF-1スコアが最も高いため、ミクロ平均はマクロ平均よりも高くなっています。

このチュートリアルで検討する3番目のパラメーターは、weightedです。 クラスF-1スコアは、クラス内のインスタンスの数を重みとして使用して平均化されます。

f1_score(y_true, y_pred, average='weighted')

出力を生成します:

0.5728142677817446

私たちの場合、加重平均は最高のF-1スコアを与えます。

手元の問題に基づいて、平均化を使用するかどうかを選択する必要があります。

5. 結論

このチュートリアルでは、マルチクラス分類問題でF-1スコアを計算する方法について説明しました。

最初に、クラスごとのF-1スコアを計算するための1対残りのアプローチについて説明しました。

また、Pythonで単一の平均スコアを計算する3つの方法についても説明しました。