گام به گام یک پروژه ی یادگیری ماشین کامل در پایتون – بخش سوم

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

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

تمام کد های این پروژه در GitHub موجود است. سومین نوتبوک Jupiter مربوط به این پست، در اینجا به اشتراک گذاشته شده است. از همه شما برای به اشتراک گذاری، استفاده و ساختن این کد دعوت می کنیم.

برای یادآوری مطالب قبلی، ما در حال کار بر روی یک مسئله ی یادگیری ماشین رگرسیون تحت نظارت هستیم. با استفاده از داده های مربوط به بخش انرژی ساختمان شهر نیویورک، ما مدلی را توسعه داده ایم که می تواند میزان مصرف انرژی یک ساختمان را پیش بینی کند. مدل نهایی ساخته شده ما با استفاده از Gradient Boosted Regressor است که می تواند میزان استفاده از انرژی را در داده های آزمایشی تا میزان ۹٫۱ (در مقیاس ۱-۱۰۰) پیش بینی کند.

تفسیر مدل

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

۱- ویژگی های برجسته

۲- تجسم درخت تصمیم واحد

۳- LIME : توضیحات مدل محلی قابل تفسیر

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

اهمیت ویژگی ها ( Feature Importances )

فرآیند اهمیت ویژگی ها سعی در نشان دادن ارتباط هر ویژگی با وظیفه پیش بینی هدف دارد. جزئیات فنی واردات ویژگی پیچیده است (آن ها میانگین ناخالصی کاهش، یا کاهش خطا از جمله ویژگی را اندازه گیری می کنند)، اما ما می توانیم از مقادیر نسبی برای مقایسه اینکه کدام ویژگی ها بیشترین ارتباط را دارند استفاده کنیم. در Scikit-Learn ، ما می توانیم ویژگی ها را از هر گروه از آموزش های مبتنی بر درخت استخراج کنیم.

با استفاده از دستور model به عنوان مدل آموزش دیده خود ، می توانیم اهمیت ویژگی ها را با استفاده از model.feature_importances_ پیدا کنیم. سپس می توانیم آن ها را در DataFrame پاندا قرار داده و ده مورد مهم را به نمایش گذاشته و یا ترسیم کنیم:

مدل انرژی1
مدل انرژی2

پارامتر Site EUI (شدت استفاده از انرژی) و Weather Normalized Site Electricity Intensity تا حد زیادی مهمترین ویژگی ها هستند که بیش از ۶۶٪ از اهمیت کل را به خود اختصاص داده اند. بعد از دو ویژگی برتر، اهمیت به میزان قابل توجهی کاهش می یابد، که نشان می دهد برای دستیابی به عملکرد بالا ممکن است نیازی به حفظ ۶۴ ویژگی موجود در داده ها نباشد. (در نوتبوک Jupyter ، فقط نگاهی به استفاده از ۱۰ ویژگی برتر انداخته شد و متوجه شدیم که مدل کاملاً دقیق نیست.)

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

تجسم یک درخت تصمیم واحد

در حالی که درک کل رگرسیون گرادیان تقویت شده ممکن است دشوار باشد، هر یک از درختان تصمیم گیری کاملاً شهودی است. ما می توانیم هر درختی را در جنگل با استفاده از تابع  export_graphviz در Scikit-Learn تجسم کنیم. ما ابتدا یک درخت را از گروه استخراج کرده و سپس آن را به عنوان یک فایل نقطه ذخیره می کنیم:

 

با استفاده از نرم افزار تجسم Graphviz می توانیم فایل نقطه را از خط فرمان به png تبدیل کنیم:

dot -Tpng images/tree.dot -o images/tree.png

نتیجه آن یک درخت تصمیم کامل است:

درخت تصمیم

این مسئله کمی سخت به نظر میرسد!حتی اگر این درخت فقط دارای عمق ۶ (تعداد لایه ها) باشد، اما پیروی از آن دشوار است. ما می توانیم فراخوان export_graphviz را تغییر دهیم و درخت خود را به عمق معقول تر ۲ محدود کنیم:

درخت تصمیم2

هر گره ( جعبه ) در درخت دارای چهار نوع اطلاعات است : 

۱- سوالی که در مورد مقدار یک مولفه نقطه داده پرسیده می شود: تعیین می کند که ما به راست یا چپ گره برویم

۲- دستور mse که اندازه گیری خطای گره است

۳- دستور  samples که تعداد مثال ها (نقاط داده) در گره را نشان می دهد.

۴- دستور value برآورد هدف برای همه نمونه های گره است

درخت تصمیم3

(گره های برگ فقط ۲ – ۴ دارند. زیرا آن ها برآورد نهایی را نشان می دهند و زیر شاخه ای ندارند).

درخت تصمیم با شروع از گره بالایی که ریشه نامیده می شود و مسیر خود را از طریق درخت پیش بینی می کند ، یک نقطه داده را پیش بینی می کند. در هر گره ، یک سوال بله یا خیر از نقطه داده پرسیده می شود. به عنوان مثال ، سوال مربوط به گره فوق این است: آیا ساختمان دارای Site EUI کمتر یا مساوی با ۶۸٫۹۵ است؟ اگر پاسخ مثبت است، ساختمان در گره مناسب زیر شاخه قرار می گیرد و اگر پاسخ منفی باشد ، ساختمان به گره سمت چپ زیر شاخه می رود.

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

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

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

توضیحات محلی مدل قابل تفسیر ( LIME )

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

در اینجا ما از LIME برای بررسی پیش بینی مدل کاملاً اشتباه استفاده خواهیم کرد تا ببینیم چه توضیحی ممکن است در مورد اشتباهات مدل در اختیار ما بگذارد.

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

Prediction: 12.8615
Actual Value: 100.0000

 

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

نمودار توضیح این پیش بینی در زیر آمده است:

نمودار انرژی

نحوه تفسیر نمودار به شرح زیر است: هر ورودی در محور y یک مقدار از یک متغیر را نشان می دهد و میله های قرمز و سبز تأثیری را که این مقدار بر پیش بینی دارد نشان می دهد. به عنوان مثال ، ورودی بالا می گوید Site EUI بزرگتر از ۹۵٫۹۰ است که حدود ۴۰ امتیاز از پیش بینی کم می کند. ورودی دوم می گوید شدت سایت برق عادی شده آب و هوا کمتر از ۳٫۸۰ است که حدود ۱۰ امتیاز به پیش بینی می افزاید. پیش بینی نهایی یک اصطلاح رهگیری به علاوه مجموع هر یک از این کمک های فردی است.

با فراخوانی متد .show_in_notebook () می توانیم نگاهی دوباره به همان اطلاعات بیندازیم:

# Show the explanation in the Jupyter Notebook
exp.show_in_notebook()

 

مدل LIME

این نمودار روند نمایش استدلال مدل در سمت چپ را با نمایش سهم هر متغیر در پیش بینی نشان می دهد. جدول سمت راست مقادیر واقعی متغیرها را برای نقطه داده نشان می دهد.

برای این مثال ، پیش بینی مدل حدود ۱۲ و مقدار واقعی ۱۰۰ بود! اگرچه در ابتدا ممکن است این پیش بینی گیج کننده باشد ، اما با نگاهی به توضیحات ، می توانیم حدس بزنیم که این یک حدس پرت نبوده ، بلکه با توجه به مقادیر مربوط به نقطه داده، یک تخمین منطقی است. Site EUI نسبتاً بالا بود و انتظار داریم امتیاز Energy Star پایین باشد (زیرا EUI با نمره همبستگی زیادی دارد) ، نتیجه ای که مدل ما به اشتراک گذاشته است. در این حالت، منطق مدل معیوب بود زیرا این ساختمان نمره کامل ۱۰۰ را داشت.

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

مستند سازی کار و گزارش نتایج

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

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

نوتبوک های Jupyter همچنین می توانند بستر خوبی برای انتقال یافته ها به دیگران باشند. با استفاده از افزونه های نوتبوک، می توانیم کد را از گزارش نهایی خود پنهان کنیم، زیرا اگرچه باور کردنش دشوار است ، اما همه نمی خواهند یک دسته از کد پایتون را در یک سند ببینند!

شخصاً با جمع بندی مختصر کارهایم دست و پنجه نرم می کنم زیرا دوست دارم تمام جزئیات را مرور کنم. با این حال ، مهم است که هنگام ارائه پیام ، مخاطبان خود را درک کنید و متناسب با آن پیام را تنظیم کنید. با توجه به این ، در اینجا نگاه اجمالی ۳۰ ثانیه ای به پروژه می اندازیم:

۱- با استفاده از داده های انرژی شهر نیویورک، می توان مدلی ساخت که بتواند میزان مصرف انرژی را در ۹٫۱ امتیاز پیش بینی کند.

۲- Site EUI و شدت برق عادی شده از آب و هوا مهمترین عوامل برای پیش بینی میزان مصرف انرژی هستند.

در ابتدا ، این پروژه به عنوان ” تکلیف” توسط یک استارت آپ به نویسنده داده شده. برای گزارش نهایی، آن ها می خواستند هم کار و هم نتیجه گیری را ببینند، بنابراین یک نوتبوک Jupyter ایجاد شد تا بتوان آن را تحویل داد. با این حال، به جای تبدیل مستقیم به PDF در Jupyter ، آن را به یک فایل Latex .tex تبدیل شده که سپس در texStudio قبل از ارائه به PDF برای نسخه نهایی ویرایش شده. خروجی پیش فرض PDF از Jupyter ظاهر مناسبی دارد ، اما با چند دقیقه ویرایش می توان آن را به میزان قابل توجهی بهبود بخشید. علاوه بر این ، لاتکس یک سیستم قدرتمند آماده سازی اسناد است و دانستن اصول آن خوب است.

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

نتیجه گیری

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

  1. مرتب کردن و قالب بندی داده ها
  2. تجزیه و تحلیل داده های اکتشافی
  3. مهندسی و انتخاب ویژگی ها
  4. مقایسه چندین مدل یادگیری ماشین را در یک معیار عملکرد
  5. تنظیم هایپر پارامتر ها در بهترین مدل
  6. ارزیابی بهترین مدل در مجموعه آزمایشات
  7. نتایج مدل را تا حد ممکن تفسیر کنید
  8. نتیجه گیری کنید و یک گزارش کاملاً مستند بنویسید

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

بیشتر بخوانید:

درباره‌ی علی قلی زاده

همچنین ببینید

خودرو های خودران چگونه کار می کنند

خوردو های خودران چگونه کار می کنند؟

وقتی درباره ماشین خودران فکر می کنیم، اغلب اوقات این طور تصور می شود که می خواهیم از نقطه A به B برویم؛ بدون آن که خودمان پشت فرمان ماشین بنشینیم. اما به درستی، چه چیزی یک وسیله نقلیه معمولی را تبدیل به یک وسیله نقلیه خودران می کند؟

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

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