در جهان داده‌محوری زندگی می‌کنیم که هوش مصنوعی و یادگیری ماشین از داده‌ها برای شناختن جامعه، پیش‌بینی خروجی کسب‌وکارها، تصمیم‌گیری و توسعه استفاده می‌کنند. از «طبقه‌بندی» (Classification) به عنوان یکی از رایج‌ترین روش‌های یادگیری ماشین «نظارت شده» (Supervised) یاد می‌شود. الگوریتم‌های طبقه‌بندی، نمونه‌های داده را گروه‌بندی کرده و گستره کاربردهای وسیعی از شناسایی ایمیل‌های اسپم گرفته تا تشخیص گفتار دارند. در این مطلب از مجله فرادرس، یاد می‌گیریم طبقه بندی یا Classification چیست و با مفهوم و همچنین کاربردهای آن در یادگیری ماشین آشنا می‌شویم.

فهرست مطالب این نوشته

 

در این مطلب، ابتدا به معرفی مفهوم یادگیری نظارت شده می‌پردازیم و به پرسش Classification چیست پاسخ می‌دهیم. سپس با کاربردهای طبقه بندی در زندگی واقعی و همچنین نقش انواع یادگیرنده‌ها در مسائل طبقه‌بندی آشنا می‌شویم. در انتهای این مطلب از مجله فرادرس، شرحی از کاربردهای طبقه‌بندی در یادگیری ماشین ارائه داده و پس از بررسی و پیاده‌سازی الگوریتم‌های طبقه‌بندی رایج، به چند مورد از پرسش‌های متداول در این زمینه پاسخ می‌دهیم.

معرفی یادگیری نظارت شده

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

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

انواع یادگیری نظارت شده
انواع یادگیری نظارت شده

عمده کاربرد یادگیری نظارت شده در جمع‌آوری و تولید خروجی داده‌ها و حل مسائل جهان حقیقی است. همچنین در طی سال‌های اخیر، الگوریتم‌های نظارت شده در امور تجاری نیز بسیار ارزش‌آفرین بوده‌اند. با این حال، باید توجه داشت که آموزش مدل‌های یادگیری ماشین به خودی خود فرایند زمان‌بری است و اگر مجموعه‌داده نیز بزرگ باشد، انجام عمل طبقه‌بندی با چالش مواجه می‌شود. الگوریتم‌های یادگیری نظارت شد را می‌توان به دو دسته زیر تقسیم کرد:

  • «رگرسیون» (Regression): از رگرسیون در مسائلی که مقادیر خروجی حقیقی یا پیوسته دارند استفاده می‌شود. هدف از این تکنیک، ترسیم رابطه‌ای قابل پیش‌بینی میان متغیرهای «وابسته» (Dependent) و «مستقل» (Independent) است.
  • «طبقه‌بندی» (Classification): کاربرد طبقه‌بندی در شناسایی دسته یا گروه داده‌های جدید بر اساس یک یا تعداد بیشتری متغیر مستقل خلاصه می‌شود.

طبقه بندی یا Classification چیست؟

بهتر است پرسش Classification چیست را این‌گونه پاسخ دهیم که به زیرمجموعه‌ای از یادگیری ماشین که مجموعه‌ای از داده‌های ورودی را بر اساس یک یا چند متغیر در کلاس‌های مختلف گروه‌بندی می‌کند، طبقه‌بندی یا Classification گفته می‌شود. الگوریتم‌های طبقه‌بندی بر روی هر دو نوع محتوای «ساختارمند» (Structured) مانند جداول و پایگاه‌های داده و «بدون ساختار» (Unstructured) مانند محتوای متنی و تصویری قابل پیاده‌سازی بوده و می‌توانند داده‌های ورودی را با دقت در دسته‌های از پیش مشخص شده گروه‌بندی کنند. فرایند طبقه‌بندی به حداقل دو کلاس یا دسته برای جداسازی مجموعه‌داده نیاز دارد. از همین جهت، خروجی این روش، مقدار احتمالاتی است که درصد تعلق داشتن نمونه را به دسته‌ای خاص مشخص می‌کند. به عنوان مثال، ایمیل اسپم یا عادی، وجود یا عدم وجود بیماری، قرمز یا سبز و مرد یا زن، نمونه‌هایی از دسته‌های یک مسئله طبقه‌بندی هستند.

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

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

کاربرد های طبقه بندی در جهان حقیقی

  • «دسته‌بندی تصاویر» (Image Classification)
  • «تشخیص کلاهبرداری» (Fraud Detection)
  • «دسته‌بندی اسناد» (Document Classification)
  • «تشخیص چهره» (Facial Recognition)
  • «تشخیص صدا» (Voice Recognition)
  • «تشخیص پزشکی» (Medical Diagnosis)
  • «کنترل کیفیت» (Quality Control)
  • «سیستم‌های توصیه‌گر» (Recommendation Systems)

نقش یادگیرنده ها در مسائل Classification چیست؟

در پاسخ به پرسش Classification چیست، آشنایی با انواع مختلف یادگیرنده در مسائل طبقه‌بندی ضرورت دارد. به‌طور کلی، یادگیرنده‌ها به دو دسته «یادگیرنده تنبل» (Lazy Learners) و «یادگیرنده مشتاق» (Eager Learners) تقسیم می‌شوند که در ادامه هر کدام را مورد بررسی قرار می‌دهیم.

یادگیرنده های تنبل

این گروه از یادگیرنده‌ها، ابتدا مجموعه‌داده آموزشی را ذخیره کرده و در زمان آزمایش از آن استفاده می‌کنند. هدف اصلی یادگیرنده تنبل، به‌روزرسانی مداوم مجموعه‌داده با نمونه ورودی‌های جدید است. با این حال، همزمان با تکرار فرایند به‌روزرسانی، داده‌های بیشتری به اصطلاح منسوخ می‌شوند و به همین خاطر است که در مقایسه با سایر الگوریتم‌ها، یادگیرنده تنبل زمان کمتری برای آموزش و زمان بیشتری برای پیش‌بینی می‌گذارد. به صورت خاص، الگوریتم یادگیرنده تنبل مناسب مجموعه‌داده‌های بزرگی است که مدام در حال تغییر بوده و همچنین ویژگی‌های اندکی دارند. مدیریت و نگه‌داری از این یادگیرنده‌ها آسان بوده و در مسائل مختلفی مورد استفاده قرار می‌گیرند. به عنوان چند نمونه از یادگیرنده‌های تنبل می‌توان به «رگرسیون محلی» (Local Regression)، «قواعد بیز تنبل» (Lazy Bayesian Rules)، الگوریتم «K-نزدیک‌ترین همسایه» (K-Nearest Neighbor | KNN)، «یادگیری مبتنی‌بر نمونه» (Instance-based Learning) و «استدلال مبتنی‌بر مورد» (Case-based Reasoning) اشاره کرد.

تفاوت میان یادگیرنده های تنبل و یادگیرنده های مشتاق

یادگیرنده های مشتاق

پیش از دریافت مجموعه‌داده برای انجام مراحل آموزش و ارزیابی، یادگیرنده‌های مشتاق ابتدا یک لایه طبقه‌بندی ایجاد می‌کنند. نحوه کار یادگیرنده‌های مشتاق به این شکل است که بر اساس داده‌های آموزشی و زودتر از آن‌که نمونه‌های ورودی جدید را دریافت و بررسی کنند، توصیف صریحی از فضای آموزش می‌سازند. به همین خاطر و از آنجا که محصول نهایی یک مدل طبقه‌بندی است، این الگوریتم‌ها نسبت به سیستم‌های یادگیری تنبل، زمان بیشتری را صرف فرایند آموزش و زمان کمتری را صرف پیش‌بینی می‌کنند. به عنوان چند مورد از سیستم‌های یادگیری مشتاق می‌توان از «درخت تصمیم» (Decision Tree)، «بیز ساده» (Naive Bayes) و «شبکه‌های عصبی» (Neural Networks) نام برد.

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

در راستای پاسخ به پرسش Classification چیست، چهار کاربرد اصلی برای طبقه‌بندی در یادگیری ماشین تعریف شده است:

  • «طبقه‌بندی دودویی» (Binary Classification)
  • «طبقه‌بندی چندکلاسه» (Multi-class Classification)
  • «طبقه‌بندی چند برچسبی» (Multi-label Classification)
  • «طبقه‌بندی نامتوازن» (Imbalanced Classification)

در ادامه این مطلب از مجله فرادرس، شرح کامل‌تری از کاربردهای عنوان شده در فهرست بالا ارائه می‌دهیم.

طبقه ‌بندی دودویی

در یک مسئله طبقه‌بندی دودویی، هدف، گروه‌بندی داده‌های ورودی در دو دسته منحصربه‌فرد و مجزا از یک‌دیگر است. در چنین موقعیتی، مجموعه‌داده آموزشی با فرمت دودویی مانند «درست» (True) یا «نادرست» (False)، «مثبت» (Positive) یا «منفی» (Negative)، ۰ یا ۱ و اسپم یا عادی برچسب‌گذاری شده است. عنوان دودویی برچسب‌ها به نوع مسئله بستگی دارد؛ به عنوان مثال در تصویر زیر، دو برچسب «قایق»‌ و «کامیون» داریم و می‌خواهیم تصویر جدید را در یک از این دو گروه قرار دهیم:

مثال طبقه بندی دودویی
مثال طبقه‌بندی دودویی

طراحی اولیه الگوریتم‌هایی همچون «رگرسیون لجستیک» (Logistic Regression) و «ماشین بردار پشتیبان» (Support Vector Machine | SVM) بر پایه طبقه‌بندی دودویی انجام شده است. اگرچه الگوریتم‌هایی دیگری مانند K-نزدیک‌ترین همسایه یا به اختصار KNN و درخت تصمیم نیز برای مسائل طبقه‌بندی دودویی قابل استفاده هستند.

طبقه ‌بندی چندکلاسه

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

مثال طبقه بندی چندکلاسه
مثال طبقه‌بندی چندکلاسه

اغلب الگوریتم‌های طبقه‌بندی دودویی در مسائل طبقه‌بندی چندکلاسه نیز کاربرد دارند. از جمله این الگوریتم‌ها می‌توان به موارد زیر اشاره کرد:

  • «جنگل تصادفی» (Random Forest)
  • بیز ساده
  • K-نزدیک‌ترین همسایه یا KNN
  • «تقویت گرادیان» (Gradient Boosting)
  • ماشین بردار پشتیبان یا SVM
  • رگرسیون لجستیک

با به‌کارگیری تکنیک‌های تبدیل دودویی مانند «یک در مقابل یک» (One-vs-One) و «یک در مقابل همه» (One-vs-All)، استفاده از الگوریتم‌های طبقه‌بندی دودویی در کاربردهای چندکلاسه ممکن می‌شود.

یک در مقابل یک

در این استراتژی به تعداد جفت برچسب‌ها، «دسته‌بند» (Classifier) آموزش داده می‌شود. اگر ۳ برچسب کلاسی داشته باشیم، برای هر دسته مانند تصویر زیر، سه مدل طبقه‌بندی باینری تعریف می‌کنیم:

مثال روش یک در مقابل یک که با هواپیما، ماشین و کشتی نمایش داده شده است.

به‌طور کلی، برای $$ N $$ برچسب، تعداد $$ Ntimes(N-1)/2 $$ دسته‌بند خواهیم داشت. هر دسته‌بند با یک مجموعه‌داده دودویی آموزش داده شده و در نهایت کلاسی انتخاب می‌شود که بیشترین رای را از دسته‌بندها گرفته باشد. روش یک در مقابل یک برای SVM و دیگر الگوریتم‌های «مبتنی‌بر کرنل» (Kernel-based) بهترین عمکرد را دارد.

یک در مقابل همه

در روش یک در مقابل همه، هر برچسب به عنوان برچسبی مستقل در مقابل ترکیب سایر برچسب‌ها قرار می‌گیرد. به‌ازای ۳ کلاس مختلف، ۳ دسته‌بند خواهیم داشت. به‌طور کلی برای $$ N $$ برچسب، $$ N $$ دسته‌بند دودویی وجود دارد.

مثال روش یک در مقابل همه که با کشتی، کامیون و هواپیما نشان داده شده است.

طبقه بندی چند برچسبی

در کاربردهای طبقه‌بندی چند برچسبی، تلاش داریم تا برای هر نمونه ورودی، تعداد ۰ یا بیشتری برچسب کلاسی پیش‌بینی کنیم. کاربرد چنین رویکردی در حوزه‌هایی همچون برچسب‌گذاری خودکار است که در آن یک متن خاص، ممکن است چند موضوع مختلف داشته باشد. به‌طور مشابه در «بینایی ماشین»‌ (Computer Vision)، یک تصویر ممکن است چند سوژه مختلف را شامل شود. مدل یادگیری ماشین در مثال زیر، برچسب تصویری را پیش‌بینی می‌کند که شامل یک سگ، یک هواپیما، یک قایق و یک کامیون است:

مثال طبقه بندی چند برچسبی
مثال طبقه‌بندی چند برچسبی

استفاده از مدل‌های طبقه‌بندی دودویی یا چندکلاسه در مسائل چندبرچسبی ممکن نیست. گرچه بیشتر الگوریتم‌های رایج طبقه‌بندی، نسخه ویژه‌ای نیز برای طبقه‌بندی چندبرچسبی دارند؛ از جمله:

  • «درخت تصمیم چند برچسبی» (Multi-label Decision Tree)
  • «تقویت گرادیان چند برچسبی» (Multi-label Gradient Boosting)
  • «جنگل تصادفی چند برچسبی» (Multi-label Random Forest)

طبقه بندی نامتوازن

برای طبقه‌بندی نامتوازن، توزیع نمونه‌ها در هر کلاس نامتوازن است. به این معنی که هر نمونه می‌تواند نسبت به سایر مجموعه‌داده یک یا تعداد بیشتری کلاس داشته باشد. مثال ۳ کلاسه زیر را در نظر بگیرید که به ترتیب ۶۰، ۲۵ و ۱۵ درصد از مجموعه‌داده را تصاویر کامیون، هواپیما و قایق تشکیل داده است:

مثال طبقه بندی نامتوازن
مثال طبقه بندی نامتوازن

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

  • تشخیص تراکنش‌های جعلی در امور مالی.
  • شناسایی بیماری‌های کمیاب.
  • تجزیه و تحلیل نرخ بازگشت مشتری.

در مواجهه با مجموعه‌داده‌های نامتوازن، استفاده از مدل‌های یادگیری متداول مانند درخت تصمیم و رگرسیون، تاثیر چندانی ندارد. چرا که امکان دارد نسبت به کلاس‌هایی با تعداد نمونه بالا «سوگیری» (Bias) داشته باشند و کلاس‌هایی با نمونه کمتر را نویز در نظر بگیرند. برای مقابله با مشکل عدم توازن کلاسی در مجموعه‌داده، از روش‌های گوناگونی استفاده می‌شود. تکنیک‌های «نمونه‌گیری» (Sampling) و الگوریتم‌های «حساس به هزینه» (Cost-Sensitive) از جمله رایج‌ترین این روش‌ها هستند.

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

وظیفه این روش‌ها، متوازن‌سازی مجموعه‌داده اصلی است. از جمله تکنیک‌های نمونه‌‌گیری می‌توان به موارد زیر اشاره کرد:

  • «بیش نمونه‌گیری مبتنی‌بر خوشه» (Cluster-based Oversampling): تکثیر نمونه داده‌های دو کلاس «اکثریت» (Majority) و «اقلیت» (Minority) با استفاده از الگوریتم خوشه‌بندی «K میانگین» (K-Means).
  • «کم نمونه‌گیری تصادفی» (Random Undersampling): حدف تصادفی نمونه داده‌های کلاس اکثریت.
  • «بیش نمونه‌گیری اقلیت مصنوعی» (Synthetic Minority Oversampling | SMOTE): تکثیر تصادفی نمونه داده‌های کلاس اقلیت.

الگوریتم های حساس به هزینه در Classification چیست؟

این دسته از الگوریتم‌ها برای هر طبقه‌بندی اشتباه، هزینه‌ای در نظر می‌گیرند. در واقع، هدف به حداقل رساندن مجموع هزینه مدل یادگیری ماشین است. در فهرست زیر، چند نمونه از الگوریتم‌های حساس به هزینه را ملاحظه می‌کنید:

  • «درخت تصمیم حساس به هزینه» (Cost-sensitive Decision Tree)
  • «رگرسیون لجستیک حساس به هزینه» (Cost-sensitive Logistic Regression)
  • «ماشین بردار پشتیبان حساس به هزینه» (Cost-sensitive Support Vector Machine)

معیار های ارزیابی در الگوریتم های طبقه بندی

حال، پس از پاسخ دادن به پرسش Classification چیست و همچنین آشنایی با انواع مدل‌های طبقه‌بندی، زمان انتخاب معیارهای مناسب ارزیابی مدل فرا رسیده است. در این بخش، به بررسی رایج‌ترین معیارهای ارزیابی یعنی «دقت» (Accuracy)، «صحت» (Precision)، «بازیابی» (Recall)، «امتیاز اِف‌وان» (F1 Score) و «منحنی نمودار مشخصه عملکرد» (Receiver Operating Characteristic | ROC) می‌پردازیم.

فرض کنید کسب‌وکاری در حوزه سلامت، قصد ساخت دستیار هوشمندی را دارد که با دریافت پرونده بیمار، مبتلا بودن او را به بیماری قلبی تایید یا رد کند. نوعی مسئله طبقه‌بندی که در آن خروجی‌های مثبت مانند ۱،‌ «درست» (True) یا «بله» (Yes) نشان‌دهنده وجود بیماری و خروجی‌های منفی مانند ۰، «نادرست» (False) یا «خیر» (No)، نماد عدم وجود بیماری هستند.

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

ماتریسی ۲ در ۲ که شامل خلاصه‌ای از تعداد پیش‌بینی‌های درست مدل یادگیری ماشین می‌شود. همچنین در محاسبه دیگر معیارهای ارزیابی نیز کاربرد دارد.

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

هنگامی که صحبت از نمونه‌های «مثبت نادرست» (False Positives | FP) و «منفی نادرست» (False Negatives | FN) می‌شود، به ترتیب هر دو نوع خطای ۱ و ۲ قابل استفاده هستند.

معیار دقت

نسبت مجموع نمونه‌های «مثبت درست» (True Positives | TP) و «منفی درست» (True Negatives | TN) به کل نمونه‌ها، معیار دقت را تشکیل می‌دهد. به بیان ساده‌تر، می‌خواهیم بدانیم از میان همه پیش‌بینی‌های انجام شده توسط مدل، چه درصدی درست بوده است.

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

معیار صحت

به نسبت تعداد نمونه‌های TP به مجموع نمونه‌های TP و FP، معیار صحت گفته می‌شود. در واقع، می‌خواهیم بدانیم از میان نمونه‌های مثبت پیش‌بینی شده، چه تعداد درست بوده است.

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

معیار بازیابی – حساسیت

برای پی‌بردن به عملکرد مدل در پیش‌بینی نمونه‌های حقیقی درست، نوع خاصی از معیار بازیابی به نام «حساسیت» (Sensitivity) به‌کار گرفته می‌شود.

$$ Sensitivity = frac{TP}{TP + FN} $$

معیار بازیابی – صراحت

نوع دیگری از معیار بازیابی که عملکرد مدل را در پیش‌بینی نمونه‌های حقیقی نادرست ارزیابی می‌کند. معیار «صراحت» (Specificity) همان نسبت تعداد نمونه‌های TN به مجموع نمونه‌های TN و FP است.

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

معیار امتیاز اِف‌وان

امیتاز اِف‌وان یا همان F1 Score، برابر با «میانگین همساز» (Harmonic Mean) دو معیار صحت و بازیابی است. زمانی از این معیار استفاده می‌شود که مجموعه‌داده نامتوازن بوده و تعداد نمونه‌های برخی از کلاس‌ها بیش از سایرین باشد.

$$ F1:Score = 2 cdotfrac{Precision times Recall}{Precision + Recall} $$

معیار ROC

ارزیابی با منحنی مشخصه عملکرد یا به اختصار ROC، زمانی پیشنهاد می‌شود که مجموعه‌داده متوازن باشد؛ در غیر این‌صورت، تفاسیر نادرستی از عملکرد مدل حاصل می‌شود. مقادیر تولیدی معیار ROC از جنس احتمال بوده و از طریق چند حد آستانه مختلف، دید خوبی از توازن میان نرخ نمونه‌های مثبت درست (TP) و مثبت نادرست (FP) نتیجه می‌دهند. هرچه نتیجه ارزیابی به عدد ۱ نزدیک‌تر باشد، یعنی عملکرد مدل بهتر بوده و مقداری کمتر از ۰/۵، نشان‌دهنده یک «دسته‌بند ضعیف» (Poor Classifier) است.

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

در ادامه پاسخ به پرسش Classification چیست، بهتر است تا با نحوه پیاده‌سازی چند مورد از الگوریتم‌های طبقه‌بندی آشنا شویم. در این بخش، برای سادگی بیشتر و به تصویر کشیدن مفاهیم عنوان شده، به بررسی چهار نمونه از الگوریتم‌های طبقه‌بندی و همچنین پیاده‌سازی آن‌ها با استفاده از مجموعه‌داده وام یا همان Loans «+» می‌پردازیم. هدف ما، نه رسیدن به بهترین مدل یادگیری ماشین، بلکه آشنایی با طریقه آموزش دادن الگوریتم‌های طبقه‌بندی است.

توزیع نمونه های مجموعه داده

ابتدا برای آن‌که دید بهتری از مجموعه‌داده Loans که شامل اطلاعات وام‌های اعطا شده به افراد است به‌دست آوریم، با استفاده از کتابخانه Pandas در زبان برنامه‌نویسی پایتون، نگاهی به ۵ نمونه داده اول مجموعه‌داده می‌اندازیم:

1import pandas as pd
2
3loan_data = pd.read_csv("loan_data.csv")
4loan_data.head()

جدول زیر، نتیجه اجرای قطعه کد بالا می‌باشد:

پنج نمونه اول مجموعه داده Loans

پنج نمونه اول مجموعه‌داده Loans – «برای بزرگ‌نمایی روی تصویر کلیک کنید»

سپس تابعی به نام show_loan_distrib

  تعریف می‌کنیم که با دریافت مجموعه‌داده به عنوان ورودی، توزیع داده‌ها را در غالب نمودار دایره‌ای به ما نشان می‌دهد:

1import matplotlib.pyplot as plt
2# Helper function for data distribution
3# Visualize the proportion of borrowers
4def show_loan_distrib(data):
5  count = ""
6  if isinstance(data, pd.DataFrame):
7      count = data["not.fully.paid"].value_counts()
8  else:
9      count = data.value_counts()
10
11
12  count.plot(kind = 'pie', explode = [0, 0.1],
13             figsize = (6, 6), autopct = '%1.1f%%', shadow = True)
14  plt.ylabel("Loan: Fully Paid Vs. Not Fully Paid")
15  plt.legend(["Fully Paid", "Not Fully Paid"])
16  plt.show()
17
18
19# Visualize the proportion of borrowers
20show_loan_distrib(loan_data)

همان‌طور که از نمودار نیز مشخص است، ۸۴ درصد از وام گیرندگان بدهی خود را پرداخت کرده و تنها ۱۶ درصد پرداختی نداشته‌اند. به این معنی که با مجموعه‌داده نامتوازنی روبه‌رو هستیم.

نمودار توزیع مجموعه داده Loans
نمودار دایره‌ای توزیع مجموعه‌داده Loans

انواع متغیر

پیش از ادامه دادن، ابتدا باید نوع ستون‌ها یا همان ویژگی‌ها را بررسی کرده و ببینیم کدام یک نیاز به «کدبندی» (Encoding) دارند. اگر ویژگی از نوع object باشد، یعنی برای مدل غیر قابل استفاده بوده و باید اطلاعات موجود در آن استخراج شود. تابع dtypes

 ، نوع ویژگی‌های را برمی‌گرداند:

1# Check column types
2print(loan_data.dtypes)

خروجی اجرای این قطعه کد مانند زیر است:

نوع ویژگی های مجموعه داده Loans
نوع ویژگی‌های مجموعه داده Loans

با توجه به خروجی حاصل شده، تمامی ستون‌ها به‌جز ستون purpose، مقدار پیوسته دارند و از همین جهت، ستون purpose باید مانند نمونه، کدبندی شود:

1encoded_loan_data = pd.get_dummies(loan_data, prefix="purpose",
2                                   drop_first=True)
3print(encoded_loan_data.dtypes)

پس از اجرای قطعه کد نمونه، ویژگی purpose به شش ویژگی متناظر دیگر از نوع دودویی یا Boolean تبدیل می‌شود:

ویژگی های کدبندی شده مجموعه داده Loans
ویژگی‌های کدبندی شده مجموعه‌داده Loans

تقسیم مجموعه داده

در این بخش، پس از جداسازی کلاس هدف از سایر ویژگی‌ها، مجموعه‌داده را با احتمال ۷۰ به ۳۰، به دو بخش «آموزشی» (Training Set) و «آزمایشی» (Test Set) تقسیم می‌کنیم:

1from sklearn.model_selection import train_test_split
2
3X = encoded_loan_data.drop('not.fully.paid', axis = 1)
4y = encoded_loan_data['not.fully.paid']
5
6X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30,
7                                                    stratify = y, random_state=42)

استفاده از روش های نمونه گیری

به عنوان دو استراتژی نمونه‌گیری، در این بخش از روش‌های «کم نمونه‌گیری تصادفی» (Random Undersampling) و «بیش نمونه‌گیری اقلیت مصنوعی» (Synthetic Minority Oversampling | SMOTE) استفاده می‌کنیم.

کم نمونه گیری تصادفی

با اجرای قطعه کد زیر، تعداد نمونه‌های کلاس اکثریت یا همان Fully Paid را کاهش می‌دهیم:

1X_train_cp = X_train.copy()
2X_train_cp['not.fully.paid'] = y_train
3y_0 = X_train_cp[X_train_cp['not.fully.paid'] == 0]
4y_1 = X_train_cp[X_train_cp['not.fully.paid'] == 1]
5y_0_undersample = y_0.sample(y_1.shape[0])
6loan_data_undersample = pd.concat([y_0_undersample, y_1], axis = 0)
7
8
9# Visualize the proportion of borrowers
10show_loan_distrib(loan_data_undersample)

خروجی مانند نمودار دایره‌ای زیر خواهد بود:

نمودار دایره ای پس از کم نمونه گیری تصادفی
نمودار دایره‌ای پس از کم نمونه‌گیری تصادفی

بیش نمونه گیری SMOTE

همچنین می‌توانیم به‌جای کاهش نمونه‌های کلاس اکثریت، مانند زیر از تکنیک بیش نمونه‌گیری SMOTE بهره برده و تعداد نمونه‌های کلاس اقلیت را افزایش دهیم:

1from imblearn.over_sampling import SMOTE
2
3smote = SMOTE(sampling_strategy='minority')
4X_train_SMOTE, y_train_SMOTE = smote.fit_resample(X_train,y_train)
5# Visualize the proportion of borrowers
6show_loan_distrib(y_train_SMOTE)

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

کاربرد الگوریتم های یادگیری ماشین در Classification چیست؟

مجموعه‌داده متوازن، باعث بهبود عملکرد الگوریتم‌های طبقه‌بندی می‌شود. در این بخش، دو نمونه از رایج‌ترین الگوریتم‌های طبقه‌بندی یعنی رگرسیون لجستیک و SVM را بر مجموعه‌داده متوازن خود اعمال کرده و نتایج را به نمایش می‌گذاریم.

الگوریتم رگرسیون لجستیک

نحوه کار الگوریتم رگرسیون لجستیک به این شکل است که از طریق تابع فعال‌سازی «سیگموئید» (Sigmoid)، احتمال تعلق داشتن نمونه‌های داده را به کلاس هدف محاسبه می‌کنید. برای پیاده‌سازی الگوریتم رگرسیون لجستیک، از تابع LogisticRegression

  کتابخانه scikit-learn کمک می‌گیریم:

1from sklearn.metrics import classification_report, confusion_matrix
2from sklearn.linear_model import LogisticRegression
3
4X = loan_data_undersample.drop('not.fully.paid', axis = 1)
5y = loan_data_undersample['not.fully.paid']
6X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, stratify = y, random_state=42)
7logistic_classifier = LogisticRegression()
8logistic_classifier.fit(X_train, y_train)
9y_pred = logistic_classifier.predict(X_test)
10print(confusion_matrix(y_test, y_pred))
11print(classification_report(y_test, y_pred))

نتایج ارزیابی حاصل از اعمال الگوریتم رگرسیون لجستیک به شرح زیر است:

نتایج اعمال الگوریتم رگرسیون لجستیک
نتایج اعمال الگوریتم رگرسیون لجستیک

همان‌طور که در تصویر نیز مشاهده می‌کنید، معیارهای «صحت» (Precision)، «بازیابی» (Recall) و «امتیاز اِف‌وان» (F1 Score) به صورت مجزا برای هر دو کلاس و معیار «دقت» (Accuracy) نیز برای مجموعه کلاس‌ها محاسبه شده است. ستون آخر با عنوان Support نشان‌دهنده تعداد نمونه‌های هر کلاس است و دو سطر آخر یعنی Macro Avg و Weighted Avg، به ترتیب میانگین بدون وزن و همچنین میانگین وزن‌دار معیارهای صحت، بازیابی و امتیاز F1 را برای تمامی نمونه‌ها گزارش کرده‌اند.

الگوریتم ماشین بردار پشتیبان

از الگوریتم ماشین بردار پشتیبان یا به اختصار SVM، در مسائل طبقه‌بندی و رگرسیون استفاده می‌شود. این الگوریتم با یادگیری مدلی به نام «ابَرصفحه» (Hyperplane) که به آن «مرز تصمیم» (Decision Boundary) نیز گفته می‌شود، فاصله میان نمونه‌های کلاسی را به حداکثر می‌رساند. نزدیک‌ترین نقاط داده به مرز تصمیم، «بردار پشتیبان» (Support Vector) نام دارند. پیاده‌سازی الگوریتم SVM و ارزیابی مدل حاصل از آن، با استفاده از قطعه کد زیر انجام می‌شود:

1from sklearn.svm import SVC
2
3svc_classifier = SVC()
4svc_classifier.fit(X_train, y_train)
5
6# Make Prediction & print the result
7y_pred = svc_classifier.predict(X_test)
8
9print(classification_report(y_test, y_pred))

در جدول زیر، نتیجه اجرای قطعه کد بالا را مشاهده می‌کنید:

نتایج اعمال الگوریتم SVM
نتایج اعمال الگوریتم SVM

در تصویر بالا نیز همانند جدول حاصل از الگوریتم رگرسیون لجستیک، نتایج چهار معیار دقت، صحت، بازیابی و امتیاز F1 نمایش داده شده است. باید توجه داشت که می‌توان نتایج به‌دست آمده را با پیاده‌سازی تکنیک‌هایی مانند «مهندسی ویژگی» (Feature Engineering) و «میزان‌سازی دقیق» (Fine-Tuning) بهبود بخشید. در مطلب زیر از مجله فرادرس، توضیحات کامل‌تر و بهتری در رابطه با ماشین بردار پشتیبان آورده شده که می‌توانید بعد از مطالعه آن، کدنویسی پایتون و R را نیز برای آن انجام دهید.

سوالات متداول پیرامون Classification چیست؟

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

چه الگوریتم هایی در مسائل طبقه بندی رایج هستند؟

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

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

در طبقه‌بندی،‌ هر کلاس از مجموعه‌داده برچسب‌گذاری می‌شود. در حالی که، خروجی پیش‌بینی شده الگوریتم رگرسیون مقداری پیوسته است.

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

با چه معیارهایی عملکرد الگوریتم های طبقه بندی سنجیده می شود؟

معیارهای ارزیابی در سنجش عملکرد مدل یادگیری ماشین مورد استفاده قرار می‌گیرند. از جمله این معیارها می‌توان به معیار دقت، صحت، بازیابی، امتیاز اِف‌وان و منحنی نمودار مشخصه عملکرد یا به اختصار ROC اشاره کرد.

چه راه حلی برای رفع مشکل عدم توازن در مجموعه داده ها وجود دارد؟

در صورت نامتوازن بودن مجموعه‌داده، عملکرد مدل یادگیری با مشکل مواجه می‌شود. به همین منظور و برای متوازن‌سازی توزیع کلاس‌ها، از تکنیک‌های نمونه‌گیری مانند کم نمونه‌گیری تصادفی و بیش نمونه‌گیری SMOTE استفاده می‌شود.

جمع‌بندی

همزمان با تکامل فناوری‌های دیجیتال، رویکرد طبقه‌بندی در یادگیری ماشین به موجودیتی ارزشمند تبدیل شده است. در این مطلب از مجله فرادرس، علاوه‌بر پاسخ دادن به پرسش Classification چیست، با نمونه‌های مهم الگوریتم‌های طبقه‌بندی و همچنین نحوه پیاده‌سازی هر کدام آشنا شدیم. به‌کارگیری الگوریتم‌های طبقه‌بندی در پروژه‌های مختلف، نیازمند داشتن درک مناسبی از نحوه شناسایی الگوهای میان داده‌ای توسط مدل یادگیری ماشین است. صنایع و سازمان‌های بسیاری توانسته‌اند با بهره‌گیری از الگوریتم‌های طبقه‌بندی، مزیت رقابتی خود را در جهان پر تکاپوی امروز حفظ کنند.

source

توسط expressjs.ir