機械学習における混同行列と例

⚡ スマートサマリー

混同行列は、分類モデルの性能を測定するための表であり、予測されたラベルと既知の実際のラベルを比較することで、分類器がどのクラスを正しく分類し、どのクラスを誤って分類したかを正確に明らかにします。

  • 🔘 4つの結果: 真陽性、真陰性、偽陽性、偽陰性が、バイナリ行列のすべてのセルを埋める。
  • ☑️ エラーの種類: 偽陽性は第一種過誤であり、偽陰性は第二種過誤である。
  • 派生指標: 正確性、精度、再現率、特異度、F1スコアはすべて同じ4つの指標から算出されます。
  • 🧪 正確さを超えて: 不均衡なデータの場合、精度はモデルを過大評価する傾向があるが、マトリックスは実際にどのクラスで失敗しているかを明らかにする。
  • 🛠️ マルチクラスビュー: N個のクラスはN×Nのグリッドを生成し、その対角線上にはすべての正解予測が格納される。
  • ⚙️ Python ルート: scikit-learnは、confusion_matrix()とclassification_report()を使って、同じ表を2行で作成します。

機械学習における混同行列(例付き)

混同マトリックスとは何ですか?

A 混同行列 は、パフォーマンス測定技術です。 機械学習 分類。これは、真の値が既知であるテストデータセットに対して、分類モデルがどのように機能したかを示す表です。混同行列という用語は単純ですが、その上に構築された用語は紛らわしい場合があるので、以下で各要素を平易な言葉で説明します。

このマトリックスはあらゆるものに適用されます 教師あり分類器 — ロジスティック回帰、決定木、 単純ベイズモデル または 深いニューラルネットワーク なぜなら、モデルが予測した内容と実際に正しかった内容という、2つのラベル列しか比較しないからです。

混同マトリックスの XNUMX つの結果

混同行列は、実際のクラスと予測クラスを比較して分類器の精度を視覚化します。バイナリ混同行列は、次の四角形で構成されます。

真陽性(TP)、偽陽性(FP)、偽陰性(FN)、真陰性(TN)の各象限を示す二値混同表
混同表

上記の表は、すべての二値混同行列に含まれる4つのマス目を示しています。

  • TP: 真陽性: 予測値は実際の値と正しく正と予測された。
  • FP: 偽陽性: 予測値が実際には正と誤って予測された、つまり負の値が正と予測された。
  • FN:偽陰性: 正の値が負の値として予測される
  • TN:真の陰性: 予測値は、実際の負の値として正しく予測されました。

統計では、2 つのエラー セルにそれぞれ名前が付けられます。偽陽性とは、 タイプIエラー — モデルが、決して起こすべきではなかった警報を発しました。偽陰性とは、 タイプIIエラー ―モデルは、本来なら警報を発するべき時に沈黙を保っていた。どちらの指標が問題解決にとってよりコストがかかるかを把握することで、後でどの指標を調整するかが決まる。

混同行列から精度テストを計算すると、以下の式が得られます。

4つの混同行列の結果から導き出された精度計算式

混同行列の例

混同行列は、再現率、適合率、精度、およびAUC-ROC曲線を測定できる便利な機械学習手法です。以下のサッカーの例では、真陽性、真陰性、偽陽性、偽陰性という用語が日常的な言葉でどのように意味するかを示しています。

真のポジティブ:

あなたは良い結果を予測し、それが現実となった。例えば、あなたはフランスがワールドカップで優勝すると予測し、実際にフランスは優勝した。

真の負:

あなたは否定的な予想をしましたが、それも事実です。あなたはイングランドが勝てないと予想し、実際に負けました。

誤検知:

あなたの予測は肯定的ですが、それは誤りです。

あなたはイングランドが勝つと予想していましたが、イングランドは負けました。

偽陰性:

あなたの予測は否定的でしたが、結果はそれを誤りであることを示しています。

フランスは勝てないと予想していましたが、フランスは勝ちました。

最初の単語は予測が正しかったか間違っていたか(TrueまたはFalse)を表し、2番目の単語はモデルが何を予測したか(PositiveまたはNegative)を表すことを覚えておいてください。

混同行列の計算方法

混同行列を計算する手順は次のとおりです。 データマイニング:

  • ステップ1) まず、テストデータセットと、それに対応する期待される結果値が必要です。
  • ステップ2) テストデータセット内のすべての行を予測します。
  • ステップ3) 予想される結果と予測値を比較し、カウントします。
    1. 各クラスの正解予測の合計。
    2. 各クラスの誤った予測の合計。

その後、これらの数字は以下の方法で整理されます。

  • 行列の各行は、実際のクラスに対応しています。
  • マトリックスの各列は、予測されたクラスに対応しています。
  • 正しい分類と誤った分類の合計数がテーブルに入力されます。
  • あるクラスにおける正解予測の合計は、そのクラスの実際の行と予測された列が交わるセル(対角線)に入力されます。
  • あるクラスに対する誤った予測の合計は、そのクラスの値に対応する実際の行と、モデルが代わりに選択したクラスの予測列に反映されます。

行と列の役割は慣例であって厳密な規則ではなく、一部のプロットツールはレイアウトを反転させるため、行列を解釈する前に必ず軸ラベルを確認してください。ここで使用されている向き(行は実際の値、列は予測値)は、scikit-learnが生成する向きです。

混同行列を使用したその他の重要な用語

4つのカウントが確立されると、一連の補助用語が同じ表の異なる部分を説明する。

  • 陽性予測値(PPV): これは精度に非常に近い概念です。両者の重要な違いの一つは、陽性予測値(PPV)は有病率を考慮に入れている点です。クラスのバランスが完全に取れている状況では、陽性予測値は精度と同じになります。
  • ヌルエラー率: この用語は、常に多数派クラスを予測した場合に、予測が誤る頻度を定義します。これは、分類器を比較するための基準指標として使用できます。
  • F スコア: F1スコアは、真陽性率(再現率)と適合率の加重平均スコアです。
  • ROC 曲線: ROC曲線は、さまざまなカットオフポイントにおける真陽性率と偽陽性率の関係を示したものです。また、感度(再現率)と特異度(真陰性率)の間のトレードオフ関係も示しています。
  • 精度: 精度メトリックは、ポジティブ クラスの精度を示します。 陽性クラスの予測が正しい可能性を測定します。

精度計算式:真陽性数÷真陽性数+偽陽性数

分類器がすべての正の値を完全に分類した場合、最大スコアは 1 になります。精度だけでは負のクラスを無視してしまうため、あまり役に立ちません。この指標は通常、再現率指標と組み合わせて使用​​されます。再現率は感度または真陽性率とも呼ばれ、以下のように表記されます。

  • 感度: 感度は、正しく検出された陽性クラスの割合を計算します。この指標は、モデルが陽性クラスをどれだけ正確に認識できるかを示します。

感度計算式:真陽性数÷真陽性数+偽陰性数

混同行列の指標と計算式

上記の指標はすべて同じ4つの項目に基づいた算術演算なので、それぞれの指標が答える質問と並べて比較すると分かりやすいでしょう。

メトリック 質問に答える 次のようなときに使用します
精度 (TP + TN) / (TP + TN + FP + FN) 全体で、いくつの予測が正しかったか? クラスのバランスはおおむね取れている
精度 TP / (TP + FP) モデルが肯定的な結果を示した場合、それはどのくらいの頻度で正しいのでしょうか? 誤報は高くつく
リコール(感度) TP / (TP + FN) 実際に陽性反応を示した人のうち、何人が摘発されたのだろうか? 陽性反応を見逃すと高くつく。
特異性 TN / (TN + FP) 実際に陰性だった症例のうち、いくつが陰性だったのか? 否定的なクラスも重要です
F1スコア 2 × (適合率 × 再現率) / (適合率 + 再現率) その二つのバランスはどのようなものだろうか? 両方に1つの番号が必要です

100通のメールでテストしたスパムフィルターを例にとると、TP = 45、FN = 5、FP = 10、TN = 40という結果が得られます。精度は (45 + 40) / 100 = 0.85、適合率は 45 / (45 + 10) = 0.82、再現率は 45 / (45 + 5) = 0.90、特異度は 40 / (40 + 10) = 0.80 です。F1スコアは 0.86 となります。

これらの数字は、単一の精度数値では隠された事実を物語っています。つまり、このフィルターは実際のスパムメールの90%を検出しますが、フラグが立てられた5通に1通の割合で、正当なメールを誤って隔離してしまうのです。このトレードオフが許容できるかどうかは、それぞれのエラーのコストによって決まります。まさにそのため、精度だけではなく、このマトリックスが報告されるのです。

多クラス分類のための混同行列

分類問題はラベルが2つで終わることはほとんどなく、行列は形状を変えずに拡大縮小します。N個のクラスの場合、表はN×Nのグリッドになります。対角線にはすべての正解が記録され、対角線以外の各セルには、どのクラスが他のどのクラスと誤認されたかが正確に記録されます。

画像を猫、犬、ウサギの3つのクラスに分類するモデルは、3×3のグリッドを生成します。行「猫」、列「犬」のセルに12が格納されている場合、12枚の猫の画像が犬として分類されたことを意味します。このように詳細な情報が得られるため、このマトリックスはスコアよりも有用です。モデルが分離できない特定のクラスのペアを特定できるからです。

精度、再現率、F1スコアは、1対残りという視点を用いてクラスごとに定義されます。ここで、対象となるクラスは正例クラスであり、それ以外はすべて負例クラスです。クラスごとの数値は、次の3つの方法のいずれかで組み合わせられます。

  • マクロ平均: 各クラスごとに指標を個別に計算し、その後、重み付けなしの平均値を算出します。すべてのクラスが等しく扱われるため、希少なクラスが埋もれてしまうことはありません。
  • マイクロ平均: 指標を計算する前に、すべてのクラスのTP、FP、FNのカウントをプールします。大きなクラスが支配的であり、単一ラベル問題では、マイクロ精度、マイクロ再現率、および精度は同じになります。
  • 加重平均: 各クラスの真のインスタンス数を重みとして使用して、クラスごとのスコアを平均化することで、クラスの不均衡を可視化します。

すべてのクラスが等しく重要な場合はマクロを選択し、クラス分布が実際のトラフィックを反映している場合は加重を選択します。

混同行列の作成方法 Python

scikit-learnライブラリは、2つのラベル配列からテーブル全体を構築するため、手動でカウントする必要はありません。以下の例では、10個の正解ラベルと10個の予測結果を比較しています。

from sklearn.metrics import confusion_matrix

y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0]
y_pred = [1, 0, 1, 0, 0, 1, 1, 0, 1, 0]

cm = confusion_matrix(y_true, y_pred)
print(cm)

この呼び出しは、2×2のNumPy配列を返します。この配列の0行目は実際の負のクラス、1行目は実際の正のクラスです。

[[4 1]
 [1 4]]

scikit-learnの規則に従って配列を読み取ると、TN = 4 (左上)、FP = 1 (右上)、FN = 1 (左下)、TP = 4 (右下) となります。これら4つの値を1行に展開すると、マップが作成されます。ping 明示的:

tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()

上記のマクロ平均と加重平均を含め、すべてのクラスの精度、再現率、F1スコアを一度に取得するには、以下を呼び出します。 classification_report() 各指標を手作業で計算する代わりに:

from sklearn.metrics import classification_report

print(classification_report(y_true, y_pred))

グラフ化バージョンについては、 ConfusionMatrixDisplay.from_predictions(y_true, y_pred) 同じテーブルをラベル付きヒートマップとしてレンダリングします。引数リスト全体は、 labels (NAIST) と normalize オプションは、 scikit-learnの混同行列リファレンス同じ評価手順は、以下のモデルにも適用されます。 TensorFlowなぜなら、この指標は予測されたラベルのみに依存するからである。

なぜ混同マトリックスが必要なのでしょうか?

混同行列を使用するメリットと利点は以下のとおりです。

  • これは、分類モデルが予測を行う際にどのように混乱するかを示している。
  • 混同行列は、分類器が犯すエラーだけでなく、エラーの種類についても洞察を与えてくれます。
  • この分析は、分類精度のみを用いる場合の限界を克服するのに役立ちます。
  • 混同行列の各列は、予測されたクラスのインスタンスを表します。
  • 混同行列の各行は、実際のクラスのインスタンスを表します。
  • これはモデル評価を診断へと変え、より多くのデータやより優れた特徴量が必要な特定のクラスペアを指摘する。

その診断的価値こそが、混同行列があらゆる評価段階の中心に位置する理由である。 データサイエンス ワークフロー、そして分類器を本番環境に導入する前に通常最初にレビューされるテーブルである理由について説明します。

よくあるご質問

記録のわずか2%が不正な場合、毎回「不正ではない」と予測するモデルは、何も不正を検出できないにもかかわらず、98%の精度を達成します。このマトリックスは、真陽性の空欄を即座に明らかにするため、偏ったデータでは精度よりも再現率が重要になります。

正規化された行列は、生のカウントではなく割合を示し、通常は各セルをその行の合計で割ります。これにより、サンプルサイズが隠されてしまうものの、非常に異なるサイズのクラスを一目で比較できるようになります。そのため、クラスのバランスが崩れている場合は、両方のバージョンを報告する必要があります。

複数の確率閾値でマトリックスを再構築し、その変化を観察してください。閾値を下げると、偽陰性セルから真陽性セルにレコードが移動し、再現率は向上しますが、同時に偽陽性も増加します。残りのエラーミックスのコストが最も低くなる閾値を選択してください。

いいえ。この行列は離散的なラベルの一致をカウントするため、カテゴリが必要です。回帰分析の出力は連続的であり、平均絶対誤差や決定係数(R二乗)などの誤差指標で評価されます。連続的なターゲットを複数のカテゴリに分類することだけが、行列を意味のあるものにする唯一の方法です。

見逃し診断は、不必要な追加検査よりもはるかにコストがかかるため、通常はリコール(再検査)が優先されます。そのため、スクリーニングツールは偽陰性をほぼゼロに抑え、偽陽性をある程度許容するように調整されており、偽陽性は後日確認検査で除外されます。

自動化されたモデル評価ツールは、対角線以外のすべてのセルをスキャンし、最もコストのかかる混同をランク付けし、どのクラスにさらなるトレーニングデータまたは統合ラベルが必要かを提案します。また、閾値を自動的に調整することで、手動で行っていた行列の比較を、ランク付けされた候補リストに変換します。

GitHubコパイロット 短いコメントからインポート文、メトリック呼び出し、ヒートマッププロットのドラフトを作成します。このドラフトはあくまで出発点として扱い、軸の順序と正のラベル引数は必ずご自身で確認してください。なぜなら、行列を転置するとすべての結論が反転してしまうからです。

最も希少なクラスであっても、その行に実用的なカウントが確保されるほど十分な規模であるべきです。少数のサンプルでは、​​実行ごとに指標が大きく変動します。複数のフォールドにわたる行列を合計する交差検証は、小さなホールドアウト分割よりも安定した結果をもたらします。