یادگیری ماشین

ماشین لرنینگ چیست؟

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

در این نوشته توضیحاتی در مورد ماشین لرنینگ و دسته بندی های مختلف آن داده ایم:

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

در روش قدیمی برنامه نویسی برای تشخیص ایمیل های اسپم ، الگوریتمی نوشته میشد که در آن یک شرط گذاشته میشد که اگر برای مثال یکی از کلماتی نظیر(“۴U,” “credit card,” “free,” and “amazing”) وجود داشت ، آن را بعنوان ایمیل spam در نظر میگرفت.

مشکل کار کجا بود؟

مشکل در اینجا بود که گاهی تعداد کلمات در نظر گرفته شده برای تشخیص زیاد میشد و گاها کد نوشته شده بسیار پیچیده میشد. و برای مثالی دیگر اگر ۴u تبدیل به ۴u با یک فاصله بین ۴ , u آن میشد ، دیگر برنامه بدرستی کار نمیکرد.

این مشکل با استفاده از ماشین لرنینگ حل میشود. اما نیاز به یک سری دیتای اولیه داریم که به او یاد بدهیم. میتوان گفت چیزی شبیه شاگردی کردن و کسب تجربه کردن که باعث یاد گرفتن مهارت میشود.

دیتاماینینگ چیست؟

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

انواع سیستمهای ماشین لرنینگ:

اگر بخواهیم بر اساس اینکه آیا تحت نظارت انسان ها آموزش دیده اند یا نه میتوان گفت ۴ دسته هستند:

  • supervised
  • unsupervised
  • semi supervised
  • reinforcement learning

از نظر این که آیا آنها می توانند به صورت تدریجی یاد بگیرند یا نه:

  • online
  • batch

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

  • instance based
  • model based

Supervised learning 

همانطور که از اسم این الگوریت مشخص است ، این الگوریتم از طریق نظارت و نگاه کردن به نمونه ها (جفتها) فرایند یادگیری را انجام میدهد.

بنابراین در این الگوریتم نیاز به داده های آموزشی برچسب خورده(labeled) داریم :

.Labeled training data

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

بنابراین یک جفت آزمایشی (Test set) به مدل میدهیم و در صورتی که نتایج درستی مشاهده کنیم ، اطمینان حاصل می کنیم که مدل ما یا الگوریتم ما به درستی عمل میکند.

Classification:

یک نمونه از تکنیکهایی که در زیر مجموعه supervised قرار میگیرد ، روش calissification یا دسته بندی می باشد.

تخمین قیمت خودرو:

یک مثال خیلی خوب از حل مسئله به روش supervised پیش بینی قیمت اتوموبیل میباشد. به این صورت که ابتدا تعداد زیادی دیتا داریم. این دیتا شامل موارد زیر است :

  • سال ساخت ماشین
  • کیلومتر طی شده توسط ماشین
  • نام یا برند ماشین
  • قیمت آن

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

مهمترین الگوریتم های یادگیری ماشین به روش Supervised :

  • k-Nearest Neighbors – اشاره به همسایگی
  • • Linear Regression- رگرسیون
  • • Logistic Regression- رگرسیون
  • • Support Vector Machines (SVMs)-
  • • Decision Trees and Random Forests- درخت تصمیم گیری
  • • Neural networks- درخت تصمیم گیری

unsupervised learning

در مقابل این نوع از یادگیری، یادگیری بدون ناظر یا Unsupervised قرار داره. در این نوع از یادگیری جفتهای برچسب خورده وجود نداره . در شکل زیر تفاوت بین Supervised learning و Unsupervised learning به خوبی مشخص شده.

دیتاهای آموزشی برچسب ندارند

در روش unsupervised یادگیری بدون وجود معلم صورت میگیرد. و همچنین دیتاها Label ندارند.

در زیر چند نمونه از مهمترین الگوریتمهای یادگیری ماشین به روش Unsupervised معرفی میشود:

• Clustering – دسته بندی
— K-Means
— DBSCAN
— Hierarchical Cluster Analysis (HCA)

• Anomaly detection and novelty detection
— One-class SVM
— Isolation Forest

• Visualization and dimensionality reduction – کاهش ابعاد و قابل دید کردن
— Principal Component Analysis (PCA)
— Kernel PCA
— Locally-Linear Embedding (LLE)
— t-distributed Stochastic Neighbor Embedding (t-SNE)
• Association rule learning
— Apriori
— Eclat

برای مثال شما ممکن است در حال بررسی و تحلیل بازدید کنندگان وبلاگ خود باشید . با استفاده از الگوریتم Clustering میتوان گروه های متفاوت از بازدیدکنندگان وبلاگ خود را دسته بندی کنید . برای مثال ممکن است به این نتیجه برسید که ۴۰ درصد از بازدیدکنندگان سایت شما ، مرد هستند و به کتاب های رمان علاقه دارند و در حدود ساعت ۱۵ تا۲۱ به سایت شما سر میزنند. با استفاده از الگوریتم hierarchical clustering alghorithm ممکن است به دسته یندی های جزئی تری نیز برسید.

استفاده از روش Clustering

dimensionality reduction alghorithm:

کاهش ابعاد دیتای آموزشی (training data) همواره مزایایی دارد. این کار معمولا قبل از انتقال به الگوریتم ماشین لرنینگ و با الگوریتمهای کاهش ابعاد انجام میشود. از مزایای این کار میتوان به موارد زیر اشاره کرد:

  • سرعت بیشتر
  • اشغال کمترفضای disk
  • عملکرد بهتر

Semisupervised learning :

حالتی که تعداد زیادی از داده های ما Unlabled باشد و تنها درصد کوچکی از کل داده های موجود Labeled باشند ، میگوییم در حالت Semisupervised learning هستیم.

Reinforcement Learning :

نوع دیگری از یادگیری ماشین نیز وجود دارد به نام Reinforcement learning که در آن ربات با توجه به اطلاعاتی که از محیط پیرامون خود بدست می آورد، یادمیگیرد که چگونه عمل کند. در واقع یادمیگیرد که چگونه یک Utility را Maximize کند.

الگوریتم به محیط پیرامون خود نگاه میکند. بهتدریج یاد میگیرد. در میدان عمل قرار میگیرد . اگر عملکرد درست داشته باشد، پاداش میگیرد (Reward) و اگر خطا کند پنالتی یا نمره خطا برایش درج میشود. بتدریج به سمتی مبرود که بهترین روش (most rewarding over time) را پیدا کند.

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

Batch and Online Learning :

در نوع Batch ابتدا سیستم ، با استفاده از داده های آفلاین آموزش داده میشود (offline learning) و سپس روی هر سیستم موردی نظری لانچ میشود. و فرآیند آموزش ان متوقف میشود. برای مثال اگر قیمت خودروهای پژو ۲۰۶ را از سایت دیوار بخوانیم و یک سامانه تخمین قیمت طراحی کنیم ، اگر یکبار دیتا را گرفته و سامانه را آموزش دهیم ، میگوییم از روش Batch استفاده کرده ایم. حال اگر با استفاده از یک حلقه در بازه های زمانی متعدد ، آخرین قیمت ها را از سایت بخوانیم ، میگوییم داریم Onlineعمل میکنیم.

به وضوح مشخص است که با روش online قیمتهای واقعی تری را خواهیم داشت. و بیشتر برای سیستم هایی مناسب است که دیتای موجود ف به طور پیوسته تغییر یا به روز رسانی میشود.

همچنین در نوع online برای دیتاهایی که حجم بزرگی دارند مناسب است. این روش با هدف بهینه سازی استفاده از مموری ماشین نیز مهم است.(this is called out-of-core learning) به طوری که بخش کوچکی از دیتای عظیم را آورده و سیستم را آموزش میدهیم و به همین ترتیب بخش های دیگری از دیتای بزرگ را میاوریم و مجددا سیستم تحت آموزش را آموزش میدهیم. و این عملیات تا زمانی که کل دیتا را بررسی کرده باشیم ادامه خواهد یافت.

به آنچه که در پارگراف قبلی اشاره شد ، نمیتوان گفت Online چون در واقع ممکن است به صورت offline اموزشها صورت بگیرد. بهتر است به آن بگوییم incremental learning

anomaly detection algorithm

در مواردی که در حال یادگیری تدریجی (incremental) هستیم ، ممکن است بیکباره ببینیم که خروجیهای نامتعارفی در سیستم ما مشاهده میشود. در این موقع این امکان وجود دارد که سیستم ماشین لرنینگ توسط اسپمر ها یا هر منبع دیگری توسط اطلاعات نادرست آموزش دیده باشد. و واضح است سیستمی که به نادرستی آموزش دیده باشد مانند تیغ در کف زنگی مست خواهد بود. یک راهکار برای جلوگیری از این مورد این است که همواره خوراک ورودی در training data set را مد نظر داشته باشیم که مبادا اطلاعات غلط وارد سیستم شود.

Instance-Based Versus Model-Based Learning

در مدل Instance-Based برای مثال در فرآیند تشخیص ایمیل های اسپم، الگوریتم طوری طراحی میشود که علاوه بر یافتن ایمیل های spam ، ایمیل هایی شبیه به spam را نیز شناسایی میکند.

در حالت modelbased training ابتدا یک مدل طراحی میشود و سپس با استفاده از آن مدل ، به انجام prediction پرداخته میشود.

برای مثال فرض کنید شما میخواهید رابطه بین پول با شادی مردم را بدست آورید. ابتدا دیتاهای Better life index را از این سایت دانلود میکنیم. همچنین آمار GDP را از این سایت دانلود میکنیم. سپس با ترکیب دیتاها و sort کردن آن بر اساس GDP per capita به جدول زیر میرسیم:

مقایسه شاخص GDP و میزان شادی مردم کشورهای مختلف

حال با برسی داده های چند کشور به صورت رندوم ، به نمودار زیر میرسیم:

آیا یک روند در این نمودار دیده می شود؟

به نظر میرسد که با افزایش شاخص GDP میزان شادی آن کشور کم و بیش به صورت خطی بالا میرود.

آنچه که تا اینجا انجام دادیم را Model selection میگویند. مدلی که رابطه بین میزان شادی مردم و GDP ان کشور را به ما نشان میدهد. به این مدل میتوان یک فرمول نسب داد:

در این مدل یک attribute داریم به نام GDP_per_capita و همچنین دو عدد پارامتر داریم به نام تتاصفر و تتایک

با کم و زیاد کردن تتایک و تتا صفر میتوان رفتار های متعددی را بازسازی نمود

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

قبل از اینکه به استفاده از مدل بپردازیم باید مقدار تتا ها را مشخص کنیم. از کجا باید بدانیم که چه مقادیری از تتا کاربردی ترین مدل را برای ما فراهم میکند. برای پاسخ دادن به این سوال باید باید utility function  یا fitness function را تعیین کرده و توسط آن ببینیم که مدل ما تا چه اندازه کاربردی می باشد.و یا اینکه Cost function‌تعریف کنیم تا ببینیم تا چه اندازه مدل ما ناکارآمد می باشد.

در مسائل رگرسیون خطی ، افراد معمولا از cost function‌استفاده میکنند که در واقع اختلاف بین پیشبینیهای  مدل خطی و مثالهای (training examples) را محاسبه میکند. و هدف این است که این اختلاف یا فاصله به کمترین مقدار ممکن برسد.

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

شما داداه های اموزشی(training examples) را به سیستم میدهید و بهترین حالت پارامترها را که به مدل شما فیت میشود را پیدا میکنید.به این فرآیند آموزش مدل یا (training the model) میگوییم.

در مدل ما الگوریتم به این نتیجه میرسد که تتا صفر و تتا یک در حالتی که مقادیر زیر را داشته باشند ، بهترین عملکرد صورت خواهد پذیرفت:

حال همانگونه که در شکل زیر نیز میبینیم ، مدل تهیه شده ، بر داده های آموزشی فیت (تاحد خوبی) شده است:

حالا وقت آن رسیده که سیستم را وادار کنیم برای ما پیشبینی انجام دهد. فرض کنید میخواهیم بدانیم مقدار شادی مردم فلان کشور چقدر است.

برای مثال در مورد به شاخص GDP کشور cypreus نگاه میکنیم و میبینیم که عددی برابر ۲۲۵۸۷$  میباشد و بعد از اجرای مدلمان که آنرا طراحی کرده ایم به این جواب میرسیم که شاخص رضایت از زندگی (life satisfaction) حدود ۵٫۹۶ ‌خواهد بود:

در ادامه کدهای پایتونی که این محاسبات را برای ما انجام میدهند را میبینیم:

آنچه در بالا استفاده کردیم روش model based learning  بود.  اگر به حای آن از الگوریتم instance-based learning ‌ استفاده کرده بودیم ، متوجه میشدیم که اسلوونی شاخص GDP نزدیک به کشور Cyprus یعنی ۲۰۷۳۵ دلار دارد و مطابق آنچه که آمارهای OECD به ما میدهد میبینیم که شاخص رضایت از زندگی در اسلوونی برابر ۵٫۷ است. بنابر این میتوان بدون محاسبات هم منطقی بودن عدد بدست آمده در محاسبات بالا را درک کرد.

اگر مقداری zoom out ‌کنیم و به دو کشور نزدیک بعدی (پرتقال و اسپانیا) نگاه کنیم میبینیم که شاخص رضایت از زندگی این دو کشور برابر ۵٫۱ و ۶٫۵  ‌می باشد. میانگین این سه عدد برابر ۵٫۷۷ می باشد که بسیار به آنچه که مدل ما پیش بینی میکند نزدیک است. این الگوریت ساده regression   k-nearest neighbors‌ نام دارد. K ‌در این مورد برابر با ۳ بوده است.

اگر میخواستیم مسئله قبلی را به روش  K nearst حل کنیم ، کافی بود جابه‌جایی زیر را در برنامه خود انجام دهیم:

کارهای کامل تری نیز میتوان انجام داد . برای مثال در نظر گرفتن attribute های دیگری نظیر ، نرخ بیکاری ، آلودگی هوا ،تورم و … .

به طور خلاصه کارهای زیر را انجام دادیم:

  • مطالعه دیتا
  • انتخاب مدل
  • فیت کردن آن روی داده های آموزشی (اینکه الگوریتم آموزش به دنبال پارامترهایی بود که تابع cost به مقدار minimum خود برسد.)
  • در نهایت از مدل استفاده کردیم تا با ورودی های جدید ، برای ما خروجی هایی را پیش بینی کند. به این کارInference میگوییم و دوست داریم که به طور عمومی برای هر نوع ورودی ، خروجی مطلوب و معقولی به ما بدهد.
  • مطالعه دیتا
  • انتخاب مدل
  • فیت کردن آن روی داده های آموزشی (اینکه الگوریتم آموزش به دنبال پارامترهایی بود که تابع cost به مقدار minimum خود برسد.)
  • در نهایت از مدل استفاده کردیم تا با ورودی های جدید ، برای ما خروجی هایی را پیش بینی کند. به این کارInference میگوییم و دوست داریم که به طور عمومی برای هر نوع ورودی ، خروجی مطلوب و معقولی به ما بدهد.

به طور کلی آنچه در بالا انجام دادیم ، اصول اجرای یک پروژه ماشین لرنینگ بود.

در ادامه میخواهیم چند مورد را بررسی کنیم. مثلا اینکه چه مواردی ممکن است فرآیند یادگیری را مختل کند و باعث شود پیش بینی های درستی نداشته باشیم.

چالش های اصلی در ماشین لرنینگ:

در حل مسائل به روش ماشین لرنینگ ، دو مورد ممکن است پیش بیاید:

  • الگوریتم نامناسب
  • دیتای نامناسب

ناکافی بودن دیتای آموزش(training data) :

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

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

Sampling bias:

یکی از چالش های دیگری که در ماشین لرنینگ وجود دارد ، سوگیری داشتن داده هاست. برای مثال در سال ۱۹۳۶ در انتخابات ریاست جمهوری امریکا ، یک نظر سنجی بزرگ انجام شد. به طوری که برای ۱۰ ملیون نفر ایمیل ارسال کردند و از ۲٫۴ ملیون ایمیل پاسخ دریافت کردند. و با اطمینان اعلام کردند که ۵۷ درصد از آرا به landon (نامزد انتخابات و حریف roosevelt) اختصاص خواهد یافت. اما بعد از انتخابات مشخص شد که ۶۲ درصد آرا به roosevelt رسیده و برنده انتخابات می باشد.

بعد از بررسی مشخص شد که ایمیل های انتخاب شده از منابع زیربوده است:

  • افرادی که اشتراک ماهانه مجله داشته اند
  • اعضای کلوپ های تفریحی
  • افراد دارای تلفن

بنابر این بعد از اندگی تامل دریافتند که جامعه آماری آنها را افراد متمول و پولدار و غنی (با تمایلات و نظرات خاص سیاسی نسبت به یکی از نامزدها) تشکیل میداده است و این یعنی (sampling bias)

Poor-Quality Data :

ممکن است دیتای ما دارای noise و outlier و یا missed … باشد . و این موارد در نتیجه کار تاثیر گذار خواهد بود. آنچه مهم است این است که زمان کافی برای تمیز کردن دیتا در نظر گرفته شود.

Irrelevant Features :

بسیار مهم است که ما feature هایی داشته باشیم که در آموزش مدلمان تاثر گذار باشد. feature هایی که هیچ تاثیری در آموزش مدل ندارند ، تنها بار محاسباتی داشته و فضا را اشغال میکنند. پروسه ای که در آن به بررسی این موارد پرداخته می شود feature engineering نام دارد. که خود شامل موارد زیر می باشد :

  • Feature selection : انتخاب FEATURE هایی که مفید هستند.
  • Feature extraction : ترکیب کردن Feature های موجود و بدست آوردن feature هایی که تاثیر بهتری در یادگیری دارند.
  • Creating new features by gathering new data

تا اینجا مثال هایی در مورد دیتای نامناسب زدیم . حال در ادامه به چند نمونه از الگوریتم های نامطلوب اشاره میکنیم:

Overfitting the Training Data :

برخی مدل ها هستند که دقت بسیار بالایی در بیان رفتار داده های ما را دارند. اما نمیتوان به آنها اعتنا نمود. به تصویر زیر دقت کنید.:

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

overfitting زمانی رخ میدهد که نویزدیتا زیاد باشد. راهکارهای جلوگیری از overfitting عبارتند از:

  • ساده کردن مدل به طوری که پارامترهای کمتری داشته باشد.(برای مثال استفاده از مدل خطی ساده به جای high degree polynomial model)- کم کردن تعداد attributes در دیتاهای آموزشی
  • افزایش تعداد دیتاهای آموزشی (training data)
  • کاهش نویز موجود در دیتاهای آموزشی

مجموعه اقداماتی که برای ساده تر کردن مدل انجام میدهیم که ریسک overfit شدن را کاهش دهیم را Regularization مینامند. مقدار این اقدامات را میتوان با Hyper parameters کنترل کرد.

Underfitting the Training Data:

اگر یک مدل دقت پایینی داشته باشد و نتواند پیش بینی های خوبی برای ما انجام دهد میگوییم underfit می باشد. مهمترین اقدامات برای پرهیز از underfitting عبارتند از :

  • انتخاب مدل قوی تر با پارامترهای بیشتر
  • انتخاب Feature های مناسب
  • کاهش محدودیت های مدل (برای مثال کاهش regularization hyper parameter )

Testing and Validating:

برای اینکه بدانیم ، مدل ما بدرستی کارمیکند یا خیر ، باید آن را تست کنیم. یک روش خوب تقسیم کردن دیتا به Trainig set و test set می باشد. با استفاده از بخش Trainig set مدل خود را آموزش می دهیم و با بخش test به تست کردن آن میپردازیم. به مقدار خطا ا توجه به ورودی های جدیدgeneralization error میگوییم. اگر خطای training error کم باشد( یعنی در هنگام مار روی دیتای training ) اما خطای Generalization زیاد باشد ، یعنی مدل ما روی دیتای آموزشی Overfit میباشد.

معمولا نسبت دیتای آموزشی به دیتای تست ۸۰ به ۲۰ می باشد.

Hyperparameter Tuning and Model Selection

اگر بین انتخاب یکی از دو مدل (linear & polynomial) مردد باشیم با تست کردن آنها با Test set میتوان به انتخاب بهتری رسید.

فرض کنیم که مدل linear را به دلیل (better generalization) انتخاب کنیم. حال سوال اینجاست که چگونه پارامترهای (regularization hyperparameter) را انتخاب کنیم که overfit کمتری داشته باشیم. یک راه حل این است که ۱۰۰ بار با ۱۰۰ پارامتر مختلف hyperparameter آزمایش انجام دهیم و نتایج را ببینیم. فرش کنید به خطای قابل قبولی برسیم.(مثلا ۵ درصد)

اکنون الگوریتم را روی محصول خود لانچ میکنیم و میبینیم که ۱۵ درصد خطا داریم. اما چرا این اتفاق می افتد؟

یک روش رایج برای حل این مسئله holdout validation نام دارد. به سادگی بخشی از training set برای تست کردن مدلهای مختلف انتخاب میشود(که بهترین آن انتخاب شود). به set جدید انتخاب شده ، validation set میگویند(یا dev set به معنای development set)

این روش معمولا جواب میدهد. اما اگر validation set خیلی کوچک باشد، دقت کار کم خواهد بود.

مفاهیم زیر در فصل اول بیان شده بود که بنده با توجه به عدم نیاز در زمان مرور کتاب، آنان را ترجمه نکردم. اما در صورت نیاز به آنها رجوع خواهد شد:

۱- Data Mismatch
2-No Free Lunch Theorem

———————————————————-

منبع کتاب زیر :

Hands-On Machine Learning with Scikit-Learn and TensorFlow

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *