آموزش صفر تا صد یادگیری ماشین با پایتون 

آموزش صفر تا صد یادگیری ماشین با پایتون 

  buy_icon  

هوش مصنوعی یکی از داغ ترین موضوعات روز است به صورتی که حتی افراد با تخصص متفاوت و سطح تحصیلات پایین هم از اهمیت آن در آینده نه چندان دور باخبر هستند. اما اگر بخوهیم در مورد هوش مصنوعی صحبت کنیم باید زیربخش های کلی آن را شرح داد و از کلی گویی پرهیز کرد، همان کاری که خبرگزاری ها می کنند: کلی گویی! 

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

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

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

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

اما سه دسته مهم از روش های یادگیری ماشین به این ترتیب است: ۱– یادگیری با ناظر(نظارت شده) ۲- یادگیری بدون ناظر(نظارت نشده) و ۳- یادگیری تقویتی 

 

مثال خودمونی از یادگیری با ناظر (supervised learning) 

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

 

مثال خودمونی از یادگیری بدون ناظر (unsupervised learning)  

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

 

مثال خودمونی از یادگیری تقویتی (reinforcement leraning) 

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

 

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

 

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

1ویژگی ها در دیتاست کدام اند؟ 

2برچسب ها در دیتاست کدام اند؟ 

3نمونه ها در دیتاست کدام اند؟ 

 

بنابراین سه مفهوم مهم ویژگی (یا بعد)، برچسب و نمونه است. دانستن تفاوت اینها بسیار اهمیت دارد و می تواند کار را سخت یا آسان کند. 

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

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

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

در بحث یادگیری بدون ناظر هم معمولا با دو مساله مواجه می شویم: کلاسترینگ (خوشه بندی) و کاهش بعد. خوشه بندی در واقع همان جداسازی میوه های متفاوت بدون حضور ناظر است. کاهش بعد بیشتر در بحث پیش پردازش داده مطرح است و زمانی کاربرد دارد که پیچیدگی دیتاست زیاد است یا به بیان دیگر دارای ابعاد زیادی است که برای مدل یادگیری ماشین قابل فهم نیست. کاهش بعد کمک می کند تا تعداد ویژگی ها (یا بعد ) داده کم شود.  

 

خب بریم سراغ کد زدن! 

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

– آموزش مقدماتی پایتون،قسمت اول: ریاضیات در پایتون

-آموزش مقدماتی پایتون،قسمت دوم: کار با رشته ها و حروف در پایتون (string in python)

-آموزش مقدماتی پایتون،قسمت سوم: دستورات شرطی و حلقه ها

-آموزش مقدماتی پایتون،قسمت چهارم: داده ها در پایتون

-آموزش مقدماتی پایتون،قسمت پنجم: تابع و کلاس

 

قبل از اینکه بریم سراغ مثال، باید یه مقدار در مورد کار با داده ها در پایتون با ماژول هایی مثل numpy و pandas بدونی، پس بد نیست یه سری هم به این پست ها بزنی:

-قسمت اول: مروری بر ماژول تحلیل داده و ساختار ساز Pandas

-قسمت دوم: محاسبه پارامترهای آماری رایج در پایتون

-قسمت سوم:پروژه ارتباط بین سن بازدیدکنندگان وبسایت و احتمال خرید آن ها با استفاده از احتمال شرطی

-قسمت چهارم: مدل کردن یا برازش منحنی روی داده ها در پایتون

-قسمت پنجم: تشخیص ایمیل اسپم و غیر اسپم با استفاده از قاعده بیز

 

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

 

مثال ساده از کلاسبندی با پایتون 

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

فرض کنید داده های جمع آوری شده به این صورت است: 

 

برچسب  رنگ   اندازه(سانتی متر)  وزن (کیلوگرم)  نمونه ها  
محصول الف  آبی  50  120  1 
محصول ب  قرمز  20  60  2 
محصول الف  آبی  65  145  3 
محصول الف  زرد  45  130  4 
محصول ب  قرمز  15  50  5 

 

این داده را می توان در پایتون به کمک کتابخانه numpy به صورت ماتریسی نوشت: 

 

نکته: این یک دیتاست ساختگیست و به گونه ای ساده است که احتمالا بتوان با چند دستور شرطی سیستم را به اصطلاح هوشمند کرد! اما در عمل دیتاست های ما دارای ویژگی های بسیار زیادی است که با چند دستور شرطی به راحتی قابل تفکیک نیست.   

خب اینجا با یک مساله کلاسبندی رو به رو هستیم و روش های زیادی برای کلاسبندی وجود دارد. از جمله این روش ها می توان به knn, svm, descion tree, navie bayes و حتی شبکه های عصبی اشاره کرد.  

برای استفاده از روش های یادگیری ماشین لازم نیست تا خودتان ریاضی بدانید و آنها را پیاده سازی کنید. کتابخانه scikit-learnدر پایتون محبوب ترین کتابخانه یادگیری ماشین است که کار را بسیار راحت کرده است. 

با دقت شود در تمام مسایل یادگیری ماشین ویژگی ها و برچسب ها باید به صورت اعداد باشند. بنابراین ویژگی رنگ و برچسب باید به صورت عددی در بیایند. عددی کردن به این معناست که به جای نام دسته یک شماره ای به دسته اختصاص می دهیم و جایگزین می کنیم. مثلا رنگ آبی را 0، قرمز 1 و … در نظر می گیریم. برای برچسب هم به همین صورت. خوشبختانه کتابخانه scikit-learn کار را ساده کرده و میتوان با یک دستور این تبدیل را انجام داد. به این صورت: 

 

فرض کنید می خواهیم روش knn را روی دیتاست بالا اعمال کنیم. ابتدا ویژگی ها و برچسب را جدا می کنیم: 

حال به این صورت ابتدا مدل knn را تعریف می کنیم: 

 

و سپس مدل را با استفاده از دیتاستی که داریم آموزش می دهیم: 

 

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

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

 

رنگ را کدگذاری میکنیم : 

 

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

 

که در خروجی حرف A را نشان خواهد داد. 

 

توجه: کد کامل به صورت زیر می شود: 

 

مثال ساده از کلاسترینگ با پایتون 

 

حال فرض کنید همان دیتاست مثال قبل را داریم با این تفاوت که دیگر داده های ما بر چسب ندارد. بدون برچسب چگونه می توانیم دو محصول را از هم تفکیک کنیم ؟! آیا شدنی است؟ بله شدنی است اما دقت نهایی آن به دیتا و روشی که برای خوشه بندی استفاده می کنیم بستگی دارد 

یک روش معروف برای بحث خوشه بندی kmeans  است که به راحتی با استفاده از کتابخانه scikit-learn می توان از آن استفاده کرد 

 

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

 

  

تنها تفاوت در خوشه بندی این است که فقط متغیر featuresرا داریم و خبری از label نیست بنابراین در اینجا آن را نادیده می گیریم.  

 

حال مدل kmeans را از کتابخانه sklearn انتخاب کرده و مدل را ایجاد کنید: 

 

 

در نهایت مدل را آموزش می دهیم رو داده  

 

 

در این حالت مدل kmeans داده ها را به دو دسته تفکیک می کند که می توان شماره دسته هر نمونه را به این صورت دید: 

 

 

چیزی که در خروجی خواهید دید به این صورت است: 

 

10110 

اگر 1 را محصول الف و 0 را محصول ب در نظر بگیریم، متوجه میشویم مدل به خوبی داده ها را بدون اینکه برچسب ها را ببیند تقسیم کرده است.  

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

 

 

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

 

 

در صورت استفاده از مطالب این سایت لطفا به سایت ارجاع دهید

دیدگاه شما

( الزامي )

(الزامي)