logo

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

機械学習 、分類は、特定のデータ セットをさまざまなカテゴリに分類するプロセスです。機械学習では、分類モデルのパフォーマンスを測定するために、 混同行列 。このチュートリアルを通じて、混同行列の重要性を理解します。

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

混同行列 は、一連のテスト データに対する機械学習モデルのパフォーマンスを要約した行列です。これは、モデルの予測に基づいて、正確なインスタンスと不正確なインスタンスの数を表示する手段です。これは、各入力インスタンスのカテゴリラベルを予測することを目的とした分類モデルのパフォーマンスを測定するためによく使用されます。

マトリックスには、テスト データ上でモデルによって生成されたインスタンスの数が表示されます。



  • 真陽性 (TP): モデルが正のデータ ポイントを正確に予測した場合に発生します。
  • 真陰性 (TN) : モデルが負のデータ ポイントを正確に予測した場合に発生します。
  • 誤検知 (FP) : モデルが正のデータ ポイントを誤って予測した場合に発生します。
  • 間違い ネガ(FN) : モデルが負のデータ ポイントを誤って予測した場合に発生します。

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

分類モデルのパフォーマンスを評価する場合、混同行列が不可欠です。真陽性、真陰性、偽陽性、および偽陰性予測の徹底的な分析を提供し、モデルのより深い理解を促進します。 再現率、精度、精度、 そして全体的な有効性 階級差別で。データセット内に不均一なクラス分布がある場合、この行列は、基本的な精度メトリクスを超えてモデルのパフォーマンスを評価するのに特に役立ちます。

例を使用して混同行列を理解しましょう。

二項分類用の混同行列

Dog 画像または Not Dog 画像を持つ画像認識の 2X2 混同行列を以下に示します。

実際の

犬ではありません

予測された

真陽性
(TP)

誤検知
(FP)

犬ではありません

偽陰性
(FN)

真の陰性
(テネシー州)

  • 真陽性 (TP): 予測値と実際の値の両方を持つ合計数が Dog です。
  • 真陰性 (TN): 予測値と実際の値の両方を持つ合計数が Not Dog です。
  • 誤検知 (FP): これは、実際には犬ではないが、犬であると予測された合計数です。
  • 偽陰性 (FN): これは、「犬ではない」と予測されたのに、実際には「犬」であると予測された合計数です。

二項分類問題の例

索引

1

2

3

4

5

6

7

8

9

10

実際の

犬ではありません

犬ではありません

犬ではありません

犬ではありません

予測された

犬ではありません

犬ではありません

犬ではありません

犬ではありません

結果

FN

テネシー州

FP

テネシー州

テネシー州

  • 実際の犬の数 = 6
  • 実際の犬ではない数 = 4
  • 真陽性数 = 5
  • 誤検知数 = 1
  • 真陰性数 = 3
  • 偽陰性数 = 1

予測された

犬ではありません


実際の

真陽性
(TP=5)

偽陰性
(FN=1)

犬ではありません

誤検知
(FP=1)

真の陰性
(TN=3)

混同行列データに基づく指標

1. 精度

精度はモデルのパフォーマンスを測定するために使用されます。これは、合計インスタンスに対する合計正しいインスタンスの比率です。

Accuracy = frac {TP+TN}{TP+TN+FP+FN}

上記の場合:

精度 = (5+3)/(5+3+1+1) = 8/10 = 0.8

2. 精度

精度 モデルの肯定的な予測がどの程度正確であるかを示す尺度です。これは、モデルによって行われた陽性予測の総数に対する真陽性予測の比率として定義されます。

ext{Precision} = frac{TP}{TP+FP}

上記の場合:

精度 = 5/(5+1) =5/6 = 0.8333

3. 思い出す

想起 データセットから関連するすべてのインスタンスを識別する際の分類モデルの有効性を測定します。これは、真陽性 (TP) インスタンスの数と、真陽性と偽陰性 (FN) インスタンスの合計の比率です。

ext{Recall} = frac{TP}{TP+FN}

シュレヤ・ゴーシャルの最初の夫

上記の場合:

リコール = 5/(5+1) =5/6 = 0.8333

注記: 誤検知を最小限に抑えたい場合は精度を使用します。これは、スパムではないメッセージをスパムとして誤分類することがコストのかかるスパムメール検出のようなシナリオで重要です。また、医療診断のように、たとえ一部の偽陽性が発生したとしても、実際の陽性症例をすべて特定することが重要である場合など、偽陰性を最小限に抑えることが重要な場合には、リコールを使用します。

4. F1 スコア

F1 スコア 分類モデルの全体的なパフォーマンスを評価するために使用されます。これは精度と再現率の調和平均です。

ext{F1-Score} = frac {2 cdot Precision cdot Recall}{Precision + Recall}

上記の場合:

F1 スコア: = (2* 0.8333* 0.8333)/( 0.8333+ 0.8333) = 0.8333

情報検索システムなど、偽陽性と偽陰性の最小化の間でトレードオフが必要な場合、F1 スコアを使用して精度と再現率のバランスをとります。

5. 特異性:

特異性は、分類モデル、特にバイナリ分類の評価におけるもう 1 つの重要な指標です。これは、ネガティブなインスタンスを正しく識別するモデルの能力を測定します。特異性は真陰性率とも呼ばれます。

ext{Specificity} = frac{TN}{TN+FP}

特異性=3/(1+3)=3/4=0.75

6. タイプ 1 およびタイプ 2 エラー

タイプ 1 エラー

タイプ 1 エラーは、モデルが正のインスタンスを予測していても、実際には負の場合に発生します。精度は、真陽性と偽陽性の合計に対する真陽性の比率であるため、偽陽性の影響を受けます。

ext{Type 1 Error} = frac{FP}{TN+FP}

たとえば、法廷のシナリオでは、偽陽性と呼ばれることが多いタイプ 1 過誤は、実際には申し立てられた犯罪について無実であるにもかかわらず、法廷が誤って個人を有罪として有罪判決した場合に発生します。この重大な誤りは重大な結果をもたらす可能性があり、問題の犯罪を犯していない無実の人が不当に処罰されることにつながります。法的手続きにおける第 1 種過誤の防止は、正義が正確に執行され、無実の個人が不当な危害や処罰から保護されることを保証するために最も重要です。

タイプ 2 エラー

タイプ 2 エラーは、モデルが正のインスタンスを予測できない場合に発生します。再現率は、真陽性と偽陰性の合計に対する真陽性の比率であるため、偽陰性の影響を直接受けます。

医療検査の文脈では、偽陰性としてよく知られるタイプ 2 エラーは、実際に疾患を患っている患者において診断検査がその疾患の存在を検出できなかった場合に発生します。このような間違いは、診断とその後の治療の遅れにつながる可能性があるため、重大な結果をもたらします。

ext{Type 2 Error} = frac{FN}{TP+FN}

精度は偽陽性を最小限に抑えることに重点を置き、再現率は偽陰性を最小限に抑えることに重点を置きます。

Python を使用した二値分類のための混同行列の実装

ステップ 1: 必要なライブラリをインポートする

パイソン import numpy as np from sklearn.metrics import confusion_matrix,classification_report import seaborn as sns import matplotlib.pyplot as plt>

ステップ 2: 実際のラベルと予測されたラベルの NumPy 配列を作成する

パイソン actual = np.array( ['Dog','Dog','Dog','Not Dog','Dog','Not Dog','Dog','Dog','Not Dog','Not Dog']) predicted = np.array( ['Dog','Not Dog','Dog','Not Dog','Dog','Dog','Dog','Dog','Not Dog','Not Dog'])>

ステップ 3: 混同行列を計算する

パイソン cm = confusion_matrix(actual,predicted)>

ステップ 4: Seaborn ヒートマップを使用して混同行列をプロットする

パイソン cm = confusion_matrix(actual,predicted) sns.heatmap(cm, annot=True, fmt='g', xticklabels=['Dog','Not Dog'], yticklabels=['Dog','Not Dog']) plt.xlabel('Prediction',fontsize=13) plt.ylabel('Actual',fontsize=13) plt.title('Confusion Matrix',fontsize=17) plt.show()>

出力 :

ステップ5: 混乱メトリクスに基づく分類レポート

パイソン print(classification_report(actual, predicted))>

出力 :

精度リコール f1 スコアサポート Dog 0.83 0.83 0.83 6 Not Dog 0.75 0.75 0.75 4 精度 0.80 10 マクロ平均 0.79 0.79 0.79 10 加重平均 0.80 0.80 0.80 10

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

さて、3 つのクラスがあると考えてみましょう。 3 つのクラスを持つ画像の 3X3 混同行列を以下に示します。

ここで、TP= 真陽性、FP= 偽陽性、FN= 偽陰性です。

索引実際の予測されたFPFN
1100
2100
3011
4100
5100
6100
7100
8100
9100
10011
  • 真陽性 (TP): 8 (1+1+0+1+1+1+1+1+1+0)
  • 誤検知 (FP): 2 (0+0+1+0+0+0+0+0+0+1)
  • 偽陰性 (FN): 2 (0+0+1+0+0+0+0+0+0+1)

3 つのクラスの 3X3 混同行列を以下に示します。

予測された


実際の

FP

FN

FP

FN

FN

FP

クラスごとの概要:

  • 猫の場合: [TP=3,FP=0,FN=1]
    • インデックス 1: 真陽性 (実際の猫、予測された猫)
    • インデックス 4: 真陽性 (実際の猫、予測された猫)
    • インデックス 6: 真陽性 (実際の猫、予測された猫)
    • インデックス 10: 偽陰性 (実際の猫、予測された犬)
  • 犬用:[TP=3,FP=2,FN=0]
    • インデックス 2: 真陽性 (実際の犬、予測された犬)
    • インデックス 5: 真陽性 (実際の犬、予測された犬)
    • インデックス 7: 真陽性 (実際の犬、予測された犬)
    • インデックス 10: 偽陽性 (猫は実際、犬は予測)
    • インデックス 3: 偽陽性 (実際の馬、予測された犬)
  • 馬の場合: [TP=2,FP=0,FN=1]
    • 指標 8: 真陽性 (実際の馬、予想された馬)
    • 指標 9: 真陽性 (実際の馬、予想された馬)
    • インデックス 3: 偽陰性 (馬は実際、犬は予測)

この場合、混同行列は次のようになります。

予測された


実際の

TP(3)

FP(1)

FN(0)

FN(0)

TP(3)

FN(1)

FN(1)

FP(1)

TP(2)

Python を使用した二値分類のための混同行列の実装

ステップ 1: 必要なライブラリをインポートする

パイソン import numpy as np from sklearn.metrics import confusion_matrix, classification_report import seaborn as sns import matplotlib.pyplot as plt>

ステップ 2: 実際のラベルと予測されたラベルの NumPy 配列を作成する

パイソン actual = np.array( ['Cat', 'Dog', 'Horse', 'Cat', 'Dog', 'Cat', 'Dog', 'Horse', 'Horse', 'Cat']) predicted = np.array( ['Cat', 'Dog', 'Dog', 'Cat', 'Dog', 'Cat', 'Dog', 'Horse', 'Horse', 'Dog'])>

ステップ 3: 混同行列を計算する

パイソン cm = confusion_matrix(actual,predicted)>

ステップ 4: Seaborn ヒートマップを使用して混同行列をプロットする

パイソン cm = confusion_matrix(actual,predicted) sns.heatmap(cm, annot=True, fmt='g', xticklabels=['Cat', 'Dog', 'Horse'], yticklabels=['Cat', 'Dog', 'Horse']) plt.xlabel('Prediction', fontsize=13) plt.ylabel('Actual', fontsize=13) plt.title('Confusion Matrix', fontsize=17) plt.show()>

出力:

ステップ5: 混乱メトリクスに基づく分類レポート

パイソン print(classification_report(actual, predicted))>

出力 :

精度リコール f1 スコアのサポート 猫 1.00 0.75 0.86 4 犬 0.60 1.00 0.75 3 馬 1.00 0.67 0.80 3 精度 0.80 10 マクロ平均 0.87 0.81 0.80 10 加重平均 0.88 0.80 0.81 10

結論

要約すると、混同行列は分類モデルの有効性を評価するための不可欠な手段です。モデルの精度、適合率、再現率、およびインスタンスを分類する際の一般的な有効性に関する洞察は、モデルが提供する真陽性、真陰性、偽陽性、および偽陰性予測の徹底的な分析によって提供されます。この記事では、各メトリクスの計算を説明する例を示し、その重要性について説明しました。また、バイナリおよびマルチクラス分類シナリオのために Python で混同行列を実装する方法も示しました。実務者は、これらのメトリクスを理解して適用することで、特に不均衡なクラス分布に対処する場合に、モデルのパフォーマンスに関して十分な情報に基づいた意思決定を行うことができます。

混同マトリックスに関するよくある質問

Q.混同行列はどのように解釈すればよいですか?

混同マトリックスは、真陽性、真陰性、偽陽性、および偽陰性のインスタンスを表すエントリを含む分類モデルのパフォーマンスを要約し、モデルの精度とエラーについての洞察を提供します。

Q. 混同マトリックスを使用する利点は何ですか?

混同マトリックスは、分類モデルのパフォーマンスの包括的な評価を提供し、真陽性、真陰性、偽陽性、および偽陰性に関する洞察を提供し、基本的な精度を超えた微妙な分析を支援します。

Q. 混同行列の応用例にはどのようなものがありますか?

混同行列は、医療診断 (病気の真陽性/偽陽性/陰性の識別)、不正行為の検出、感情分析、画像認識の精度評価など、さまざまな分野で応用されています。

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

混同行列図は、分類モデルのパフォーマンスを視覚的に表します。真陽性、真陰性、偽陽性、および偽陰性の値が構造化行列形式で表示されます。

Q. 混同行列の 3 つの値は何ですか?

混同行列の 3 つの値は、真陽性 (正しく予測された陽性インスタンス)、真陰性 (正しく予測された陰性インスタンス)、および偽陽性 (誤って予測された陽性インスタンス) です。