در مطلب ایجاد مدل رگرسیون لجستیک توسط Scikit-Learn در مورد طبقه بندی دودویی برای پیش بینی زنده ماندن یا کشته شدن مسافرهای درون کشتی تایتانیک صحبت کردیم. در این مطلب می خواهیم معیارهای متفاوت الگوریتم های طبقه بندی را معرفی کنیم و سپس از کتابخانه Scikit-Learn کمک بگیریم تا بتوانیم این معیارها را نشان دهیم. توجه کنید برای این مطلب از مدل ایجاد شده در ایجاد مدل رگرسیون لجستیک توسط Scikit-Learn استفاده می کنیم، پس لازم است تا سورس آنرا از اینجا دانلود کنید.

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

ماتریس درهم ریختگی (Confusion Matrix)، ماتریسی است که در آن عملکرد الگوریتم‌ مربوطه نشان داده می شود. معمولاً چنین نمایشی برای الگوریتم‌های یادگیری نظارت شده (Supervised Learning) استفاده می‌شود ولی در یادگیری نظارت نشده (Unsupervised Learning) نیز کاربرد دارد. از این جدول (ماتریس) برای تعیین مقدار شاخص‌های(معیارهای) ارزیابی مانند دقت (Precision) و درستی (یا صحت – Recall) استفاده می‌شود.

اگر فرض کنیم که ماتریس درهم رخیتگی را برای طبقه بندی دودویی در اختیار داریم، می توانیم داده های زیر را از ماتریس درهم ریختگی آن بدست آوریم. فرض کنید ماتریس را برای مدل رگرسیون لجستیک مطلب پیشین در اختیار داریم، پس دو کلاس No و Yes وجود دارند. البته ماتریس درهم رختگی را می توان برای طبقه بندی های چند کلاسی نیز می توان گسترش داد.

در کدهای زیر و توسط ()confusion_matrix می توانیم ماتریس درهم رخیتگی را برای مقدارهای پیش بینی شده درون متغیر prediction و بر اساس مجموعه داده آزمایش y_test بدست آوریم. توجه کنید متغیر y_test از اجرای ()train_test_split و متغیر prediction از اجرای متد ()predict از کلاس LogisticRegression در مطلب ایجاد مدل رگرسیون لجستیک توسط Scikit-Learn بدست آمده اند.

برخی از واژگان (اصطلاحات) مرتبط

۱ – درست مثبت (TP – True Positive): در مواردی که مدل Yes را پیش بینی کرده است و همچنین مسافر زنده مانده است. به عبارت دیگر نمونه مثبت است و همچنین مدل مثبت را نیز پیش بینی کرده است.

۲ – درست منفی (TN – True Negative): در مواردی که مدل No را پیش بینی کرده است ولی مسافر زنده مانده است. به عبارت دیگر نمونه مثبت است ولی مدل منفی را پیش بینی کرده است.

۳ – نادرست مثبت (False Positive – FP): در مواردی که مدل No را پیش بینی کرده است و همچنین مسافر کشته شده است. به عبارت دیگر نمونه منفی است و همچنین مدل منفی را نیز پیش بینی کرده است.

۴ – نادرست منفی (FN – False Negative): در مواردی که مدل Yes را پیش بینی کرده است ولی مسافر کشته شده است. به عبارت دیگر نمونه منفی است ولی مدل مثبت را پیش بینی کرده است.

بنابراین ماتریس درهم ریختگی، جدولی دو بعدی است که معمولا سطرهای آن معمولا کلاس واقعی (Actual Class) و ستون های آن کلاس پیش بینی شده (Prediction Class) است. شکل زیر ماتریس درهم ریختگی را برای طبقه بندی دودویی نشان می دهد.

قطعه کد زیر مثالی از کاربرد ()confusion_matrix را نشان می دهد که پارامتر اول آن لیست کلاس های واقعی و پارامتر دوم لیست کلاس های پیش بینی شده را تعیین می کنند. دو متغیر y_true و y_pred به ترتیب لیست کلاس های واقعی و لیست کلاس های پیش بینی شده به صورت عددی را نشان می دهند. توجه کنید در این حالت سه کلاس به شماره عددهای صفر، یک و دو داریم.

توجه کنید متغیر y_pred در واقع شبیه سازی شده است و به عبارت دیگر خروجی واقعی مدل نیستند. شکل زیر نشان می دهد که نوع خروجی ()confusion_matrix از آرایه های NumPy است. در ادامه می خواهیم چگونگی کشیدن نمودار ماتریس در هم ریختگی را بوسیله کتابخانه های matplotlib و seaborn نشان دهیم.

در کدهای زیر ابتدا یک DataFrame از روی آرایه NumPy یعنی متغیر cm ایجاد کرده ایم و سپس توسط متد ()heatmap از روی این DataFrame نموداری را رسم کرده ایم که ماتریس یا جدول در هم ریختگی را نشان می دهد. همانطور که می بینید کلاس های (برچسب های) پیش بینی شده در محور X ها و کلاس های واقعی (برچسب های واقعی – Actual Label) در محور Y ها نشان داده شده اند.

نقشه گرمایی یا نقشه رنگی (Heat Map) یک نوع تصویرسازی از اطلاعات (Data Visualization) است که در آن مقدار هر خانه از ماتریس ورودی با یک رنگ نمایش داده‌می‌شود. معمولاً خانه‌هایی که دارای مقادیر بالایی هستند با رنگ‌های تیره‌تری نسب به خانه‌هایی که دارای مقادیر کمتری هستند به نمایش گذاشته می‌شوند. به‌طور معمول برای رنگ‌آمیزی نقشه رنگی برای هر مقدار از رنگی متفاوتی استفاده می‌کنند درحالی که محاسبه رنگ‌آمیزی با یک رنگ و شدت‌های مختلف آن ساده‌تر است. دلیل این امر تشخیص بهتر تفاوت رنگ‌های مختلف توسط چشم انسان است.

شاخص های الگوریتم های طبقه بندی

در یادگیری ماشین هر کدام از الگوریتم های یادگیری را توسط شاخص های (معیارهای – Metrics) متفاوت ارزیابی می کنند. در این مطلب می خواهیم در مورد معیارهای ارزیابی الگوریتم های طبقه بندی صحبت کنیم و برای این منظور از واژه هایی که در بالا آموزش دادیم برای توضیح شاخص های ارزیابی الگوریتم های طبقه بندی کمک می گیریم. در ادامه هر کدام از این معیارها توضیح داده شده اند. ماتریس درهم ریختگی یکی از ساده ترین شاخص های مورد استفاده برای پیدا کردن درستی (Correctness) و دقت (Accuracy) مدل است. ماتریس درهم ریختگی برای مسئله طبقه بندی استفاده می شود که در آن خروجی می تواند یکی از دو یا چندین نوع کلاس باشد.

۱ – دقت

دقت (Accuracy) یکی از شاخص های ارزیابی مدل های طبقه بندی (Classification Model) است. معادله شکل زیر تعریف رسمی دقت را نشان می دهد و مطابق با آن دقت برابر است با تقسیم تعداد پیش بینی های درست بر تعداد کل پیش بینی های بدست آمده.

دقت شاخص خوبی است، اگر کلاس های متغیر هدف (Target یا برچسب) در مجموعه داده ها تقریبا متوازن باشند. مطابق با طبقه بندی دودویی می توانیم معادله دقت را به صورت زیر بنویسیم. به طور مثال می توانیم به پیش بینی اسپم بودن یا نبودن رایانامه ها (Email) یا پیامک ها (SMS) اشاره کنیم.

برای بدست آوردن دقت یک مدل در کتابخانه Scikit-Learn باید از ()accuracy_score استفاده کنیم. پارامتر اول آن نام متغیری است که مجموعه آزمایش (در کد و شکل زیر متغیر y_test از خروجی ()train_test_split) و پارامتر دوم آن متغیری است که پیش بینی ها را نگه می دارد. (در کد و شکل زیر متغیر prediction از خروجی متد ()predict)

توجه کنید که ماتریس درهم ریختگی زیر برای مدل رگرسیون لجستیک مطلب پیشین است.

مثال: فرض کنید در یک کلاس بندی دودویی تعداد درست مثبت (True Positive -TP) برابر با ۹۰، تعداد نادرست مثبت (False Positive – FP) برابر با ۱ و تعداد درست منفی (True Negative – TN) برابر با ۸ و تعداد نادرست منفی (Flase Negative – FN) برابر با ۱ است، بنابراین با توجه به فرمول دقت (Accuracy)، مقدار دقت برابر با ۰.۹۸ خواهد بود.

با توجه به مثال بالا می خواهیم به چندین پرسش زیر پاسخ دهیم، به عبارت دیگر با پاسخ دادن به این پرسش ها می توانیم اهمیت شاخص دقت را درک کنیم و از این رو می توانیم کارایی مدل را ارزیابی کنیم. توجه کنید که در این مثال مسئله طبقه بندی دودویی است که مثبت یعنی زنده ماندن و منفی یعنی کشته شدن مسافرهای کشتی تایتانیک.

۱ – از میان ۱۰۰ نمونه، چه تعداد زندن مانده اند و چه تعداد کشته شده اند؟ ۹۱ (TP + FN) مسافر زنده مانده اند و ۹ (TN + FP) مسافر کشته شده اند. توجه کنید که در FN به اشتباه زنده ماندن (Yes یا Positive) پیش بینی شده است در حالی که با توجه به ورودی های جدید، باید کشته شدن (No یا Negative) پیش بینی می شد. در مورد FP نیز به همین ترتیب است با این تفاوت که باید زنده ماندن پیش بینی می شد ولی کشته شدن پیش بینی شده است.

۲ – از ۹ نفر کشته شده، مدل چه تعداد را به درستی کشته شده پیش بینی کرده است؟ ۸ نفر که برابر است به مقدار TN.

۲ – دقت

دقت (Precision) یکی دیگر از شاخص های ارزیابی مدل های طبقه بندی است. در واقع درستی به دنبال پاسخ دادن به این پرسش است که چه نستی از کلاس هایی که به عنوان مثبت (Positive) شناسایی شده اند، واقعا درست (Correct) هستند. معادله شکل زیر تعریف رسمی دقت را نشان می دهد و مطابق آن دقت برابر است با تقسیم تعداد درست های مثبت به مجموع درست های مثبت و درست های منفی. به طور کلی، دقت (Precision) عبارت است از اینکه، چه میزان از نمونه‌های انتخابی درست هستند.

برای بدست آوردن دقت یک مدل در کتابخانه Scikit-Learn باید از ()classification_report استفاده کنیم. پارامتر اول آن نام متغیری است که مجموعه آزمایش (در کد و شکل زیر متغیر y_test از خروجی ()train_test_split) و پارامتر دوم آن متغیری است که پیش بینی ها را نگه می دارد. (در کد و شکل زیر متغیر prediction از خروجی متد ()predict). همانطور که از خروجی شکل زیر مشخص است، شاخص دقت (Percision) برای هردو کلاس محاسبه شده است. شاخض دقت برای هر کدام از کلاس ها برابر است با نرخ درست مثبت (True Positive) بر مجموع درست و نادرست مثبت.

مثال: فرض کنید در یک کلاس بندی دودویی تعداد درست مثبت (True Positive -TP) برابر با ۹۰، تعداد نادرست مثبت (False Positive – FP) برابر با ۱ و تعداد درست منفی (True Negative – TN) برابر با ۸ و تعداد نادرست منفی (Flase Negative – FN) برابر با ۱ است، بنابراین با توجه به فرمول دقت (Precision)، مقدار دقت برابر با ۰.۹ خواهد بود.

۳ – درستی

درستی (Recall) یکی دیگر از شاخص های ارزیابی مدل های طبقه بندی است. در واقع درستی به دنبال پاسخ دادن به این پرسش است که چه میزان از نمونه‌های مثبت واقعی موجود، به درستی انتخاب شده اند. معادله شکل زیر تعریف رسمی دقت را نشان می دهد و مطابق آن دقت برابر است با تقسیم تعداد درست های مثبت به مجموع درست های مثبت و نا درست های منفی.

در خروجی شکل های بالا و مربوط به ()classification_report می توانید در کنار شاخص Percision، مقدار ماحسبه شده برای شاخص Recall را نیز ببینید. با توجه به معادله شاخص درستی، و با توجه به چهار مقدار گفته شده در مثال های بالا، مقدار شاخص درستی برابر با ۹۸٪ خواهد بود.