۱۰ دقیقه برای شروع یادگیری ماشین
مقدمه
در این مقاله سعی میکنیم مسیر یک پروژه یادگیری ماشین رو با هم مرور کنیم . این موارد شامل کلیه مراحل پروژه های یادگیر ماشین از ابتدا تا انتهاست.
همچنین مراحلی مثل پیش پردازش و مرتب کردن داده ها، اکتشاف و مهندسی ویژگی ها و تاثیر همه ی این موارد بر عملکرد و کارایی مدل نهایی را بررسی خواهیم کرد.
احتمالا برای پیاده سازی با پایتون به کتابخانه های زیر نیاز خواهیم داشت:
- Numpy
- Pandas
- Sci-kit Learn
- Matplotli
مرور مراحل یادگیری ماشین
مراحل زیر ۵ گام اصلی برای یادگیری ماشین می باشد:
- جمع آوری داده مورد نیاز
- پیش پردازش داده ها
- پیداکردن مناسب ترین مدل (به نسبت داده اولیه)
- آموزش و تست مدل
- ارزیابی نهایی
در اینجا بهتره به اصول اولیه یادگیری ماشین بپردازیم.
مدل در یادگیری ماشین چیست؟
در حقیقت مدل هیچ چیز خاصی جز یک قطعه کد نیست که مهندسی مثل شما آن را با آموزش، به مرور هوشمند و هوشمند تر کرده است. واضح است که اگر آموزش غلط بدهیم یا با داده غلط آموزش بدهیم نتیجه دلخواه به دست نخواهد آمد. درست مثل یک دانش آموزش دبستانی که اگر جمع یا تفریق را به درستی به او یاد ندهیم نباید منتظر پاسخ گویی صحیح او باشیم.
۱- جمع آوری داده
روند جمع آوری داده بسیار به نوع پروژه ای که میخواهیم انجام دهیم وابسته است. اگر بخواهیم یک پروژه یادگیری ماشین real-time (یا به عبارت دیگر در لحظه پاسخ دهنده :) داشته باشیم باید از یک سیستم IOT یا همان اینترنت اشیا که از تعدادی سنسور برای درک محیط اطراف استفاده میکند، بهره بگیریم. و اگر نه میتوانیم از تصاویر ، پایگاه های داده و یا هر مدل داده ورودی دیگری استفاده کنیم. اما نکته مهم این است که نمیتوانیم هر داده ای را مستقیم برای یادگیری مدل خود استفاده کنید. چرا؟
دلیل این موضوع نسبتا واضح است چون ممکن است داده ی اولیه شامل مقادیر زیادی نویز، داده های از دست رفته و مقادیر بسیار بزرگ تر از حد پیشبینی شده و ... باشد که برای این کار نیاز به آماده سازی داده داریم.
ما همچنین می توانیم از برخی مجموعه داده های رایگان که در اینترنت موجود هستند استفاده کنیم. مخزن یادگیری Kaggle و UCI مخازنی هستند که بیشترین استفاده را برای ساخت مدلهای یادگیری ماشینی دارند. Kaggle یکی از پر بازدید ترین وب سایت هایی است که برای تمرین الگوریتم های یادگیری ماشین استفاده می شود.
۲- پیش پردازش داده ها
پیش پردازش داده ها یکی از مهم ترین مرحله ها برای یادگیری ماشین می باشد. دلیل این اهمیت اثرگذاری بسیار زیاد این مرحله بر دقت ساخت مدل مورد نیاز است. در یادگیری ماشین قانون ۸۰-۲۰ حکم فرماست به این نحو که ما باید ۸۰ درصد زمان خود را صرف پیش پردازش و فقط ۲۰ درصد زمان را صرف تجزیه و تحلیل داده کنیم.
پیش پردازش داده چیست؟
پیش پردازش داده ها مرحله ای برای مرتب کردن داده های خام است. به عبارت دیگر ، هر زمان که داده ها از منابع مختلفی جمع آوری شوند ، به صورت خام جمع آوری می شوند و این داده ها برای تجزیه و تحلیل مناسب نیست.
بنابراین ، مراحل خاصی برای تبدیل داده ها به مجموعه داده های منظم و نرمال انجام میدهیم که به مرحله پیش پردازش داده ها گفته می شود.
چه مواردی را باید انجام دهیم؟
همانطور که میدونیم پیش پردازش داده ها داده های خام را به داده های مرتب تبدیل میکند حالا از این داده ها باید برای آموزش مدل خود استفاده کنیم. چیزی که باید بدونیم اینه که برای رسیدن به یک مدل یادگیری ماشین یا یادگیری عمیق خوب ما حتما به پیش پردازش داده ها نیاز خواهیم داشت.
اغلب داده های دنیای واقعی مرتب نیست. بعضی از موارد نامرتب بودن داده ها را با هم مرور کنیم:
۱- داده های ناقص : این داده ها زمانی به وجود میایند که سیستم به طور منظم داده را ذخیره نکرده باشد و یا به واسطه برخی مشکلات تکنیکی و نرم افزاری
۲- داده های نویز : این نوع داده که outliners نیز نامیده میشود، میتواند ناشی از اشتباهات انسانی (جمعآوری دستی دادهها) یا برخی از مشکلات فنی دستگاه در زمان جمعآوری دادهها باشد.
۳- دادههای Inconsistent یا ناهمخوان : این نوع از دادهها ممکن است به دلیل اشتباهات انسانی (اشتباه در نامگذاری یا مقدار دهی) یا داده های تکراری ایجاد شود.
سه نوع اصلی داده ها
۱- عددی (Numeric) به عنوان مثال درآمد ، سن
۲- طبقه ای (Categorical) به عنوان مثال جنسیت ، ملیت
۳- معمولی (Ordinal) به عنوان مثال کم متوسط زیاد
چگونه پیش پردازش داده را انجام دهیم؟
برخی از تکنیکهای اولیه پیشپردازش داده که میتوانیم برای تبدیل دادههای خام استفاده کنیم:
۱- تبدیل داده ها: از آنجا که می دانیم که مدل های یادگیری ماشین فقط می توانند ویژگی های عددی را استفاده کنند ، بنابراین سایر داده ها باید به نوعی به ویژگی های عددی تبدیل شوند.
۲- نادیده گرفتن مقادیر ناقص: هر زمان که در مجموعه داده ها با داده های ناقص مواجه می شویم ، می توانیم بسته به نیاز خود ، ردیف یا ستون داده ها را حذف کنیم. این روش کارآمد است اما اگر مقادیر زیادی داده های ناقص در مجموعه وجود داشته باشد ، نباید انجام شود.
۳- پر کردن مقادیر ناقص: هر زمان که در مجموعه داده ها با داده های ناقص مواجه می شویم ، می توانیم داده های ناقص را به صورت دستی پر کنیم ، معمولاً از میانگین ، متوسط یا بالاترین مقدار فرکانس استفاده می شود.
۴- یادگیری ماشین: اگر برخی از اطلاعات ناقص را داشته باشیم ، می توانیم با استفاده از داده های موجود ، پیش بینی کنیم که چه داده هایی باید در جای خالی قرار بگیرند.
۵- شناسایی Outliers: در برخی از داده های مقادیر از حد تصور و بازه قطعی بسیار بیشتر یا کمتر است به نحوی که خطا بود آن کاملا واضح است در این موارد میتوانیم این داده ها را در صورت داشتن راه حل اصلاح نماییم. [مثال: وزن انسان = ۸۰۰ کیلوگرم؛ به دلیل ۰ اضافه]
۳- پیداکردن متناسب ترین مدل برای نوع داده ها
هدف اصلی ما یافتن بهترین مدل ممکن با استفاده از داده های از پیش پردازش شده است.
یادگیری با نظارت:
در یادگیری نظارت شده ، سیستم هوش مصنوعی با داده هایی مدل می شود که دارای برچسب هستند ، به این معنی که هر داده دارای برچسب صحیح است.
یادگیری نظارت شده شامل دو دسته "Classification" و "Regression" می باشد.
- طبقه بندی یا Classification:
طبقه بندی زمانی مورد نیاز است که داده ها دارای دسته بندی مشخص باشند به نحوی که داده جدید را بتوان در دسته A یا B قرار داد. مانند "قرمز" یا "آبی" ، "بیماری" یا "عدم بیماری" یا "اسپم" یا "عدم اسپم" .
همانطور که در شکل فوق نشان داده شده است ، ما 2 کلاس داریم که بر روی نمودار رسم شده اند یعنی قرمز و آبی که می توانند به عنوان "گل setosa" و "گل versicolor" نمایش داده شوند ، محور X برای عرض کاسبرگ و و محور Y برای طول کاسبرگ در نظر گرفته شده است.حالا ما سعی می کنیم بهترین خط برای جدا کردن دو نوع گل را پیدا کنیم. بدیهی است برای دسته بندی داده های جدید این خط خط معیار ما می باشد.
برخی از رایج ترین الگوریتم های دسته بندی عبارت است از :
- K-Nearest Neighbor
- Naive Bayes
- Decision Trees/Random Forest
- Support Vector Machine
- Logistic Regression
- رگرسیون :
مدل سازی بر پایه رگرسیون زمانی استفاده میشود که متغیر ها پیوسته باشند:
همانطور که در شکل فوق نشان داده شده است ، محور X نمودار "نمرات آزمون" است و محور Y نشان دهنده "IQ" است. بنابراین ما سعی می کنیم در نمودار مورد نظر بهترین خط را ایجاد کنیم تا بتوانیم از آن خط برای پیش بینی نمره تقریبی هر ضریب هوشی که در داده ها وجود ندارد استفاده کنیم.
برخی از رایج ترین الگوریتم های رگرسیون عبارت است از :
- Linear Regression
- Support Vector Regression
- Decision Tress/Random Forest
- Gaussian Progresses Regression
- Ensemble Methods
یادگیری بدون نظارت:
در یادگیری بدون نظارت یک سیستم هوش مصنوعی باید با داده بدون برچسب و طبقه بندی نشده مدل شود و الگوریتم ها بدون آموزش قبلی روی داده ها عمل می کنند.
یادگیری بدون نظارت شده شامل دو دسته "Clustering" و "Association" می باشد.
خوشه بندی یا Clustering
در این روش داده ها به گروه هایی تقسیم می شوند. برخلاف طبقه بندی ، گروه ها از قبل مشخص نیستند ، و این کار معمولاً یک کار غیرقابل نظارت است.
برخی از رایج ترین الگوریتم های خوشه بندی عبارت است از :
- Gaussian mixtures
- K-Means Clustering
- Boosting
- Hierarchical Clustering
- K-Means Clustering
- Spectral Clustering
۴- آموزش و تست مدل
برای آموزش یک مدل ، ابتدا داده ها را به ۳ بخش تقسیم می کنیم که عبارتند از "داده های آموزشی" ، "داده های اعتبارسنجی" و "داده های آزمایش یا تست".
ما مدل سازی را با استفاده از "مجموعه داده های آموزشی" آموزش می دهیم ، پارامترها را با استفاده از "مجموعه اعتبارسنجی" تنظیم می کنید و سپس عملکرد مدل خود را بر روی "مجموعه داده های آزمون" آزمایش می کنید. نکته مهمی که باید به آن توجه داشته باشید این است که در حین آموزش طبقه بندی کننده فقط مجموعه آموزش و یا اعتبار سنجی در دسترس است. از مجموعه داده های آزمون نباید هنگام آموزش طبقه بندی استفاده شود. مجموعه تست فقط هنگام تست طبقه بندی در دسترس خواهد بود.
مجموعه آموزشی: مجموعه داده ای که برای یادگیری مدل مورد نیاز
اعتبار سنجی: مجموعه داده ای دیده نشده برای اعتبار سنجی و تنظیم بهتر پارامترهای مدل.
مجموعه تست: مجموعهای از دادههای دیده نشده برای ارزیابی عملکرد نهایی مدل
پس از تقسیم داده ها به 3 بخش می توانیم فرایند آموزش را شروع کنیم.
معمولا پس از حذف دیتای تست از دیتای آموزش چندین مرحله برای ساخت مدل استفاده میکنیم. به این نحو که در هر مرحله دیتای باقی مانده را به دوقسمت آموزش و اعتبار سنجی تفکیک میکنیم و کار آمورش را در اندازه کوچک تر انجام میدهیم. تا مدل نهایی ساخته شود. پس از آموزش مدل می توانیم از همان مدل آموزش دیده استفاده کنیم تا با استفاده از داده های تست یعنی داده های دیده نشده پیش بینی نهایی انجام شود. هنگامی که این کار انجام شد می توانیم یک ماتریس پراکندگی ایجاد کنیم ، این به ما می گوید که مدل ما چقدر خوب آموزش داده شده است. یک ماتریس پراکندگی دارای 4 پارامتر است که عبارتند از "مثبت صحیح" ، "منفی صحیح" ، "مثبت غلط" و "منفی غلط". ما ترجیح می دهیم که منفی و مثبت های صحیح بیشتری را کسب کنیم تا یک الگوی دقیق تر دریافت کنیم.
مثبت های صحیح: مواردی است که ما آن را TRUE پیش بینی کردیم و پیش بینی ما صحیح است.
منفی های صحیح: ما FALSE پیش بینی کردیم و پیش بینی ما صحیح است.
مثبت های غلط: ما TRUE پیش بینی کردیم ، اما خروجی واقعی FALSE است.
منفی های غلط: ما FALSE را پیش بینی کردیم ، اما خروجی واقعی TRUE است.
در نهایت ما می توان با استفاده از ماتریس پراکندگی دقت مدل را خود را بفهمیم.
Accuracy = (True Positives +True Negatives) / (Total number of classes)
برای مثال بالا:
Accuracy = (100 + 50) / 165 = 0.9090 (90.9% accuracy)
۵- ارزیابی
ارزیابی مدل بخشی جداییناپذیر از فرآیند توسعه مدل است.که به پیدا کردن بهترین مدل کمک میکند و نحوه کارکرد آینده مدل را مشخص خواهد کرد.
برای بهبود مدل ممکن است پارامترهای بالا را بار ها و بار ها تغییر دهیم و سعی در بهبود دقت مدل داشته باشیم و همچنین با محاسبه به ماتریس پراکندگی تعداد مثبتهای صحیح و منفیهای صحیح را افزایش دهیم.
۶- نتیجه گیری
در این مقاله فقط دورنمایی از نحوه یک پروژه یادگیری ماشین را با هم مرور کردیم که در هر قسمت نیاز به عمق و یادگیری بیشتری داریم. به طور مثال هر کدام از الگوریتم هایی که در این مقاله نام بردیم نیاز به بررسی جزییات ، نحوه عمکرد و ... دارد که در آینده بررسی خواهیم کرد. اکثر مطالب این مقاله از این لینک برداشت شد به جز مواردی که نیاز به کمی توضیح بیشتر و یا حتی ساده تر بیان کردن موضوعات داشت که در این موارد تغییرات اندکی داشتیم.
در ضمن پروژه سمپلی با موارد یاد شده در این مقاله در این لینک گیت هاب قرارداده شده که قابل دسترس شما میباشد.
مطلبی دیگر از این انتشارات
گام اول
مطلبی دیگر از این انتشارات
توسعه REST API با استفاده از GoLang, Echo, MySql, JWT Token با معماری MVC
مطلبی دیگر از این انتشارات
تجربه ساخت تیم محصول در اسنپ مارکت