Scikit-learn
آموزش‌های پیشرفته هوش مصنوعیداده کاوی و بیگ دیتا

Scikit-learn و ۶ ترفند مفید برای متخصصان علم داده برای استفاده از این کتابخانه

0

Scikit-learn (یا Sklearn) یک کتابخانه یادگیری ماشین متن‌باز و قدرتمند مبتنی بر زبان برنامه‌نویسی پایتون است. این کتابخانه شامل ابزارهای کارآمدی برای یادگیری ماشینی و مدل‌سازی آماری است و برای نمونه می‌توان به الگوریتم‌های گوناگون طبقه‌بندی، رگرسیون (پیش‌بینی) و خوشه بندی اشاره کرد.
در این نوشتار ۶ ترفند برای کار با کتابخانه Scikit-learn را معرفی می‌کنیم که برخی از امور مرتبط با برنامه‌نویسی را تسهیل خواهد کرد.

۱. داده‌های ساختگی و تصادفی تولید کنید

برای تولید داده‌های ساختگی طبقه‌بندی از تابع make_classification()  و برای داده‌های رگرسیونی از make_regression()  استفاده می‌کنیم. این کار هنگام مشکل‌یابی‌ یا برای زمانی که می‌خواهید روی داده‌های دیتاستی کوچک و تصادفی آزمایش انجام دهید، مفید خواهد بود.
با استفاده از تابع زیر، ۱۰ نمونه برای دسته‌بندی تولید کردیم که ۴ ویژگی (در x) و یک برچسب دسته (در y) دارند. این نقاط به دسته منفی (۰) و یا به دسته مثبت (۱) تعلق دارند:

 

این‌جا X چهار ستون ویژگی برای نمونه‌های تولید شده را دربرمی‌گیرد:

 

Scikit-learn

و y شامل برچسب مربوط به هر نمونه است:

Scikit-learn

۲. مقادیر گم‌شده را جایگزین کنید

در Scikit-learn چندین راه برای جایگزینی مقادیر گم‌شده وجود دارد. در این بخش دو مورد از این روش‌ها را بررسی می‌کنیم. کلاس SimpleImputer  استراتژی‌هایی ساده برای جایگزینی مقادیر گم‌شده فراهم می‌کند (برای مثال با محاسبه‌ی میانه یا میانگین مقادیر موجود). کلاس KNNImputer  رویکرد پیچیده‌تری برای جایگزینی مقادیر گم‌شده پیش پا می‌گذارد که در آن از ” K نزدیک‌ترین همسایه ” استفاده می‌شود. در این روش هر مقدار گم‌شده با استفاده از مقادیر n_neighbors  (که برای ویژگی مدنظر مقداری دارند) جایگزین می‌شود. سپس میانگین مقادیر این همسایه‌‎ها را به صورت یکسان یا با در نظرگرفتن وزن‌ آن‌ها (که براساس فاصله با هر همسایه می‌باشد) محاسبه می‌کنیم و به جای مقدار گم‌شده قرار می‌دهیم.
در این قسمت نمونه‌ای از کاربرد هر دو روش جایگزینی را مشاهده می‌کنید:

>>> 2.21298305

مقدار X[1, 2] را به یک مقدار گم‌شده تبدیل کنید:

Scikit-learn

ابتدا از روش جایگزین‌کننده‌ی ساده استفاده می‌کنیم:

Scikit-learn

و در نهایت مقدار -۰.۱۴۳۴۷۶ به دست می‌آید.
سپس از روش جایگزین‌کننده‌ی KNN استفاده می‌کنیم که طی آن دوتا از نزدیک‌ترین همسایه‌ها را که با توزیع یکسان وزن‌دهی شده‌اند، وارد معادله می‌کنیم:

Scikit-learn

در نهایت مقدار ۰.۹۹۷۱۰۵ به دست می‌آید. (=۰.۵×)۱.۹۰۴۱۸۸+۰.۹۰۰۲۲))

۳. از پایپ لاین برای ادغام چندین گام استفاده کنید

پایپ لاین در Scikit-learn ابزاری مفید است که به ساده‌سازی مدل یادگیری ماشین کمک می‌کند. از پایپ لاین‌ها می‌توان برای ادغام گام‌ها استفاده کرد. بدین ترتیب همه‌ی داده‌ها توالی ثابتی از گام‌ها را طی کنند. به بیان دیگر، پایپ لاین به جای فراخوانی هر گام به صورت مجزا، همه‌ی گام‌ها را در یک سیستم متمرکز می‌کند. برای تولید این روال از تابع make_pipeline  استفاده می‌کنیم.
در این قسمت نمونه‌ای از یک پایپ لاین را مشاهده می‌کنید که از یک روش جایگزین‌کننده (که در صورت لزوم مقادیر گم‌شده را جایگزین می‌کند) و یک دسته‌بند رگرسیون لجیستیک تشکیل شده است.

حال می‌توانیم برای آموزش داده‌های آموزشی و پیش‌بینی داده‌های آزمایشی از پایپ لاین استفاده کنیم. داده‌های آموزشی ابتدا از جایگزین‌کننده عبور کرده و سپس با استفاده از دسته‌بند رگرسیون لجستیک شروع به آموزش مدل می‌کند.

Scikit-learn

۴. با استفاده از joblib یک مدل پایپ لاین ذخیره کنید

با استفاده از joblib می‌توان مدل‌های پایپ لاین که از طریق Scikit-learn ساخته شده‌اند را به آسانی ذخیره کرد. در صورتی که مدلتان آرایه‌های بزرگی از داده¬‌ها داشته باشد، هر آرایه در یک فایل مجزا ذخیره خواهد شد. بعد از ذخیره‌ی محلی مدل، می‌توانید به سادگی آن‌را بارگذاری (یا بازیابی ) کنید و در برنامه‌های جدید به کار ببرید.

بدین ترتیب با استفاده از تابع joblib.dump  مدل پایپ لاین برازش‌یافته روی کامپیوتر ذخیره می‌شود. با تابع joblib.load  می‌توانید این مدل را بازیابی کرده و مطابق معمول به کار ببرید.

 

۵. یک ماتریس در هم‌ریختگی ترسیم کنید

ماتریس در هم‌ریختگی جدولی است که به منظور توصیف عملکرد یک دسته‌بند روی مجموعه‌ای از داده‌های آزمایشی استفاده می‌شود. این‌جا به مسئله‌ی دسته‌بندی دودویی می‌پردازیم؛ در مسئله‌ی دسته‌بندی دودویی، دو دسته (بله (۱) و خیر (۰)) وجود دارد که مشاهدات ثبت شده می‌توانند به آن‌ها تعلق داشته باشند.
اجازه دهید یک مسئله‌ی دسته‌بندی دودویی را به عنوان نمونه طراحی کنیم و ماتریس درهم‌ریختگی را با استفاده از تابع plot_confusion_matrix  روی آن نمایش دهیم.

Scikit-learn

با استفاده از ماتریس در هم‌ریختگی، نحوه‌ی دسته‌بندی مشاهدات را می‌توان به خوبی مصورسازی کرد:
• ۹۳ مثبت حقیقی (TP)
• ۹۷ منفی حقیقی (TN)
• ۳ مثبت کاذب (FP)
• ۷ منفی کاذب (FN)
طبق این ارقام می‌توان گفت میزان دقت مدل ۹۵% ((۹۳+۹۷)/۲۰۰ = ۹۵%) است.

۶. درخت تصمیم رسم کنید

درخت تصمیم یکی از شناخته‌شده‌ترین الگوریتم‌های دسته‌بندی است. خصوصیت بارز درخت‌های تصمیم، مصورسازی‌های شبه‌درختی آنهاست که بینش خوبی به دست می‌دهد. این الگوریتم‌، داده‌ها را بر اساس ویژگی‌های توصیفی به بخش‌های کوچک‌تر تقسیم می‌کند. هنگام پیش‌بینی داده، دسته‌ای به عنوان پیش‌بینی انتخاب می‌شود که بیشترین تکرار داده‌های آموزشی را در ناحیه‌ای که داده‌ی آزمایشی قرار گرفته، داشته باشد. از معیار تقسیم به منظور تعیین میزان ارتباط و اهمیت هر یک از ویژگی‌ها استفاده می‌کنیم و بدین ترتیب در مورد نحوه‌ی تقسیم داده‌ها به نواحی تصمیم‌گیری می‌کنیم. بعضی از معیارهای تقسیم عبارت‌اند از: Information Gain، Gini index، و Cross-entropy.
این‌جا مثالی از نحوه‌ی استفاده از تابع plot_tree  در sickit-learn را مشاهده می‌کنید:

Scikit-learn

در این مثال، درخت تصمیم را براساس ۴۰ مشاهده‌ی آموزشی (که به دسته مثبت (۱) و یا به دسته منفی (۰) تعلق دارند) آموزش می‌دهیم؛ پس می‌توانیم بگوییم این مسئله از نوع دسته‌بندی دودویی است. در این درخت دو نوع گره داریم: گره‌های داخلی (که در آن فضای پیش‌بین به تقسیم ادامه می‌دهد) و گره‌های انتهایی (نقطه‌ی نهایی). قسمتی از درخت که دو گره را به هم متصل می‌کند شاخه نامیده می‌شود.
حال می‌خواهیم به اطلاعات مربوط به هر گره‌ در درخت تصمیم نگاهی دقیق‌تر بیاندازیم:
• معیار تقسیم در یک گره‌ی خاص، به صورت (برای مثال) ‘F2 <= -0.052’ نشان داده می‌شود؛ بدین معنی که هر نمونه‌ای که این شرط را (مقدار ویژگی دوم (F2) زیر -۰.۰۵۲ باشد) برآورده کند به ناحیه‌ی تازه شکل‌گرفته‌ی سمت چپ تعلق دارد و هر نقطه‌داده‌ای که این شرط را برآورده نکند، در ناحیه‌ی سمت راست گره‌ی داخلی جای خواهد گرفت.
• این‌جا از شاخص Gini به عنوان معیار تقسیم استفاده می‌کنیم. شاخص Gini (که معیار ناخالصی نامیده می‌شود) میزان یا احتمال دسته‌بندی اشتباه یک مؤلفه‌ی خاص که به صورت تصادفی انتخاب شده را محاسبه می‌کند.
• قسمت samples در هر گره نشان‌دهنده‌ی تعداد مشاهدات آموزشی موجود در آن گره‌ی خاص است.
• قسمت value در هر گره تعداد مشاهدات آموزشی موجود در طبقه‌ی دسته (۰) و دسته مثبت (۱) را نشان می‌دهد. بنابراین وقتی value=[19,21] باشد، بدین معنی است که در آن گره‌ی خاص ۱۹ مشاهده‌ی آموزشی در طبقه‌ی منفی و ۲۱ مشاهده‌ی آموزشی در طبقه‌ی مثبت داریم.
نتیجه‌گیری
در این نوشتار ۶ شگرد مفید برای کار با کتابخانه‌ی Scikit-learn را توضیح دادیم که به ارتقای مدل‌های یادگیری ماشینی را در sklearn کمک خواهند کرد.

 

صنعت بیمه و تاثیری که هوش مصنوعی در تحول آن دارد

مقاله قبلی

افتتاح پردیس هوش مصنوعی پارت در مشهد توسط معاون علمی و فناوری رئیس‌جمهور

مقاله بعدی

شما همچنین ممکن است دوست داشته باشید

نظرات

پاسخ دهید

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