با گسترش استفاده از «یادگیری ماشین» (Machine Learning) در صنایع گوناگون، نیاز به ابزاری که بتواند به فرد برای انجام فرایندهای مختلف کمک کند به امری حیاتی مبدل شده است. «زبان برنامه‌نویسی پایتون» (Python Programming Language)، یک ستاره درخشان در آسمان فناوری یادگیری ماشین است که اغلب، هم برای پروژه‌های تحقیقاتی و هم پروژه‌های عملیاتی، اولین انتخاب بسیاری از افراد محسوب می‌شود. بنابراین، فراگیری یادگیری ماشین با پایتون، بسیار ساده و البته لذت‌بخش است. در این مطلب، با یک بررسی موردی، به افرادی که به دنیای یادگیری ماشین علاقمند هستند نشان داده خواهد شد که چگونه می‌توانند یک مساله را از صفر تا صد با پایتون حل کنند.

مقدمه‌ای بر یادگیری ماشین با پایتون

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

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

1. نام‌پای (NumPy)

«نام‌پای» (Numpy)، یک کتابخانه معروف برای انجام تحلیل‌های عددی است. این کتابخانه به کاربر برای انجام کارهای متعدد از محاسبه میانه و توزیع داده‌ها گرفته تا پردازش آرایه‌های چندبُعدی کمک می‌کند.

2. پانداس (Pandas)

برای پردازش یک فایل CSV، می‌توان از کتابخانه «پانداس» (Pandas) استفاده کرد. البته، در این راستا کاربر نیاز به پردازش چندین جدول و مشاهده آمارهای مربوط به آن‌ها دارد.

3. مت‌پلات‌لیب (Matplotlib)

پس از آنکه کاربر داده‌ها را با بهره‌گیری از کتابخانه Pandas به صورت «دیتافریم» (Data Frame) ذخیره کرد، برای درک داده‌های موجود به برخی از روش‌های بصری‌سازی نیاز خواهد داشت. تصاویر، معمولا بهتر و گویاتر از خود داده‌ها هستند (به ویژه برای ذینفعان نهایی که ممکن است دارای تخصص‌های گوناگونی باشند و آمارهای عددی و تحلیل‌های متنی نمی‌توانند گزینه‌های خوبی برای ارائه خروجی به آن‌ها باشند). «مت‌پلات‌لیت» (Matplotlib)، کتابخانه‌ای قدرتمند برای بصری‌سازی داده‌ها است که می‌توان با بهره‌گیری از آن، نمودارهای گوناگون را ترسیم کرد.

4. سیبورن (Seaborn)

این کتابخانه نیز ابزار دیگری است برای انجام بصری‌سازی‌ها، با این تفاوت که تمرکز بیشتری روی بصری‌سازی‌های آماری دارد. مواردی مانند «بافت‌نگار» (هیستوگرام | Histogram)، «نمودار دایره‌ای» (Pie Chart)، «منحنی‌ها» (Curves) و یا «جداول همبستگی» (Correlation Tables) از جمله مواردی هستند که با بهره‌گیری از این کتابخانه می‌توان آن‌ها را پیاده‌سازی کرد.

۵. سایکیت‌لِرن (Scikit-Learn)

کتابخانه «سایکیت‌لرن» (Scikit-Learn)، یکی از قدرتمندترین کتابخانه‌های یادگیری ماشین با پایتون است. این کتابخانه هر آنچه که برای پیاده‌سازی و بهبود الگوریتم‌های یادگیری ماشین مورد نیاز است را فراهم می‌کند.

۶. تنسورفلو (Tensorflow) و پای‌تورچ (Pytorch)

تنسورفلو (Tensorflow) و پای‌تورچ (Pytorch)، کتابخانه‌های رایگان و متن‌بازی (Open Source) هستند که کاربردهای گوناگونی را در یادگیری ماشین دارند. از این کتابخانه‌ها برای پیاده‌سازی‌های مربوط به «شبکه‌های عصبی» (Neural Networks) و به ویژه «یادگیری عمیق» (Deep Learning) و همچنین محاسبات «تانسورها» (Tensors) استفاده می‌شود.

پروژه‌های یادگیری ماشین با پایتون

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

«کگل» (Kaggle) پلتفرمی است که می‌توان با استفاده از آن، مستقیما به سراغ داده‌ها رفت و با آن‌ها کار کرد. در این سایت می‌توان با پروژه‌ها و مسائل گوناگون آشنا شد و به حل آن‌ها پرداخت. چیز دیگری که شاید اغوا کننده‌تر به نظر برسد این است که رقابت‌هایی که در کگل برگزار می‌شوند جوایز گوناگونی دارند و رقم جایزه برخی از آن‌ها به 1۰۰,۰۰۰ دلار نیز می‌رسد. اما، مهم‌ترین مساله  در این وهله (و در مرحله یادگیری) پول نیست، زیرا در صورتی که فرد به این حوزه مسلط باشد می‌تواند پروژه‌های متعددی با درآمدهای خوب و فرصت‌های شغلی با شرایط عالی پیدا کند. آنچه یک فرد تازه وارد در حوزه کار با داده به آن نیاز دارد، یادگیری و کسب تجربه است، البته لذت مسابقه دادن و برنده شدن جایزه را نمی‌توان انکار کرد. در ادامه، یک بررسی موردی انجام شده و طی آن یک مساله یادگیری ماشین با پایتون حل شده است.

تشخیص افراد نجات یافته از کشتی تایتانیک

در اینجا صحبت از کشتی تایتانیک معروف و حادثه‌ای است که برای آن رخ داد. در فاجعه تایتانیک که در سال 1۹12 رخ داد، 1۵14 نفر از 2224 مسافر و خدمه این کشتی، جان خود را از دست دادند. رقابت کگل تایتانیک (و یا به عبارتی راهنمای آموزشی)، داده‌های حقیقی پیرامون این حادثه تلخ را در اختیار عموم قرار می‌دهد. وظیفه کاربر در این وهله آن است که از این داده‌ها برای پیش‌بینی این موضوع استفاده کند که آیا یک شخص خاص در این حادثه جان سالم به در برده است یا خیر.

یادگیری ماشین با پایتون

پیش از عمیق شدن در داده‌های تایتانیک، ابتدا باید ابزارهای مورد نیاز برای حل مساله را نصب کرد. در گام اول، نیاز به نصب پایتون است. پایتون را می‌توان از وب‌سایت رسمی آن [+] دانلود و نصب کرد. برای آنکه نسخه‌ای از پایتون که توسط کاربر نصب می‌شود با نسخه جدید کتابخانه‌های پایتون سازگار باشد، توصیه می‌شود پایتون نسخه 3.۶ به بالا نصب شود. پس از آن، باید کتابخانه‌های مورد نیاز را با pip نصب کرد. pip باید به طور خودکار، همراه با توزیعی از پایتون که کاربر دانلود کرده است، نصب شود. برای نصب مواردی که کاربر نیاز دارد با استفاده از pip، باید «ترمینال» (Terminal)، «خط فرمان» (Command Line) یا «پاورشل» (Powershell) را باز و دستورات زیر را وارد کرد.

اکنون به نظر می‌رسد که مقدمات کار به خوبی آماده شده‌اند. همانطور که در کد بالا مشهود است، «ژوپیتر» (Jupyter) نیز نصب شده است. ژوپیتر یک نوت‌بوک محبوب است که می‌توان کدهای پایتون را در آن به صورت تعاملی نوشت. برای باز کردن ژوپیتر، تنها کافی است که در ترمینال، jupyter notebook را وارد کرد. پس از آن، یک صفحه مرورگر وب مانند تصویر زیر باز می‌شود.

یادگیری ماشین با پایتون

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

اکتشاف داده

اولین گام برای کاوش، اکتشاف داده‌ها است. در همین راستا، نیاز به دانلود کردن داده‌های مورد استفاده در این مثال، از طریق صفحه مجموعه داده تایتانیک در کگل [+] وجود دارد. سپس، باید داده‌های استخراج شده را درون پوشه‌ای قرار داد که نوت‌بوک ژوپیتر آغاز شده است. در این مرحله، باید کتابخانه‌های لازم را «وارد» (ایمپورت) کرد.

سپس، باید داده‌ها را بارگذاری کرد.

خروجی، چیزی شبیه تصویر زیر خواهد بود.

یادگیری ماشین با پایتون

آنچه در تصویر بالا وجود دارد، نمونه‌ای از داده‌های مجموعه داده تایتانیک هستند. ستون‌های زیر در مجموعه داده وجود دارند.

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

هنگام کاوش داده‌ها، معمولا «داده‌های ناموجود» یا «داده‌های گمشده» (Missing Data) پیدا می‌شوند. برای کشف این داده‌ها در مجموعه داده تایتانیک، از قطعه کد زیر استفاده شده است.

خروجی، تصویری مانند زیر خواهد بود.

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

پاک‌سازی داده‌ها

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

مساله بعدی، حذف داده‌ها برای مواردی است که مقادیر ناموجود زیادی دارند. برای مثال، در این مجموعه داده، cabin دارای مقادیر ناموجود زیادی است. بنابراین، ستون آن به طور کامل حذف می‌شود (البته به طور کلی، راهکار حذف نمونه‌ها یا ویژگی‌هایی که دارای مقادیر از دست رفته هستند توصیه نمی‌شود. چون بدین شکل ممکن است اطلاعات مهمی از دست بروند. بنابراین، توصیه کلی آن است که از انجام چنین کاری حدالمقدور اجتناب شود).

اکنون، می‌توان داده‌های پاکسازی شده را بررسی کرد.

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

مهندسی ویژگی‌ها

اکنون که داده‌ها پاک‌سازی شدند، گام بعدی که باید انجام شود «مهندسی ویژگی‌ها» (Feature Engineering) است. مهندسی ویژگی‌ها، روشی برای پیدا کردن مناسب‌ترین ویژگی‌ها یا داده‌ها برای حل مساله، از میان داده‌های کنونی موجود است. راهکارهای متعددی برای انجام این کار وجود دارند، البته بر فراز همه این روش‌ها، عقل سلیم است. در ادامه، نگاهی به داده‌های مسافرگیری انداخته می‌شود. این بخش با S ،Q یا C پر شده‌اند. اغلب کتابخانه‌‌های پایتون، تنها قادر به پردازش اعداد و نوع داده‌های عددی هستند. بنابراین، برای حل این مشکل و تبدیل کردن داده‌های طبقه‌ای به عددی، نیاز به انجام کاری است که به آن روش کدبندی وان هات (One Hot Encoding) گفته می‌شود. با بهره‌گیری از این روش، یک ستون به سه ستون تبدیل می‌شود. این ستون‌ها Embarked_S ،Embarked_Q و Embarked_C نامیده شده‌اند و با مقادیر ۰ و 1 پر می‌شوند . مقدار 1 در یک فیلد بدین معنا است که فرد در آن بندر سوار شده و مقدار صفر یعنی در آن بندر سوار نشده است.

مثال‌های دیگر در همین رابطه، SibSp و Parch هستند. شاید هیچ چیز جالبی در این دو ستون وجود نداشته باشد، اما بدین شکل می‌توان فهمید خانواده‌هایی که در کشتی حضور داشتند چقدر بزرگ بوده‌اند. ممکن است به نظر برسد که اگر خانواده بزرگ‌تر بوده باشد، شانس نجات یافتن اعضای آن نیز بیشتر است. زیرا اعضای خانواده می‌توانند به یکدیگر کمک کنند. این در حالی است که افراد تنها، چنین شانسی ندارند. بنابراین، ستون دیگری ساخته می‌شود با عنوان family size که شامل sibsp + parch + 1 است (خود مسافران).

آخرین مورد، «ستون‌های دسته‌بندی» (bin columns) است. این روش برای ساخت دسته‌هایی از مقادیر، برای گروه‌بندی چندین چیز در کنار هم است. زیرا به نظر می‌رسد که متمایز کردن چیزهایی با مقادیر یکسان یا بسیار نزدیک به هم، دشوار باشد. برای مثال، برای کسانی که ۵ و ۶ سال دارند، آیا تفاوت قابل توجهی وجود دارد؟ یا در میان افرادی که 4۵ و 4۶ سال دارند، آیا تفاوت خاصی وجود دارد؟ به همین دلیل است که ستون‌های دسته‌ها (bin) ساخته می‌شوند. در اینجا، برای سن چهار دسته ساخت می‌شود که عبارتند از: بچه (۰ تا 14 سال)، نوجوان (14 تا 2۰ سال)، بزرگسال (2۰ تا 4۰ سال) و کهنسال (بالای 4۰ سال). کد لازم برای این کار در ادامه آمده است.

اکنون که اقدامات لازم برای همه ویژگی‌ها به پایان رسید، همبستگی ویژگی‌ها به یکدیگر مورد بررسی قرار می‌گیرد.

همبستگی با مقدار 1 بدین معنا است که ویژگی‌ها به شدت با یکدیگر هم‌بسته هستند و با مقدار 1- بدین معنا است که به شکل منفی با هم هم‌بسته هستند. برای مثال، جنسیت زن و جنسیت مرد به طور منفی با هم هم‌بسته هستند، زیرا مسافران در یکی از این دو دسته قرار می‌گیرند. به جز ویژگی بیان شده، می‌توان مشاهده کرد که هیچ چیزی به شدت مرتبط به دیگری نیست، به جز مواردی که با مهندسی ویژگی‌ها ساخته شده بودند. این یعنی کار مهندسی ویژگی‌ها به درستی انجام شده است. پرسشی که در این وهله مطرح می‌شود این است که اگر یک ویژگی به شدت مرتبط به دیگری باشد، چه می‌شود؟ در پاسخ به این پرسش باید گفت که می‌توان یکی از آن‌ها را حذف کرد؛ زیرا اطلاعات جدیدی را به سیستم ارائه نمی‌کند. دلیل این امر، یکی بودن اطلاعات هر دو آن‌ها است.

مدل یادگیری ماشین با پایتون

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

برای ساخت مدل یادگیری ماشین با پایتون، می‌توان از الگوریتم‌های متعدد و متنوعی که در کتابخانه «سایکیت‌لِرن» وجود دارند، استفاده کرد. برخی از این الگوریتم‌ها در ادامه بیان شده‌اند.

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

یادگیری ماشین با پایتون

مدل، روی داده‌ها صحت ٪۸3 را ارائه می‌کند. برای اولین بار خوب است. منظور از امتیاز حاصل از «اعتبارسنجی متقابل» (Cross-Validation)، امتیاز اعتبارسنجی متقابل K Fold است. K = 10 به این معنا است که داده‌ها به 1۰ بخش تقسیم شده‌اند و میانگین همه امتیازهای محاسبه شده برای آن‌ها به عنوان میانگین کل ارائه شده است.

تنظیم دقیق

اکنون، گام‌های لازم برای پیاده‌سازی یک مدل یادگیری ماشین با پایتون، به پایان رسید. اما، یک گام مهم‌تر وجود دارد که می‌تواند منجر به بهبود نتایج خروجی شود: تنظیم دقیق. «تنظیم دقیق» (Fine Tuning)، به معنای پیدا کردن بهترین پارامتر برای الگوریتم‌های یادگیری ماشین است. در کد مربوط به جنگل تصادفی بالا که در زیر نشان داده شده، می‌توان تنظیماتی به منظور بهبود خروجی انجام داد.

پارامترهایی وجود دارد که باید تنظیم شوند. موارد موجود در کد بالا، تنظیمات پیش‌فرض هستند. کاربر می‌تواند پارامترها را به هر شکلی که تمایل داشته باشد، تغییر دهد. البته، این کار زمان زیادی می‌برد. جای نگرانی وجود ندارد، ابزاری با عنوان Grid Search وجود دارد که پارامترهای بهینه را به صورت خودکار پیدا می‌کند. جالب به نظر می‌رسد؟

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

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

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