اگر تا کنون، چند پروژهی علم داده را خودتان انجام داده باشید، احتمالن متوجه شدهاید که دستیابی به دقت 80 درصد چندان هم بد نیست! اما در دنیای واقعی، 80 درصد عدد چشمگیری نمیباشد، خصوصن از دید کارفرمایان. در واقع، اکثر شرکتهایی که برای آنها کار کردهایم، حداقل دقت (یا هر معیاری که به آن نگاه میکنند) 90 درصد را انتظار دارند.
بنابراین، در ادامه، قصد داریم در مورد 5 روش فوقالعاده صحبت کنیم که میتواند دقت مدل شما را تا حد بسیار زیادی افزایش دهد. به شدت توصیه میکنیم که تمام پنج نکته را به طور کامل بخوانید، زیرا جزئیات زیادی وجود دارد که درج شدهاند و متاسفانه اکثر تازهواردان به این حوزه با آنها آشنا نیستند.
با اینحال، توجه داشته باشید که متغیرهای بسیار بیشتری از آنچه که فکر میکنید در تعیین میزان عملکرد مدل یادگیری ماشین شما نقش دارند که به مرور زمان با تمامی آنها آشنا خواهید شد؛ شاید خود شما نیز روشی فوقالعاده را برای این منظور به جهانیان معرفی نمائید.
مدیریت دادههای گمشده
یکی از بزرگترین اشتباهاتی که مدام میبینیم، این است که چگونه مردم مقادیر از دست رفته (یا گمشده) را مدیریت میکنند و این لزومن تقصیر آنها نیست. بسیاری از مطالب موجود در وب میگویند که شما معمولن مقادیر گمشده را از طریق انتساب میانگین کنترل نمائید، و مقادیر تهی را با میانگین ویژگی داده شده جایگزین کنید، و صد البته که این بهترین روش ممکن نیست.
به عنوان مثال، تصور کنید جدولی داریم که نمرهی سن و تناسب اندام را نشان میدهد. همچنین تصور نمائید که برای یک فرد هشتاد ساله، نمره تناسب اندام را در دیتاست خود نداریم. اگر میانگین امتیاز تناسب اندام را از محدوده سنی 15 تا 80 در نظر بگیریم، به نظر میرسد که افراد هشتاد ساله دارای نمرهی تناسب اندام بسیار بالاتری هستند که در واقع باید داشته باشند.
بنابراین، اولین سوالی که از خود بپرسید این است که چرا دادهها در ابتدا از دست رفتهاند یا وارد جدول نشدهاند.
در مرحلهی بعد، روشهای دیگری را برای مدیریت دادههای گمشده، به غیر از محاسبهی میانگین یا میانه در نظر بگیرید:
- مدلسازی یک پیشبینی برای ویژگی: با اشاره به مثال فوق در مورد امتیازات سن و تناسب اندام، میتوانیم رابطهی بین سن و نمرات تناسب اندام را مدلسازی کنیم و سپس از چنین مدلی برای یافتن امتیاز تناسب اندام مورد انتظار برای یک سن معین استفاده نمائیم. این را میتوان از طریق چندین تکنیک از جمله رگرسیون، آنووا (ANOVA) و موارد دیگر انجام داد.
- جایگزین K-نزدیکترین همسایگی: با استفاده از انتساب KNN، میتوان دادههای گمشده را با مقداری از نمونهی مشابه دیگر جایگزین نمود. برای کسانی که نمیدانند، شباهت در KNN با استفاده از تابع فاصله (یعنی فاصله اقلیدسی) تعیین میگردد.
- حذف ردیف: در نهایت، میتوانید ردیف را حذف کنید. این مورد عمومن توصیه نمیشود، اما زمانی قابل قبول است که شما حجم عظیمی از دادهها را برای شروع کار خود داشته باشید.
مهندسی ویژگی
راه دومی که میتوانید مدل یادگیری ماشین خود را بهطور قابل توجهی بهبود ببخشید، مهندسی ویژگی (Feature Engineering) است. مهندسی ویژگی، فرآیند تبدیل دادههای خام به ویژگیهایی است که بهتر نشاندهندهی مشکل اساسی است که فرد در تلاش برای حل آن میباشد. هیچ راه خاصی برای انجام این مرحله وجود ندارد. این همان چیزی است که علم داده را به همان اندازه که یک هنر است، به عنوان یک علم تبدیل به جهانیان شناسانده. با توجه به آنچه گفته شد، در اینجا مواردی وجود دارد که میتوانید در نظر بگیرید:
- تبدیل یک متغیر DateTime برای فقط استخراج روز هفته، ماه سال و غیره…
- ایجاد سطل (bin) یا صندوقچه (Bucket) برای یک متغیر (به عنوان مثال، برای یک متغیر ارتفاع، این موارد را میتوانیم داشته باشیم؛ 100-149 سانتی متر، 150-199 سانتی متر، 200-249 سانتی متر و غیره باشد)
- ترکیب چندین ویژگی و یا مقادیر برای ایجاد یک ویژگی جدید. بهعنوان مثال، یکی از دقیقترین مدلها برای چالش تایتانیک در کگل، متغیر جدیدی بهنام “Is_women_or_child” را مهندسی و ارائه کرد که به این صورت معنی میشد؛ اگر فرد زن یا کودک باشد، درست و در غیراینصورت نادرست است. یعنی اگر شخص زن یا کودک باشد در ستون مورد نظر عدد 1 و در غیر اینصورت عدد 0 را خواهیم داشت.
انتخاب ویژگی
سومین حوزهای که میتوانید بوسیلهی آن، دقت مدل خود را به میزان قابل توجهی بهبود ببخشید، انتخاب ویژگی درست (Feature Selection) است؛ یعنی، انتخاب مرتبطترین و یا ارزشمندترین ویژگیهای دیتاست. تعداد زیاد ویژگیها باعث میشود که الگوریتم شما دچار بیشبرازش (Overfitting) گردد و ویژگیهای بسیار کم میتواند باعث کمبرازش (Underfitting) الگوریتم شما شود.
دو روش اصلی در انتخاب ویژگیهای خوب دیتاست وجود دارند:
- اهمیت ویژگی: برخی از الگوریتمها، مانند جنگلهای تصادفی یا XGBoost، به شما امکان میدهند که تعیین کنید کدام ویژگیها در پیشبینی مقدار متغیر هدف «مهمترین» هستند. با ایجاد سریع یکی از این مدلها و انجام اهمیت ویژگی، متوجه میشوید که کدام متغیرها مفیدتر از بقیه میباشند. بعنوان مثال در این مقاله چنین کاری را با الگوریتم XGBoost انجام دادهاند.
- کاهش ابعاد: یکی از رایجترین تکنیکهای کاهش ابعاد، آنالیز مؤلفهی اصلی (PCA) میباشد. این روش در واقع، تعداد زیادی ویژگی میگیرد و از جبر خطی برای کاهش آنها به ویژگیهای کمتر استفاده میکند.
الگوریتم های یادگیری گروهی (Ensemble)
یکی از سادهترین راهها برای بهبود مدل یادگیری ماشینی، انتخاب الگوریتم یادگیری ماشینی بهتر است. اگر از قبل نمیدانستید که الگوریتمهای یادگیری گروهی چه هستند، اکنون زمان یادگیری آن رسیده است.
یادگیری گروهی روشی است که در آن از چندین الگوریتم یادگیری همراه با هم استفاده میشود. این کار، این امکان را به شما میدهد که به عملکرد پیشبینی بالاتری نسبت به زمانی که میخواهید از یک الگوریتم فردی به تنهایی استفاده کنید، دست یابید.
الگوریتمهای معروف یادگیری گروهی شامل جنگلهای تصادفی، XGBoost، تقویت گرادیان (Gradiant Boost) و AdaBoost هستند. برای توضیح اینکه چرا الگوریتمهای یادگیری گروهی بسیار قدرتمند هستند، مثالی با جنگلهای تصادفی ارائه میدهیم:
در جنگلهای تصادفی، بطور مکرر و با استفاده از انتخاب تصادفی بخشهایی از دیتاست، درختهای متعددی میسازیم و تصمیم هر درخت را در خصوص متغیر هدف بررسی میکنیم. در پایان به اکثریت آرا توجه نشان میدهیم.
بهعنوان مثال، درخت تصمیم ایجاد شده در بالا را در نظر بگیرید. درخت سوم 0 را پیش بینی میکند. اما اگر به اکثریت آرا در هر 4 درخت تصمیم تکیه کنیم، مقدار پیشبینی شده برای ما قطعن 1 خواهد بود. این قدرت یادگیری گروهی است، چون بجای یک مغز از چند واحد پردازندهی قوی استفاده میکنیم.
تنظیم فراپارامترها (Hyperparameter)
در نهایت، چیزی که اغلب در مورد آن صحبت نمیشود، اما همچنان بسیار مهم میباشد، تنظیم فراپارامترهای مدل شما است. اینجاست که صد در صد، مدل یادگیری ماشینی را که با آن در حال کار هستید را باید بهوضوح درک کنید. در غیر اینصورت، درک هر فراپارامتر ممکن است دشوار باشد.
بهعنوان مثال، نگاهی به تمام فراپارامترهای جنگلهای تصادفی بیندازید:
class sklearn.ensemble.RandomForestClassifier(n_estimators=100, *, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None
ایدهی بسیار خوبی است که بهعنوان مثال بفهمید min_impurity_decrease چیست، بهطوری که وقتی میخواهید مدل یادگیری ماشین شما زیاد سختگیر نباشد، بتوانید این پارامتر را تنظیم کنید.
منبع:
یک پاسخ
خیلی مفید بود ،ممنونم