نحوه استفاده از ماتریس سردرگمی در Scikit-Learn (با مثال پایتون)

ماتریس سردرگمی اغلب در یادگیری ماشین برای محاسبه دقت یک الگوریتم طبقه بندی استفاده می شود.

confusion-matrix-sklearn

می توان از آن در طبقه بندی های باینری و همچنین در مسائل طبقه بندی چند طبقه استفاده کرد.

ماتریس سردرگمی

آ ماتریس سردرگمی یک نمایش بصری از عملکرد یک مدل یادگیری ماشینی است. مقادیر واقعی و پیش‌بینی‌شده یک مدل طبقه‌بندی را برای شناسایی طبقه‌بندی‌های اشتباه خلاصه می‌کند. ماتریس سردرگمی به دانشمندان داده کمک می کند تا مدل های خود را دقیق تنظیم کنند و عملکرد خود را بهبود بخشند.

ماتریس سردرگمی چه چیزی را اندازه گیری می کند؟

کیفیت پیش‌بینی‌های یک مدل طبقه‌بندی را با نگاه کردن به آن اندازه‌گیری می‌کندچند پیش‌بینی درست و چند پیش‌بینی نادرست است.

به طور خاص محاسبه می کند:

  • نکات مثبت واقعی (TP)
  • موارد مثبت کاذب (FP)
  • منفی واقعی (TN)
  • منفی های کاذب (FN)

درک ماتریس سردرگمی

در اینجا سعی خواهیم کرد معنی مقادیر مثبت واقعی، منفی واقعی، مثبت کاذب و منفی کاذب را معنا کنیم.

مثبت واقعی

مدل درست پیش بینی کرد و درست است.

مدل پیش بینی کرد که کسی بیمار است و شخص بیمار است.

منفی واقعی

تیمدل او نادرست پیش بینی کرد و نادرست است.

مدل پیش بینی کرد که کسی بیمار نیست و شخص بیمار نیست.

مثبت کاذب

تیاو مدل درست را پیش بینی کرد و نادرست است.

مدل پیش بینی کرد که کسی بیمار است و شخص بیمار نیست.

منفی اشتباه

تیاو مدل نادرست پیش بینی کرد و درست است.

مدل پیش بینی کرد که کسی بیمار نیست و شخص بیمار است.

چگونه یک ماتریس سردرگمی در Scikit-learn ایجاد کنیم؟

برای به دست آوردن یک ماتریس سردرگمی در scikit-learn:

  1. یک الگوریتم طبقه بندی را اجرا کنید

    classifier.fit (X_train، y_train)
    y_pred = classifier.predict(X_test)

    چگونه مرحله 1 را انجام دهیم

  2. معیارها را از ماژول sklearn وارد کنید

    از sklearn.metrics import confusion_matrix

    چگونه مرحله 2 را انجام دهیم

  3. تابع ماتریس سردرگمی را روی مقادیر واقعی و پیش بینی شده اجرا کنید

    confusion_matrix(y_test، y_pred)

    چگونه مرحله 3 را انجام دهیم

  4. ماتریس سردرگمی را رسم کنید

    plot_confusion_matrix(طبقه بندی، X_test، y_test، cmap=plt.cm.Blues)
    plt.show()

    چگونه مرحله 4 را انجام دهیم

  5. گزارش طبقه بندی را بررسی کنید

    چاپ (گزارش_طبقه‌بندی (y_test، y_pred))

    چگونه مرحله 5 را انجام دهیم

یک الگوریتم طبقه بندی را اجرا کنید

در مقاله قبلی، سرطان های سینه را با استفاده از الگوریتم k-nearest همسایه از scikit-learn طبقه بندی کردیم.

من این قسمت از کد را توضیح نمی دهم، اما می توانید جزئیات را در مقاله k-nearest همسایه ها مشاهده کنید.

import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split

def to_target(x):
    """Map targets to target names"""    
    return list(dataset.target_names)[x]

# Load data
dataset = load_breast_cancer()
df = pd.DataFrame(dataset.data,columns=dataset.feature_names)
df['target'] = pd.Series(dataset.target)
df['target_names'] = df['target'].apply(to_target)


# Define predictor and predicted datasets
X = df.drop(['target','target_names'], axis=1).values
y = df['target_names'].values

# split taining and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y)

# train the model
knn = KNeighborsClassifier(n_neighbors=8)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)

# compute accuracy of the model
knn.score(X_test, y_test)

نتیجه یک امتیاز دقت مدل است.

یک ماتریس سردرگمی ایجاد کنید

استفاده کنید confusion_matrix روش از sklearn.metrics برای محاسبه ماتریس سردرگمی

from sklearn.metrics import confusion_matrix

cm = confusion_matrix(y_test,y_pred)
cm

نتیجه آرایه‌ای است که در آن موقعیت‌ها همان ربعی است که در گذشته دیدیم.

array([[ 57,   7],
       [  5, 102]])
  • cm[0][0] = TP
  • cm[1][1] = TN
  • cm[0][1] = FP
  • cm[1][0] = FN

ماتریس سردرگمی را رسم کنید

می توانید استفاده کنید plot_confusion_matrix روشی برای تجسم ماتریس سردرگمی

import matplotlib.pyplot as plt
from sklearn.metrics import plot_confusion_matrix

color = 'white'
matrix = plot_confusion_matrix(knn, X_test, y_test, cmap=plt.cm.Blues)
matrix.ax_.set_title('Confusion Matrix', color=color)
plt.xlabel('Predicted Label', color=color)
plt.ylabel('True Label', color=color)
plt.gcf().axes[0].tick_params(colors=color)
plt.gcf().axes[1].tick_params(colors=color)
plt.show()

نتیجه نمودار ماتریس سردرگمی شما است.

  • ربع بالا سمت چپ = مثبت واقعی = تعداد خوش خیم برچسب شده به عنوان خوش خیم
  • ربع پایین سمت راست = منفی واقعی = تعداد بدخیم برچسب بدخیم
  • ربع بالا سمت راست = مثبت کاذب = تعداد خوش خیم های برچسب شده به عنوان بدخیم
  • ربع پایین سمت چپ = منفی کاذب = تعداد بدخیم برچسب شده به عنوان خوش خیم

ممکن است با این خطا مواجه شوید:

ImportError: cannot import name 'plot_confusion_matrix' from 'sklearn.metrics'

یا موارد زیر FutureWarning:

FutureWarning: Function plot_confusion_matrix is deprecated; Function `plot_confusion_matrix` is deprecated in 1.0 and will be removed in 1.2. Use one of the class methods: ConfusionMatrixDisplay.from_predictions or ConfusionMatrixDisplay.from_estimator.
  warnings.warn(msg, category=FutureWarning)

این بخاطر این است که plot_confusion_matrix در برخی از نسخه ها منسوخ شد.

جایگزین استفاده است ConfusionMatrixDisplay.

import matplotlib.pyplot as plt
from sklearn.metrics import ConfusionMatrixDisplay
from sklearn.metrics import confusion_matrix

cm = confusion_matrix(y_test, y_pred, labels=knn.classes_)
color = 'white'
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=knn.classes_)
disp.plot()
plt.show()

گزارش طبقه بندی را اجرا کنید

با داده های ماتریس سردرگمی، می توانید نتایج را با مشاهده گزارش طبقه بندی تفسیر کنید.

from sklearn.metrics import classification_report

print(classification_report(y_test, y_pred))

این گزارش معیارهای مربوط به ارزیابی مدل طبقه‌بندی شما را برمی‌گرداند:

متریک آنچه هست روش متریک اسکلرن
دقت (مثبت واقعی + منفی واقعی) / کل پیش بینی ها metrics.precision_score(true, pred)
دقت، درستی مثبت واقعی / (مثبت واقعی + مثبت کاذب) metrics.precision_score(true, pred)
به خاطر آوردن مثبت واقعی / (مثبت واقعی + منفی کاذب) metrics.recall_score(true, pred)
امتیاز F1 2 * ((یادآوری * دقت) / (دقت + فراخوان)) metrics.f1_score(true, pred)
اختصاصی منفی واقعی / (منفی واقعی + مثبت کاذب) metrics.recall_score(true, pred, pos_label=0)

اگر نتیجه بالا را متوجه نشدید، مطمئن شوید که مقاله ای را که در گزارش طبقه بندی نوشتم مطالعه کرده اید.

ماتریس سردرگمی برای طبقه بندی چند طبقه

#Import the necessary libraries
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.metrics import accuracy_score

# Load the wine dataset
X, y = load_wine(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.25)
 
# Train the model
clf = RandomForestClassifier(random_state=23)
clf.fit(X_train, y_train)
 
# Predict using the test data
y_pred = clf.predict(X_test)
 
# Compute the confusion matrix
cm = confusion_matrix(y_test,y_pred)
 
# Plot the confusion matrix.
sns.heatmap(cm,
            annot=True)
plt.ylabel('Prediction',fontsize=13)
plt.xlabel('Actual',fontsize=13)
plt.title('Confusion Matrix',fontsize=17)
plt.show()
 
# Calculate accuracy
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy   :", accuracy)

تعاریف

ماتریس سردرگمی اندازه گیری کیفیت پیش بینی ها
Scikit- Learn بسته یادگیری ماشین در پایتون
مثبت واقعی مدل کلاس مثبت را به درستی پیش بینی می کند
مثبت کاذب مدل کلاس مثبت را به اشتباه پیش بینی می کند
منفی واقعی مدل کلاس منفی را به درستی پیش بینی می کند
منفی اشتباه مدل کلاس منفی را به اشتباه پیش بینی می کند

برگه تقلب

اسکلرن را نصب کنید pip install -U scikit-learn
واردات کتابخانه پایتون از sklearn.metrics import confusion_matrix
ماتریس سردرگمی طرح sklearn.metrics.plot_confusion_matrix
گزارش طبقه بندی sklearn.metrics.classification_report

سوالات متداول ماتریس سردرگمی

چگونه یک ماتریس سردرگمی در scikit-learn بدست آورید؟

یک الگوریتم طبقه بندی را اجرا کنید، تابع ماتریس سردرگمی را از ماژول sklearn.metrics وارد کنید، تابع را روی تست و پیش بینی اجرا کنید و ماتریس را رسم کنید.

چرا از ماتریس سردرگمی استفاده کنیم؟

از ماتریس سردرگمی برای ارزیابی عملکرد الگوریتم طبقه بندی یادگیری ماشین استفاده کنید.

آیا ماتریس سردرگمی بهتر از دقت است؟

ماتریس سردرگمی بینش بیشتری نسبت به دقت طبقه بندی در مورد عملکرد یک مدل ارائه می دهد زیرا تعداد نمونه های طبقه بندی شده صحیح و نادرست را نشان می دهد.

آیا می توان از ماتریس سردرگمی بر روی مقادیر پیوسته (به عنوان مثال رگرسیون خطی) استفاده کرد؟

ماتریس های سردرگمی دقت پیش بینی کلاس ها را نشان می دهد. هنگام تلاش برای پیش‌بینی خروجی عددی مانند خروجی پیوسته یک مدل رگرسیون، ماتریس سردرگمی نباید استفاده شود.

ماتریس سردرگمی برای چه مواردی استفاده می شود؟

ماتریس سردرگمی برای ارزیابی دقت یک مدل یادگیری ماشینی استفاده می‌شود که سعی در پیش‌بینی کلاس‌ها دارد (مثلاً طبقه‌بندی).

چگونه می توان یک ماتریس سردرگمی در پایتون ایجاد کرد؟

از تابع confusion_matrix از ماژول sklearn.metrics استفاده کنید.

آیا ماتریس سردرگمی فقط برای مسائل طبقه بندی باینری است؟

خیر. ماتریس سردرگمی را می توان برای طبقه بندی باینری و همچنین مسائل طبقه بندی چند طبقه استفاده کرد.

نتیجه

درک این مقاله بسیار بزرگ بود.

تنها چیزی که از شما می خواهم این است که نگاهی به ماتریس سردرگمی بسیار مهم است تا به شما در تنظیم دقیق مدل های یادگیری ماشین کمک کند.

این می تواند امتیاز دقت را در برخی موارد به شدت تغییر دهد.

کار خوبی برای ساختن اولین ماتریس سردرگمی در Scikit-learn است.