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

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

یادگیری نظارت شده چیست ؟

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

می‌توان هدف یادگیری نظارت شده را پیدا کردن یک تابع تخمینی دانست که الگوریتم‌های این رویکرد در طی روال آموزش بر اساس داده‌های آموزشی تابعی را پیدا می‌کنند که بهترین توصیف از نگاشت ویژگی‌ها به مقادیر هدف را ارائه می‌دهد (X -> y). در اکثر اوقات، الگوریتم‌های یادگیری ماشین نمی‌توانند تابع صحیحی را بیابند که همیشه مقادیر را به‌طور صحیح نگاشت کند زیرا این الگوریتم‌ها بر پایه یک سری فرضیات شکل می‌گیرند که نحوه یادگیری کامپیوتر از مسائل را توضیح می‌دهند و این فرضیه‌ها شامل یک سری بایاس (Bias) هستند.

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

الگوریتم های نظارت شده چطور کار می کنند ؟

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

روال یادگیری الگوریتم‌های نظارت شده
روال یادگیری الگوریتم‌های نظارت شده

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

مراحل یادگیری الگوریتم های نظارت شده

می‌توان مراحل یادگیری الگوریتم‌های یادگیری نظارت شده را در چندین مرحله خلاصه کرد که در ادامه به این مراحل می‌پردازیم:

  1. با توجه به مسئله، نوع داده‌ها را تعیین کنید.
  2. داده‌ها را جمع‌آوری و برچسب‌های آن‌ها را مشخص کنید.
  3. داده‌ها را به سه بخش «داده آموزشی» (Training Data)، «داده‌های ارزیابی» (Validation Data) و «داده‌های تست» (Test Data) تقسیم کنید.
  4. الگوریتم یادگیری نظارت شده مناسب را برای مسئله انتخاب کنید.
  5. الگوریتم انتخاب شده را برای یادگیری مسئله بر روی داده‌های آموزشی اجرا و از داده‌های ارزیابی به منظور سنجش عملکر الگوریتم استفاده کنید.
  6. پس از آموزش مدل، می‌توانید دقت عملکرد آن را بر روی داده‌های تست نیز بسنجید.

انواع مسائل یادگیری نظارت شده

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

  • مسائل «دسته‌بندی» (Classification) داده‌ها
  • مسائل «رگرسیون» (Regression)

در ادامه مطلب، به توضیح هر یک از این مسائل می‌پردازیم.

هدف از دسته بندی داده چیست؟

دسته‌بندی یکی از روش‌های یادگیری ماشین نظارت شده است که از آن برای تقسیم‌بندی داده‌ها در چند گروه از پیش تعیین شده توسط برنامه نویس و تحلیلگر داده استفاده می‌شود. می‌توان الگوریتم‌های یادگیری نظارت شده را برای پیش‌بینی مقادیر گسسته به کار برد. اگر این مقادیر شامل دو مقدار مانند مقادیر True و False و ۰ و ۱ یا Yes و No باشند، مسئله تعریف شده از نوع «دسته‌بندی باینری | دوتایی» (Binary Classification) است. چنانچه تعداد مقادیر هدف، بیش از دو تا باشند، مسئله تعریف شده از نوع مسائل «دسته‌بندی چند کلاسه» (Multiclass Classification) است.

فرض کنید مسئله‌ای داریم که می‌خواهیم بر اساس اطلاعات مشتریان بانک نظیر تاریخچه فعالیت‌ها، وام‌های دریافتی، مقدار سرمایه‌گذاری و مواردی از این قبیل تعیین کنیم آیا مشتری قصور در پرداخت بدهی خود خواهد داشت؟ این مسئله را می‌توانیم از نوع دسته‌بندی باینری در نظر بگیریم که پاسخ آن شامل دو مقدار Yes و No است. داده‌های آموزشی این مسئله شامل ویژگی‌ها و مقادیر هدف است:

  • ویژگی‌های داده آموزشی شامل اطلاعات مشتریان نظیر تاریخچه فعالیت‌ها، وام‌های دریافتی، مقدار سرمایه‌گذاری و اطلاعات دیگر است.
  • مقدار هدف، شامل مقادیر Yes و No است که مشخص می‌کند آیا مشتری قبلا در پرداخت بدهی خود قصور داشته است؟
مثالی از دسته بندی داده ها با استفاده از الگوریتم های با نظارت
مثالی از دسته‌بندی داده ها با استفاده از الگوریتم‌های با نظارت

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

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

رگرسیون شامل مسائلی از یادگیری نظارت شده است که مقادیر هدف آن‌ها از نوع پیوسته هستند. در این نوع مسائل، دست‌کم دو متغیر داریم که یکی از آن‌ها متغیر مستقل (ویژگی یا همان داده ورودی مدل) و دیگری متغیر وابسته (مقدار هدف یا خروجی مدل) است.

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

تشخیص میزان رطوبت هوا نیز از دیگر مسائل رگرسیون محسوب می‌شود. می‌توان میزان رطوبت هوا را (به عنوان متغیر وابسته) بر اساس میزان دما (متغیر مستقل) پیش‌بینی کرد.

مثالی از رگرسیون در یادگیری ماشین
مثالی از رگرسیون در یادگیری ماشین

کاربرد روش های یادگیری نظارت شده

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

  • «مدیریت رابطه با مشتریان» (Customer Relationship Management | CRM): از روش‌های یادگیری ماشین نظارت شده در سیستم‌های CRM به منظور پیش‌بینی رفتار مشتریان استفاده می‌شوند. سازمان‌ها با کمک این الگوریتم‌ها می‌توانند سلایق و رفتار مشتریان را حدس بزنند و سطح رضایتمندی مشتری و در تبع آن، میزان سوددهی کسب و کار را بالا ببرند.
  • تشخیص کلاه‌برداری: الگوریتم‌های یادگیری با نظارت نقش مهمی در تشخیص کلاه‌برداری‌های مالی دارند. این مدل‌ها بر اساس داده‌های قدیمی، فعالیت‌ها و تراکنش‌های مشکوک مالی را شناسایی می‌کنند و بدین ترتیب با استفاده از آن‌ها می‌توان میزان جرائم مالی را به مراتب کاهش داد.
  • امتیازدهی اعتبار مشتریان بانک‌ها: بانک‌ها و موسسات مالی با کمک روش‌های یادگیری با نظارت می‌توانند خوش حسابی مشتریان خود را ارزیابی کنند و در مواردی نظیر تخصیص وام‌های مختلف به آن‌ها با دقت بیشتری تصمیم بگیرند.
  • «تحلیل احساسات» (Sentiment Analysis): صاحبان کسب و کار و مدیران سازمان‌ها می‌توانند از سیستم‌های تحلیل احساسات خودکار برای عقیده کاوی و تحلیل احساسات مخاطبان و مشتریان خود و پیشی گرفتن از سایر رقبای بازار جهانی استفاده کنند.
  • پردازش تصویر و تشخیص اشیا: مدل‌های یادگیری عمیق نظارت شده مانند «شبکه‌های عصبی پیچشی» (Convolutional Neural Networks | CNNs) و روش‌های یادگیری ماشین کاربرد مهمی در مسائل مرتبط با «بینایی ماشین» (Computer Vision) و پردازش تصاویر دارند. مسائلی نظیر تشخیص چهره، شناسایی محصولات و کنترل کیفیت در خط تولید کارخانه‌ها مواردی هستند که با روش‌های یادگیری نظارت شده قابل حل‌اند.
  • بازشناسی گفتار: از دیگر کاربردهای روش‌های یادگیری با نظارت می‌توان به بازشناسی گفتار و تبدیل گفتار به متن اشاره کرد. ابزارهایی نظیر دستیار صوتی هوشمند، پاسخ‌گویی خودکار تلفنی به مشتریان و ابزارهای تولیدکننده زیرنویس از جمله مثال‌هایی از بازشناسی گفتار هستند.
  • تشخیص بیماری: مدل‌های هوش مصنوعی نظارت شده را می‌توان بر روی تصاویر پزشکی زیادی نظیر تصاویر MRI و X-ray آموزش داد تا در تشخیص بیماری‌های مراجعه‌کنندگان نظیر سرطان به پزشکان کمک کنند. همچنین، برای درمان بیماران می‌توان بر اساس پیشینه بیماری و اطلاعات خاص هر بیمار، با کمک الگوریتم‌های یادگیری با نظارت راه درمان منحصربفردی را ارائه داد.
  • صنعت حمل و نقل: با کمک روش‌های یادگیری با نظارت و اطلاعاتی نظیر داده‌های مربوط به ترافیک و شرایط آب و هوا، می‌توان الگوی ترافیک سطح شهر را پیش‌بینی کرد و برنامه‌ریزی‌هایی را در این راستا انجام داد تا از میزان حجم ترافیک در سطح مسیرها کاسته شود. اتومبیل‌های خودران از دیگر سیستم‌هایی هستند که بر پایه الگوریتم‌های یادگیری با نظارت کار می‌کنند.

مزایای یادگیری نظارت شده

رویکرد یادگیری نظارت شده دارای مزیت‌های مختلفی است و در بسیاری از مسائل از الگوریتم‌های یادگیری این رویکرد استفاده می‌شود. در ادامه، به مهم‌ترین ویژگی‌های مثبت این رویکرد اشاره می‌کنیم:

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

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

با این که روش‌های یادگیری نظارت شده دارای ویژگی‌های مثبتی هستند و کاربرد زیادی در حل مسائل مختلف دارند، با این حال الگوریتم‌های این رویکرد دارای معایبی نیز هستند که در ادامه به آن‌ها می‌پردازیم:

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

الگوریتم های یادگیری نظارت شده برای دسته بندی

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

  • مسئله رگرسیون
  • مسئله دسته‌بندی

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

الگوریتم یادگیری نظارت شده رگرسیون خطی

الگوریتم رگرسیون خطی، مدل ساده‌ای است که هدف آن یافتن بهترین رابطه خطی بین ویژگی‌های ورودی و متغیر هدف است. به عنوان مثال، فرض کنید یک مجموعه داده در مورد سن یک سری از افراد و حقوق دریافتی آن‌ها را در اختیار دارید. با استفاده از مدل رگرسیون خطی می‌توانید حقوق دریافتی افراد را بر اساس سن آن‌ها تعیین کنید.

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

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

import sklearn.datasets as datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import sklearn.metrics as metrics

house = datasets.load_boston()

print("The data shape of house is {}".format(house.data.shape))
print("The number of feature in this data set is {}".format(
    house.data.shape[1]))

train_x, test_x, train_y, test_y = train_test_split(house.data,
                                                    house.target,
                                                    test_size=0.2,
                                                    random_state=42)

print("The first five samples {}".format(train_x[:5]))
print("The first five targets {}".format(train_y[:5]))
print("The number of samples in train set is {}".format(train_x.shape[0]))
print("The number of samples in test set is {}".format(test_x.shape[0]))

lr = LinearRegression()
lr.fit(train_x, train_y)

pred_y = lr.predict(test_x)
print("The first five prediction {}".format(pred_y[:5]))
print("The real first five labels {}".format(test_y[:5]))

mse = metrics.mean_squared_error(test_y, pred_y)
print("Mean Squared Error {}".format(mse))

خروجی قطعه کد بالا را در ادامه ملاحظه می‌کنید:

The data shape of house is (506, 13)
The number of feature in this data set is 13
The first five samples [[1.50234e+01 0.00000e+00 1.81000e+01 0.00000e+00 6.14000e-01 5.30400e+00
  9.73000e+01 2.10070e+00 2.40000e+01 6.66000e+02 2.02000e+01 3.49480e+02
  2.49100e+01]
 [6.27390e-01 0.00000e+00 8.14000e+00 0.00000e+00 5.38000e-01 5.83400e+00
  5.65000e+01 4.49860e+00 4.00000e+00 3.07000e+02 2.10000e+01 3.95620e+02
  8.47000e+00]
 [3.46600e-02 3.50000e+01 6.06000e+00 0.00000e+00 4.37900e-01 6.03100e+00
  2.33000e+01 6.64070e+00 1.00000e+00 3.04000e+02 1.69000e+01 3.62250e+02
  7.83000e+00]
 [7.05042e+00 0.00000e+00 1.81000e+01 0.00000e+00 6.14000e-01 6.10300e+00
  8.51000e+01 2.02180e+00 2.40000e+01 6.66000e+02 2.02000e+01 2.52000e+00
  2.32900e+01]
 [7.25800e-01 0.00000e+00 8.14000e+00 0.00000e+00 5.38000e-01 5.72700e+00
  6.95000e+01 3.79650e+00 4.00000e+00 3.07000e+02 2.10000e+01 3.90950e+02
  1.12800e+01]]
The first five targets [12.  19.9 19.4 13.4 18.2]
The number of samples in train set is 404
The number of samples in test set is 102
The first five prediction [29.00108503 36.03180934 14.82255381 25.03889584 18.7617758 ]
The real first five labels [23.6 32.4 13.6 22.8 16.1]
Mean Squared Error 24.311426929693507

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

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

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

#Importing the necessary libraries 
import numpy as np
from sklearn.datasets import load_wine 
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression 
from sklearn.metrics import confusion_matrix, accuracy_score 

# Importing the dataset from the sklearn library into a local variable called dataset
dataset = load_wine()

# Splitting the data test into train 80% and test 20%.
# x_train, y_train are training data and labels respectively 
# x_test, y_test are testing data and labels respectively 
x_train, x_test, y_train, y_test = train_test_split(dataset.data, dataset.target, test_size=0.20, random_state=15)

# Making the logistic regression model
logistic_model = LogisticRegression()

# Training the model on the training data and labels
logistic_model.fit(x_train, y_train)

# Using the model to predict the labels of the test data
y_pred = logistic_model.predict(x_test)

# Evaluating the accuracy of the model using the sklearn functions
accuracy = accuracy_score(y_test,y_pred)*100
confusion_mat = confusion_matrix(y_test,y_pred)

# Printing the results
print("Accuracy is",accuracy)
print("Confusion Matrix")
print(confusion_mat)

خروجی دستورات بالا را در ادامه ملاحظه می‌کنید:

Accuracy is 94.44444444444444
Confusion Matrix
[[11  1  0]
 [ 0 12  0]
 [ 0  1 11]]

مدل یادگیری درخت تصمیم چیست؟

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

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

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

در ادامه، قطعه کدی از زبان برنامه نویسی پایتون را ملاحظه می‌کنید که برای پیاده‌سازی مسئله دسته‌بندی با استفاده از درخت تصمیم ارائه شده است. در این قطعه کد، از یکی از دیتاست‌های کتابخانه Sklearn استفاده شده است.

# Load libraries
import pandas as pd
from sklearn.tree import DecisionTreeClassifier # Import Decision Tree Classifier
from sklearn.model_selection import train_test_split # Import train_test_split function
from sklearn import metrics #Import scikit-learn metrics module for accuracy calculation

col_names = ['pregnant', 'glucose', 'bp', 'skin', 'insulin', 'bmi', 'pedigree', 'age', 'label']
# load dataset
pima = pd.read_csv("diabetes.csv", header=None, names=col_names)

#split dataset in features and target variable
feature_cols = ['pregnant', 'insulin', 'bmi', 'age','glucose','bp','pedigree']
X = pima[feature_cols] # Features
y = pima.label # Target variable

# Split dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1) # 70% training and 30% test

# Create Decision Tree classifer object
clf = DecisionTreeClassifier()

# Train Decision Tree Classifer
clf = clf.fit(X_train,y_train)

#Predict the response for test dataset
y_pred = clf.predict(X_test)

# Model Accuracy, how often is the classifier correct?
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))

خروجی مثال مسئله دسته‌بندی بالا را در ادامه ملاحظه می‌کنید:

Accuracy: 0.6753246753246753

الگوریتم یادگیری با نظارت K نزدیک ترین همسایه

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

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

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn.datasets import make_blobs
from sklearn.neighbors import KNeighborsClassifier

X,y = make_blobs(n_samples = 550, centers = 4, random_state = 50)

knn = KNeighborsClassifier(n_neighbors = 5)
 
knn.fit(X, y)

h = 0.05

minimumX = X[:, 0].min() - 1
maximumX = X[:, 0].max() + 1
minimumY = X[:, 1].min() - 1
maximumY = X[:, 1].max() + 1

xx, yy = np.meshgrid(np.arange(minimumX, maximumX, h), np.arange(minimumY, maximumY, h))

Z = knn.predict(np.c_[xx.ravel(), yy.ravel()])

cmapOne = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF', '#FFCCAA'])
cmapTwo = ListedColormap(['#FF0000', '#00FF00', '#0000FF', '#FF8800'])

Z = Z.reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx, yy, Z, cmap=cmapOne)

plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmapTwo, edgecolor = 'k', s = 20)

plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())

plt.title("KNeighborsClassifier")

plt.show()

خروجی قطعه کد بالا را در تصویر زیر ملاحظه می‌کنید:

الگوریتم یادگیری نظارت شده KNN

مدل یادگیری با نظارت جنگل تصادفی

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

مدل یادگیری نظارت شده جنگل تصادفی
الگوریتم جنگل تصادفی

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

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

# Importing required libraries
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn import metrics

# Loading the iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Splitting the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

# Creating a Random Forest Classifier object with 100 decision trees
clf = RandomForestClassifier(n_estimators=100)

# Training the classifier on the training set
clf.fit(X_train, y_train)

# Predicting the classes of the testing set using the trained classifier
y_pred = clf.predict(X_test)

# Evaluating the accuracy of the classifier
accuracy = metrics.accuracy_score(y_test, y_pred)
print("Accuracy of the classifier:", accuracy)

خروجی قطعه کد بالا در ادامه ملاحظه می‌شود:

Accuracy of the classifier: 0.9111111111111111

جمع‌بندی

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

 

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

source

توسط visitmag.ir