یادگیری ماشین با پایتون – به زبان ساده (+ دانلود فیلم آموزش گام به گام)

فیلم آموزشی یادگیری ماشین با پایتون
در این مطلب، با یک بررسی موردی، به افرادی که به دنیای یادگیری ماشین علاقمند هستند نشان داده خواهد شد که چگونه میتوانند یک مساله را از صفر تا صد با پایتون حل کنند. ابتدا به طور خلاصه یادگیری ماشین و پروژههای رایج در آن را تعریف میکنیم. سپس مشهورترین و کاربردیترین کتابخانههای پایتون برای حل مسائل برنامه نویسی را معرفی میکنیم. در نهایت هم با کمک یادگیری ماشین در پایتون پروژه ساده و جذابی را حل خواهیم کرد.
مقدمهای بر یادگیری ماشین با پایتون
۱. نامپای (NumPy)
۲. پانداس (Pandas)
۳. متپلاتلیب (Matplotlib)
۴. سیبورن (Seaborn)
۵. سایکیتلِرن (Scikit-Learn)
۶. تنسورفلو (Tensorflow) و پایتورچ (Pytorch)
پروژههای یادگیری ماشین با پایتون
قطعا، مطالعه صرف نمیتواند به فرد کمک کند که در زمینه کاری خود توانمند شود. افراد در هر زمینهای که تمایل به کسب مهارت در آن داشته باشند، باید علاوه بر مطالعه و تحقیق، تمرین و پروژههای عملی داشته باشند و به کسب تجربه در آن حوزه بپردازند. در بحث یادگیری ماشین، مادامی که فرد در میان دادهها شیرجه نزند و با آنها کار نکند، نمیتواند بر این حوزه تسلط کافی پیدا کند و بنابراین، نمیتواند پروژهها یا فرصتهای شغلی خوبی به دست بیاورد.
«کگل» (Kaggle) پلتفرمی است که میتوان با استفاده از آن، مستقیما به سراغ دادهها رفت و با آنها کار کرد. در این سایت میتوان با پروژهها و مسائل گوناگون آشنا شد و به حل آنها پرداخت. چیز دیگری که شاید اغوا کنندهتر به نظر برسد این است که رقابتهایی که در کگل برگزار میشوند جوایز گوناگونی دارند و رقم جایزه برخی از آنها به ۱۰۰,۰۰۰ دلار نیز میرسد. اما، مهمترین مساله در این وهله (و در مرحله یادگیری) پول نیست، زیرا در صورتی که فرد به این حوزه مسلط باشد میتواند پروژههای متعددی با درآمدهای خوب و فرصتهای شغلی با شرایط عالی پیدا کند. آنچه یک فرد تازه وارد در حوزه کار با داده به آن نیاز دارد، یادگیری و کسب تجربه است، البته لذت مسابقه دادن و برنده شدن جایزه را نمیتوان انکار کرد. در ادامه، یک بررسی موردی انجام شده و طی آن یک مساله یادگیری ماشین با پایتون حل شده است.
تشخیص افراد نجات یافته از کشتی تایتانیک
در اینجا صحبت از کشتی تایتانیک معروف و حادثهای است که برای آن رخ داد. در فاجعه تایتانیک که در سال ۱۹۱۲ رخ داد، ۱۵14 نفر از ۲۲۲۴ مسافر و خدمه این کشتی، جان خود را از دست دادند. رقابت کگل تایتانیک (و یا به عبارتی راهنمای آموزشی)، دادههای حقیقی پیرامون این حادثه تلخ را در اختیار عموم قرار میدهد. وظیفه کاربر در این وهله آن است که از این دادهها برای پیشبینی این موضوع استفاده کند که آیا یک شخص خاص در این حادثه جان سالم به در برده است یا خیر.
یادگیری ماشین با پایتون

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

آنچه در تصویر بالا وجود دارد، نمونهای از دادههای مجموعه داده تایتانیک هستند. ستونهای زیر در مجموعه داده وجود دارند.
- PassengerId: شماره شناسایی مسافران
- Survived: وضعیت زنده ماندن یا نماندن فرد
- Pclass: کلاس خدماتی که فرد برای آن بلیط گرفته است. در اینجا، «۱» کلاس اقتصادی، «۲» کلاس تجاری و «۳» درجه یک است.
- Name: نام مسافر
- Gender: جنسیت مسافر
- Age: سن مسافر
- Sibsp یا siblings and spouses: تعداد اعضای خانواده (همسر، خواهران و برادران) مسافر در کشتی
- Parch یا parents and children: تعداد والدین و فرزندان حاضر در کشتی (برای یک شخص حاضر در کشتی) مسافر
- Ticket: جزئیات بلیط مسافر
- Cabin: اطلاعات کابین مسافر، وجود NaN در این قسمت، به معنای ناشناخته است.
- Embarked یا محل مسافرگیری: S برای ساوتهمپتون (Southampton) و Q برای «کویینزتاون» (Queenstown) و C برای «شربورگ» (Cherbourg)
خروجی، تصویری مانند زیر خواهد بود.

پاکسازی دادهها
پیشپردازش دادهها بخش مهمی از فرایند «دادهکاوی» (Data Cleaning) است. هنگامی که دادهها پاکسازی شد، میتوان بدون نگرانی از هر چیزی، به گام بعدی رفت. یکی از گامهای متداولی که طی فرایند پاکسازی دادهها برداشته میشود، «جایگذاری مقادیر ناموجود» است. هیچ قاعده مشخصی برای انجام این کار وجود ندارد و راهکارهای گوناگونی تاکنون برای آن ارائه شدهاند که هر یک مزایب و معایب خود را دارند.
گاه میتوان با آزمودن راهکارهای گوناگون و سنجش کارایی آنها برای یک مساله خاص، بهتری رویکرد را برگزید. به عنوان یک قاعده سرانگشتی، این نکته را نباید فراموش کرد که برای دادههای «طبقهای» (Categorized)، تنها از «مُد» (Mode) و از میانه یا میانگین برای دادههای پیوسته میتوان استفاده کرد. با توجه به اینکه embarkation مقادیر طبقهای دارد، از مد برای پیدا کردن مقادیر ناموجود آن استفاده میشود. همچنین، از میانه برای پر کردن مقادیر ناموجود Age استفاده میشود.
مساله بعدی، حذف دادهها برای مواردی است که مقادیر ناموجود زیادی دارند. برای مثال، در این مجموعه داده، cabin دارای مقادیر ناموجود زیادی است. بنابراین، ستون آن به طور کامل حذف میشود (البته به طور کلی، راهکار حذف نمونهها یا ویژگیهایی که دارای مقادیر از دست رفته هستند توصیه نمیشود. چون بدین شکل ممکن است اطلاعات مهمی از دست بروند. بنابراین، توصیه کلی آن است که از انجام چنین کاری حدالمقدور اجتناب شود).
اکنون، میتوان دادههای پاکسازی شده را بررسی کرد.

مساله مقادیر ناموجود به خوبی حل شده و همانطور که در تصویر بالا نیز میتوان مشاهده کرد هیچ داده ناموجودی پیدا نشده است. این یعنی دادهها پاکسازی شدهاند.
مهندسی ویژگیها
مثالهای دیگر در همین رابطه، SibSp و Parch هستند. شاید هیچ چیز جالبی در این دو ستون وجود نداشته باشد، اما بدین شکل میتوان فهمید خانوادههایی که در کشتی حضور داشتند چقدر بزرگ بودهاند. ممکن است به نظر برسد که اگر خانواده بزرگتر بوده باشد، شانس نجات یافتن اعضای آن نیز بیشتر است. زیرا اعضای خانواده میتوانند به یکدیگر کمک کنند. این در حالی است که افراد تنها، چنین شانسی ندارند. بنابراین، ستون دیگری ساخته میشود با عنوان family size که شامل sibsp + parch + 1 است (خود مسافران).
آخرین مورد، «ستونهای دستهبندی» (bin columns) است. این روش برای ساخت دستههایی از مقادیر، برای گروهبندی چندین چیز در کنار هم است. زیرا به نظر میرسد که متمایز کردن چیزهایی با مقادیر یکسان یا بسیار نزدیک به هم، دشوار باشد. برای مثال، برای کسانی که ۵ و ۶ سال دارند، آیا تفاوت قابل توجهی وجود دارد؟ یا در میان افرادی که ۴۵ و ۴۶ سال دارند، آیا تفاوت خاصی وجود دارد؟ به همین دلیل است که ستونهای دستهها (bin) ساخته میشوند. در اینجا، برای سن چهار دسته ساخت میشود که عبارتند از: بچه (۰ تا ۱۴ سال)، نوجوان (۱۴ تا ۲۰ سال)، بزرگسال (۲۰ تا ۴۰ سال) و کهنسال (بالای ۴۰ سال). کد لازم برای این کار در ادامه آمده است.
اکنون که اقدامات لازم برای همه ویژگیها به پایان رسید، همبستگی ویژگیها به یکدیگر مورد بررسی قرار میگیرد.

همبستگی با مقدار ۱ بدین معنا است که ویژگیها به شدت با یکدیگر همبسته هستند و با مقدار ۱- بدین معنا است که به شکل منفی با هم همبسته هستند. برای مثال، جنسیت زن و جنسیت مرد به طور منفی با هم همبسته هستند، زیرا مسافران در یکی از این دو دسته قرار میگیرند. به جز ویژگی بیان شده، میتوان مشاهده کرد که هیچ چیزی به شدت مرتبط به دیگری نیست، به جز مواردی که با مهندسی ویژگیها ساخته شده بودند. این یعنی کار مهندسی ویژگیها به درستی انجام شده است. پرسشی که در این وهله مطرح میشود این است که اگر یک ویژگی به شدت مرتبط به دیگری باشد، چه میشود؟ در پاسخ به این پرسش باید گفت که میتوان یکی از آنها را حذف کرد؛ زیرا اطلاعات جدیدی را به سیستم ارائه نمیکند. دلیل این امر، یکی بودن اطلاعات هر دو آنها است.
مدل یادگیری ماشین با پایتون
اکنون، نقطه اوج کار از راه رسیده است. ساخت مدل یادگیری ماشین با پایتون.
برای ساخت مدل یادگیری ماشین با پایتون، میتوان از الگوریتمهای متعدد و متنوعی که در کتابخانه «سایکیتلِرن» وجود دارند، استفاده کرد. برخی از این الگوریتمها در ادامه بیان شدهاند.
- رگرسیون لجستیک (Logistic Regression)
- جنگل تصادفی (Random Forest)
- ماشین بردار پشتیبان (Support Vector Machine | SVM)
- K نزدیکترین همسایگی (K Nearest Neighbor)
- نایو بیز (Naive Bayes)
- درخت تصمیم (Decision Trees)
- آدابوست (AdaBoost)
- تخصیص پنهان دیریکله (Latent Dirichlet Allocation | LDA)
- گرادیان تقویتی (Gradient boosting)
شاید برای افراد تازهوارد گیجکننده باشد که کدام یک از این موارد را باید برگزیند و یا اینکه، در هر یک از این الگوریتمها چه اتفاقی میافتد. در این وهله باید گفت که جای نگرانی نیست، همه این الگوریتمها در کتابخانه سایکیتلرن، مانند یک جعبه سیاه میمانند و الزاما کاربر نیاز به دانستن اتفاقاتی که درون آنها میافتد ندارد و کافی است الگوریتمی با کارایی مناسب برای این مساله را انتخاب کند. در اینجا، از الگوریتم جنگل تصادفی استفاده میشود.

تنظیم دقیق
اکنون، گامهای لازم برای پیادهسازی یک مدل یادگیری ماشین با پایتون، به پایان رسید. اما، یک گام مهمتر وجود دارد که میتواند منجر به بهبود نتایج خروجی شود: تنظیم دقیق. «تنظیم دقیق» (Fine Tuning)، به معنای پیدا کردن بهترین پارامتر برای الگوریتمهای یادگیری ماشین است.
در کد مربوط به جنگل تصادفی بالا که در زیر نشان داده شده، میتوان تنظیماتی به منظور بهبود خروجی انجام داد.
پارامترهایی وجود دارد که باید تنظیم شوند. موارد موجود در کد بالا، تنظیمات پیشفرض هستند. کاربر میتواند پارامترها را به هر شکلی که تمایل داشته باشد، تغییر دهد. البته، این کار زمان زیادی میبرد. جای نگرانی وجود ندارد، ابزاری با عنوان Grid Search وجود دارد که پارامترهای بهینه را به صورت خودکار پیدا میکند. جالب به نظر میرسد؟
توصیه میشود افراد پس از مطالعه این مطلب و بررسی کدها، خود کلیه موارد را امتحان کرده و برای دریافت خروجی مناسب تلاش کنند.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای دادهکاوی و یادگیری ماشین
- مجموعه آموزشهای دادهکاوی یا Data Mining در متلب
- مجموعه آموزشهای آمار و احتمالات
- زبان برنامهنویسی پایتون (Python) — از صفر تا صد
- آموزش یادگیری ماشین با مثالهای کاربردی — مجموعه مقالات جامع وبلاگ فرادرس
- چگونه یک دانشمند داده شوید؟ — راهنمای گامبهگام به همراه معرفی منابع
^^
مطالب مجله فرادرس را در جستجوی گوگل سریعتر ببینید














ممنونم بخاطر آموزشهای بسیار خوب و مفیدتون.
سلام مشکل بالا رو اوکی کردم
الان این خطا رو میده
TypeError Traceback (most recent call last)
in
5
6
—-> 7 dataset[‘FamilySize’] = dataset[‘SibSp’] + dataset[‘Parch’] + 1
8
9
TypeError: string indices must be integers
بجای دیتا ست ، all_data را بگذارید . درست میشه
سلام این مشکل رو دارم
File “”, line 58
dataset[‘Title’] = dataset[‘Title’].replace(‘Mme’, ‘Mrs’)
^
IndentationError: unexpected indent
سلام ممنونم از اموزش خوبتون من یک پیشنهاد دارم اگر ممکنه لطفا این کرش کورس یادگیری ماشین شرکت گوگل برای کارمندانش ارائه داده را به صورت قدم به قدم ترجمه کنید و در اینجا منتشر کنید.
با تشکر