بهینه سازی هایپرپارامترها

ساخت وبلاگ

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

به منظور نشان دادن نحوه انجام بهینه سازی HyperParameters در پایتون ، تصمیم گرفتم تجزیه و تحلیل کامل داده ها از مجموعه داده های Kaggle Detection Detection Detection Cart را انجام دهم. هدف ما در این مقاله طبقه بندی صحیح است که کدام معاملات کارت اعتباری را باید به عنوان کلاهبرداری یا واقعی (طبقه بندی باینری) برچسب گذاری کرد. این مجموعه داده قبل از توزیع ناشناس شده است ، بنابراین معنای بیشتر ویژگی ها فاش نشده است.

در این حالت ، من تصمیم گرفتم فقط از زیر مجموعه ای از مجموعه داده ها استفاده کنم تا زمان تمرین را تسریع کنم و حتماً بین دو کلاس مختلف به تعادل کاملی برسم. علاوه بر این ، فقط از تعداد محدودی از ویژگی ها استفاده شده است تا وظایف بهینه سازی را به چالش بکشند. مجموعه داده نهایی در شکل زیر نشان داده شده است (شکل 2).

تمام کد مورد استفاده در این مقاله (و موارد دیگر!) در مخزن GitHub من و پروفایل Kaggle موجود است.

فراگیری ماشین

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

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

اکنون می توانیم با استفاده از اولین شبکه ای از هایپرپارامترها که به طور تصادفی هنگام فراخوانی تصادفی searchcv () به طور تصادفی نمونه برداری می کنیم ، اجرای جستجوی تصادفی را شروع کنیم. برای این مثال ، من تصمیم گرفتم که مجموعه آموزش خود را به 4 برابر (CV = 4) تقسیم کنم و 80 را به عنوان تعداد ترکیبات به نمونه انتخاب کنم (n_iter = 80). با استفاده از ویژگی Scikit-Lea Best_Estimator_ ، می توانیم مجموعه ای از هایپرپارامترها را که در طول آموزش بهترین عملکرد را برای آزمایش مدل خود انجام می دهند ، بازیابی کنیم.

سپس می توانیم با ایجاد تعاملی بیشتر ، این قدم را قدم برداریم. در نمودار زیر ، می توانیم (با استفاده از کشویی) را بررسی کنیم که چگونه تغییر تعداد برآوردگرها در مدل ما می تواند بر دقت کلی مدل ما که پارامترهای انتخاب شده MIN_SPLIT و MIN_LEAF را در نظر گرفته است ، تأثیر بگذارد.

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

اگر شما علاقه مند به کسب اطلاعات بیشتر در مورد نحوه ایجاد این انیمیشن ها با استفاده از Plotly هستید ، کد من در اینجا موجود است. علاوه بر این ، این نیز در مقاله ای که توسط Xoel López Barata نوشته شده است ، پوشش داده شده است.

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

[[115 1][6 118]]پشتیبانی دقیق پشتیبانی F1 0 0. 95 0. 99 0. 97 1161 0. 99 0. 95 0. 97 124 دقت 0. 97 240ماکرو AVG 0. 97 0. 97 0. 97 240وزنه برداری AVG 0. 97 0. 97 0. 97 240

شبکه

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

به منظور انتخاب پارامترهایی که در جستجوی شبکه استفاده می شود ، اکنون می توانیم ببینیم که کدام پارامترها با جستجوی تصادفی بهتر کار کرده و یک شبکه را بر اساس آنها تشکیل می دهند تا ببینیم آیا می توانیم ترکیب بهتری پیدا کنیم.

جستجوی شبکه را می توان در پایتون با استفاده از عملکرد Scikit-Lea GridSearchCv () اجرا کرد. همچنین به همین مناسبت ، تصمیم گرفتم مجموعه تمرینات خود را به 4 برابر تقسیم کنم (CV = 4).

هنگام استفاده از جستجوی شبکه ، تمام ترکیبات احتمالی پارامترهای موجود در شبکه محاکمه می شوند. در این حالت ، 128000 ترکیب (2 × 4 × 4 × 4 × 4 × 4) در طول آموزش استفاده می شود. در عوض ، در مثال جستجوی شبکه قبل از آن ، فقط 80 ترکیب استفاده شده است.

[[115 1][7 117]]پشتیبانی دقیق پشتیبانی F1 0 0. 94 0. 99 0. 97 1161 0. 99 0. 94 0. 97 124 دقت 0. 97 240ماکرو AVG 0. 97 0. 97 0. 97 240وزنه برداری AVG 0. 97 0. 97 0. 97 240

جستجوی شبکه در مقایسه با جستجوی تصادفی کندتر است اما می تواند به طور کلی مؤثرتر باشد زیرا می تواند کل فضای جستجو را طی کند. در عوض ، جستجوی تصادفی می تواند سریعتر باشد اما ممکن است نکات مهمی را در فضای جستجو از دست بدهد.

تنظیم خودکار Hyperparameter

هنگام استفاده از تنظیم خودکار HyperParameter ، مدل هایپرپارامترهای مدل برای استفاده با استفاده از تکنیک هایی مانند: بهینه سازی بیزی ، نزول شیب و الگوریتم های تکاملی مشخص می شوند.

بهینه سازی بیزی

بهینه سازی بیزی را می توان در پایتون با استفاده از کتابخانه Hyperopt انجام داد. بهینه سازی بیزی از احتمال برای یافتن حداقل عملکرد استفاده می کند. هدف نهایی یافتن مقدار ورودی به تابعی است که می تواند کمترین مقدار خروجی ممکن را به ما بدهد.

ثابت شده است که بهینه سازی بیزی از جستجوی تصادفی ، شبکه یا دستی کارآمدتر است. بنابراین بهینه سازی بیزی می تواند منجر به عملکرد بهتر در مرحله آزمایش و کاهش زمان بهینه سازی شود.

در Hyperopt ، بهینه سازی بیزی می تواند 3 سه پارامتر اصلی به عملکرد FMIN () اجرا شود.

  • عملکرد هدف = عملکرد ضرر را برای به حداقل رساندن تعریف می کند.
  • فضای دامنه = طیف وسیعی از مقادیر ورودی را برای آزمایش تعریف می کند (در بهینه سازی بیزی این فضا توزیع احتمال را برای هر یک از هاپرپارامترهای استفاده شده ایجاد می کند).
  • الگوریتم بهینه سازی = الگوریتم جستجو را برای انتخاب بهترین مقادیر ورودی برای استفاده در هر تکرار جدید تعریف می کند.

علاوه بر این ، همچنین می تواند در fmin () حداکثر تعداد ارزیابی ها برای انجام تعریف شود.

بهینه سازی بیزی می تواند با انتخاب مقادیر ورودی با توجه به نتایج گذشته ، تعداد تکرارهای جستجو را کاهش دهد. به این ترتیب ، ما می توانیم از ابتدا بر روی مقادیری که به خروجی مورد نظر ما نزدیکتر هستند ، جستجوی خود را متمرکز کنیم.

اکنون می توانیم با استفاده از عملکرد FMIN () بهینه ساز Bayesian خود را اجرا کنیم. یک شی آزمایش () برای اولین بار ایجاد می شود تا بتواند بعداً آنچه را که می گذرد در حالی که عملکرد FMIN () در حال اجرا بود ، تجسم کند (به عنوان مثال نحوه تغییر عملکرد از دست دادن و نحوه استفاده از هایپرپارامترها در حال تغییر بود).

100 ٪ | ██████████ |80/80 [03:07'max_depth': 120. 0 ،'max_features': 2 ،'min_samples_leaf': 0. 0006380325074247448 ،'min_samples_split': 0. 06603114636418073 ،'n_estimators': 1>

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

گزارش طبقه بندی با استفاده از بهینه سازی بیزی در زیر نشان داده شده است.

[[114 2][11 113]]پشتیبانی دقیق پشتیبانی F1 0 0. 91 0. 98 0. 95 1161 0. 98 0. 91 0. 95 124 دقت 0. 95 240ماکرو AVG 0. 95 0. 95 0. 95 240وزن AVG 0. 95 0. 95 0. 95 240

الگوریتم های ژنتیکی

الگوریتم های ژنتیکی سعی می کنند مکانیسم های انتخاب طبیعی را در زمینه های یادگیری ماشین اعمال کنند. آنها از روند انتخاب طبیعی داروین الهام گرفته شده اند و از این رو معمولاً به عنوان الگوریتم های تکاملی نیز خوانده می شوند.

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

به منظور پیاده سازی الگوریتم های ژنتیک در پایتون، می توانیم از کتابخانه TPOT Auto Machine Leaing استفاده کنیم. TPOT بر روی کتابخانه scikit-lea ساخته شده است و می توان از آن برای کارهای رگرسیون یا طبقه بندی استفاده کرد.

گزارش آموزش و بهترین پارامترهای شناسایی شده با استفاده از الگوریتم ژنتیک در قطعه زیر نشان داده شده است.

نسل 1 - بهترین امتیاز رزومه داخلی فعلی: 0. 9392857142857143نسل 2 - بهترین امتیاز رزومه داخلی فعلی: 0. 9392857142857143نسل 3 - بهترین امتیاز رزومه داخلی فعلی: 0. 9392857142857143نسل 4 - بهترین امتیاز رزومه داخلی فعلی: 0. 9392857142857143نسل 5 - بهترین امتیاز رزومه داخلی فعلی: 0. 9392857142857143بهترین خط لوله: RandomForestClassifier(CombineDFs(input_matrix، input_matrix)، criterion=entropy، max_depth=406، max_features=log2، min_samples_leaf=4، min_samples_split=5، n_estimators=617)

دقت کلی مدل بهینه سازی الگوریتم ژنتیک جنگل تصادفی ما در زیر نشان داده شده است.

0. 9708333333333333

تنظیم شبکه های عصبی مصنوعی (ANN).

با استفاده از KerasClassifier wrapper، می توان جستجوی شبکه ای و جستجوی تصادفی را برای مدل های یادگیری عمیق به همان روشی که هنگام استفاده از مدل های یادگیری ماشینی با یادگیری scikit انجام می شد، اعمال کرد. در مثال زیر سعی خواهیم کرد برخی از پارامترهای ANN خود را بهینه کنیم، مانند: تعداد نورون ها در هر لایه و کدام تابع فعال سازی و بهینه ساز استفاده شود. نمونه های بیشتری از بهینه سازی فراپارامترهای یادگیری عمیق در اینجا موجود است.

حداکثر دقت ثبت شده: 0. 932 با استفاده از

دقت کلی امتیازدهی شده با استفاده از شبکه عصبی مصنوعی (ANN) را می توان در زیر مشاهده کرد.

[[115 1][8 116]]پشتیبانی دقیق پشتیبانی F1 0 0. 93 0. 99 0. 96 1161 0. 99 0. 94 0. 96 124 دقت 0. 96 240میانگین ماکرو 0. 96 0. 96 0. 96 240میانگین وزنی 0. 96 0. 96 0. 96 240

ارزیابی

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

دقت پایه در مقابل جستجوی دستی 0. 0000 ٪.دقت پایه در مقابل جستجوی تصادفی 2. 1930 ٪.دقت پایه در مقابل جستجوی شبکه 1. 7544 ٪.دقت پایه در مقابل دقت بهینه سازی بیز ی-0. 4386 ٪.دقت پایه در مقابل الگوریتم های تکاملی 2. 1930 ٪.دقت پایه در مقابل بهینه سازی ANN 1. 3158 ٪.

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

امیدوارم از این مقاله لذت برده باشید ، از خواندن شما متشکرم!

مخاطب

اگر می خواهید با آخرین مقاله ها و پروژه های من به روز شوید ، مرا در متوسط دنبال کنید و در لیست پستی من مشترک شوید. اینها برخی از جزئیات مخاطبین من است: < pan> دقت پایه در مقابل جستجوی دستی 0. 0000 ٪.

آموزش استراتژی معاملاتی...
ما را در سایت آموزش استراتژی معاملاتی دنبال می کنید

برچسب : نویسنده : ملیحه نصیری بازدید : <-PostHit-> تاريخ : سه شنبه 14 شهريور 1402 ساعت: 17:16