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

می توان از آن در طبقه بندی های باینری و همچنین در مسائل طبقه بندی چند طبقه استفاده کرد.
ماتریس سردرگمی
آ ماتریس سردرگمی یک نمایش بصری از عملکرد یک مدل یادگیری ماشینی است. مقادیر واقعی و پیشبینیشده یک مدل طبقهبندی را برای شناسایی طبقهبندیهای اشتباه خلاصه میکند. ماتریس سردرگمی به دانشمندان داده کمک می کند تا مدل های خود را دقیق تنظیم کنند و عملکرد خود را بهبود بخشند.
ماتریس سردرگمی چه چیزی را اندازه گیری می کند؟
کیفیت پیشبینیهای یک مدل طبقهبندی را با نگاه کردن به آن اندازهگیری میکندچند پیشبینی درست و چند پیشبینی نادرست است.
به طور خاص محاسبه می کند:
- نکات مثبت واقعی (TP)
- موارد مثبت کاذب (FP)
- منفی واقعی (TN)
- منفی های کاذب (FN)
درک ماتریس سردرگمی
در اینجا سعی خواهیم کرد معنی مقادیر مثبت واقعی، منفی واقعی، مثبت کاذب و منفی کاذب را معنا کنیم.
مثبت واقعی
مدل درست پیش بینی کرد و درست است.
مدل پیش بینی کرد که کسی بیمار است و شخص بیمار است.
منفی واقعی
تیمدل او نادرست پیش بینی کرد و نادرست است.
مدل پیش بینی کرد که کسی بیمار نیست و شخص بیمار نیست.
مثبت کاذب
تیاو مدل درست را پیش بینی کرد و نادرست است.
مدل پیش بینی کرد که کسی بیمار است و شخص بیمار نیست.
منفی اشتباه
تیاو مدل نادرست پیش بینی کرد و درست است.
مدل پیش بینی کرد که کسی بیمار نیست و شخص بیمار است.
چگونه یک ماتریس سردرگمی در Scikit-learn ایجاد کنیم؟
برای به دست آوردن یک ماتریس سردرگمی در scikit-learn:
- یک الگوریتم طبقه بندی را اجرا کنید
classifier.fit (X_train، y_train)
y_pred = classifier.predict(X_test) - معیارها را از ماژول sklearn وارد کنید
از sklearn.metrics import confusion_matrix
- تابع ماتریس سردرگمی را روی مقادیر واقعی و پیش بینی شده اجرا کنید
confusion_matrix(y_test، y_pred)
- ماتریس سردرگمی را رسم کنید
plot_confusion_matrix(طبقه بندی، X_test، y_test، cmap=plt.cm.Blues)
plt.show() - گزارش طبقه بندی را بررسی کنید
چاپ (گزارش_طبقهبندی (y_test، y_pred))
یک الگوریتم طبقه بندی را اجرا کنید
در مقاله قبلی، سرطان های سینه را با استفاده از الگوریتم 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]
= TPcm[1][1]
= TNcm[0][1]
= FPcm[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 |
سوالات متداول ماتریس سردرگمی
یک الگوریتم طبقه بندی را اجرا کنید، تابع ماتریس سردرگمی را از ماژول sklearn.metrics وارد کنید، تابع را روی تست و پیش بینی اجرا کنید و ماتریس را رسم کنید.
از ماتریس سردرگمی برای ارزیابی عملکرد الگوریتم طبقه بندی یادگیری ماشین استفاده کنید.
ماتریس سردرگمی بینش بیشتری نسبت به دقت طبقه بندی در مورد عملکرد یک مدل ارائه می دهد زیرا تعداد نمونه های طبقه بندی شده صحیح و نادرست را نشان می دهد.
ماتریس های سردرگمی دقت پیش بینی کلاس ها را نشان می دهد. هنگام تلاش برای پیشبینی خروجی عددی مانند خروجی پیوسته یک مدل رگرسیون، ماتریس سردرگمی نباید استفاده شود.
ماتریس سردرگمی برای ارزیابی دقت یک مدل یادگیری ماشینی استفاده میشود که سعی در پیشبینی کلاسها دارد (مثلاً طبقهبندی).
از تابع confusion_matrix از ماژول sklearn.metrics استفاده کنید.
خیر. ماتریس سردرگمی را می توان برای طبقه بندی باینری و همچنین مسائل طبقه بندی چند طبقه استفاده کرد.
نتیجه
درک این مقاله بسیار بزرگ بود.
تنها چیزی که از شما می خواهم این است که نگاهی به ماتریس سردرگمی بسیار مهم است تا به شما در تنظیم دقیق مدل های یادگیری ماشین کمک کند.
این می تواند امتیاز دقت را در برخی موارد به شدت تغییر دهد.
کار خوبی برای ساختن اولین ماتریس سردرگمی در Scikit-learn است.
استراتژیست سئو در Tripadvisor، Seek سابق (ملبورن، استرالیا). متخصص در سئو فنی. در تلاش برای سئوی برنامهریزی شده برای سازمانهای بزرگ از طریق استفاده از پایتون، R و یادگیری ماشین.