ماتریس سردرگمی (Confusion Matrix) ابزاری است که برای ارزیابی عملکرد یک مدل طبقهبندی استفاده میشود. این ماتریس به صورت یک جدول مربعی نمایش داده میشود که در آن، نتایج پیشبینی مدل در مقابل نتایج واقعی قرار میگیرند.
1. True Positive (TP): تعداد نمونههای مثبتی که به درستی توسط مدل به عنوان مثبت پیشبینی شدهاند.
2. False Positive (FP): تعداد نمونههای منفی که به اشتباه توسط مدل به عنوان مثبت پیشبینی شدهاند.
3. False Negative (FN): تعداد نمونههای مثبتی که به اشتباه توسط مدل به عنوان منفی پیشبینی شدهاند.
4. True Negative (TN): تعداد نمونههای منفی که به درستی توسط مدل به عنوان منفی پیشبینی شدهاند.
با استفاده از عناصر ماتریس سردرگمی میتوان معیارهای مختلفی برای ارزیابی عملکرد مدل محاسبه کرد. این معیارها عبارتند از:
1. دقت (Accuracy):
دقت نسبت نمونههای درست پیشبینی شده (مثبت و منفی) به کل نمونهها را نشان میدهد.
2. دقت مثبت (Precision):
دقت مثبت نشان میدهد چه درصدی از نمونههای پیشبینی شده به عنوان مثبت واقعاً مثبت هستند.
3. بازخوانی یا حساسیت (Recall):
بازخوانی نشان میدهد چه درصدی از نمونههای مثبت واقعی توسط مدل به درستی به عنوان مثبت شناسایی شدهاند.
4. امتیاز F1 (F1 Score):
F1 Score = 2 * (Precision * Recall) / (Precision + Recall)
امتیاز F1 میانگین هارمونیک دقت و بازخوانی است و زمانی که تعادل بین دقت و بازخوانی مهم است، استفاده میشود.
برای درک بهتر این مفاهیم، میتوانیم یک ماتریس سردرگمی را برای یک مجموعه داده نمونه رسم کنیم. به عنوان مثال، از مجموعه دادههای Iris و مدل رگرسیون لجستیک استفاده میکنیم.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
data = load_iris()
X = data.data
y = data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=data.target_names)
disp.plot(cmap=plt.cm.Blues)
plt.title('Confusion Matrix')
plt.show()
در این نمودار:
- محور افقی نشاندهندهی برچسبهای پیشبینی شده (Predicted Labels) است.
- محور عمودی نشاندهندهی برچسبهای واقعی (True Labels) است.
- هر خانه نشاندهنده تعداد نمونههایی است که به آن کلاس خاص تعلق دارند.
برای مثال:
- خانهی [0, 0] نشاندهنده تعداد نمونههایی است که به درستی به عنوان کلاس 0 پیشبینی شدهاند (True Positive).
- خانهی [0, 1] نشاندهنده تعداد نمونههایی است که به اشتباه به عنوان کلاس 0 پیشبینی شدهاند، در حالی که واقعاً کلاس 1 هستند (False Positive).