AlikMirzaei-97
AlikMirzaei-97
خواندن ۱۰ دقیقه·۳ سال پیش

یادگیری ماشین و اعتبار سنجی مدل

در یادگیری ماشین، تعمیم معمولا به توانایی یک الگوریتم برای موثر بودن در ورودی های مختلف و جدید اشاره دارد.
در یادگیری ماشین، تعمیم معمولا به توانایی یک الگوریتم برای موثر بودن در ورودی های مختلف و جدید اشاره دارد.

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

چیست CV ؟

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

1. تقسیم بندی داده به دو دسته: آموزش و آزمایش.

2. آموزش دادن مدل بر اساس دادگان آموزشی.

3. اعتبار سنجی مدل روی دادگان آزمایش.

4. تکرار مراحل بالا به تعدادی که روش CV مورد استفاده مان بیان می کند.


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


Hold-out:

ساده ترین و ورایج ترین تکنیک است و الگوریتم آن به شرح زیر است:

1. همان تقسیم بندی دادگان( معمولا 20درصد: آموزش و 80درصد: آزمایش)

2. آموزش مدل روی دادگان آموزشی

3. اعتبار سنجی مدل روی داده های آزمایشی

4. ذخیره کردن نتیجه اعتبار سنجی

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


K-Fold:

معایب روش قبل را به حداقل می رساند. روش جدیدی برای تقسیم بندی دادگان ارائه می دهد که بر "تست فقط یک بار گلوگاه" غلبه می کند. الگوریتم آن:

1. عدد k را انتخاب کن. (معمولا 5 یا 10، اما می تواند هر عددی کمتر از طول مجموعه انتخاب شود.)

2. مجموعه داده ها را به k دسته مساوی تقسیم می کنیم.

3. اکنون k-1 فولد را به عنوان مجموعه آموزشی انتخاب کرده انتخاب کرده و باقی را بعنوان مجموعه آزمایشی می گیریم.

4. مدل را آموزش دهید.

5. اعتبار سنجی مجموعه آزمایشی.

6. ذخیره سازی نتیجه اعتبارسنجی.

7. مراحل 3تا6 را k مرتبه تکرار کن.

8. نتیجه نهایی می شود میانگین نتایج از مراحل قبل.

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


Leave-one-out:

در روش k-fold اگر k را برابر n که تعداد نمونه های مجموعه است درنطر بگیریم روش LOO را خواهیم داشت. الگوریتم:

1. یک نمونه از مجموعه داده را انتخاب کنید که مجموعه آزمایشی خواهد بود.

2. اکنون n - 1 نمونه باقیمانده مجموعه آموزشی خواهد بود.

3. مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار، یک مدل جدید باید آموزش داده شود.

4. در مجموعه آزمایشی اعتبار سنجی کنید.

5. نتیجه اعتبارسنجی را ذخیره کنید

6. مراحل 1 تا 5 را n بار تکرار کنید.(برای n نمونه، n مجموعه آموزشی و تست متفاوت داریم.)

7. امتیاز نهایی، میانگین نتایجی که در مرحله 5 به دست آوردید می باشد.

بزرگترین مزیت این روش این است که داده های زیادی را هدر نمی دهد. اما از نظر محاسباتی از روش k-Fold گران تر است و زمان اعتبار سنجی زیادی را می طلبد. لذا متخصصین علوم داده در نهایت بر اساس شواهد، تجربه و تحقیقات مختلفشان این پیشنهاد را دارند که به جای این روش از همان k-Fold با k برابر با 5 یا 10 استفاده کنیم.


Leave-p-out:

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

1.ابتدا Pتا نمونه را از مجموعه داده انتخاب کنید که مجموعه آزمایشی خواهد بود.

2. سپس n-p نمونه ی دیگر، مجموعه آموزشی خواهند بود.

3. مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار، یک مدل جدید باید آموزش داده شود.

4. در مجموعه آزمایشی اعتبار سنجی کنید.

5. نتیجه اعتبارسنجی را ذخیره کنید.

6. مراحل 2تا5 را Cp به توان n بار تکرار کنید.

7. امتیاز نهایی، میانگین نتایجی که در مرحله 5 به دست آوردید می باشد.


Stratified k-fold:

گاهی اوقات ممکن است با عدم تعادل زیادی در مقدار هدف در مجموعه داده مواجه شویم. به عنوان مثال در مورد کلاس ‌بندی در مجموعه داده‌های گربه‌ها و سگ‌ها، ممکن است تغییر زیادی به سمت کلاس سگ وجود داشته باشد. این روش نوعی از k-fold است که برای اینگونه موارد که از حالت تعادل خارج هستند طراحی شده است. الگوریتم:

1. تعیین مقدار k (تعداد فولدها)

2. مجموعه داده را به k برابر تقسیم کنید. هر فولد باید تقریباً دارای درصد مشابهی از نمونه‌های هر کلاس هدف در مجموعه کامل باشد.

3. سپس k – 1 فولد را انتخاب کنید که مجموعه آموزشی خواهد بود. باقی فولدها مجموعه آزمایشی خواهد بود.

4. مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار یک مدل جدید باید آموزش داده شود.

5. در مجموعه آزمایشی اعتبار سنجی کنید.

6. نتیجه اعتبارسنجی را ذخیره کنید.

7. مراحل 3تا6 را k مرتبه تکرار کنید. (هر بار از فولد باقی مانده به عنوان مجموعه تست استفاده کنید. در پایان، شما باید مدل را روی هر فولد که دارید اعتبارسنجی کرده باشید.)

8. امتیاز نهایی، میانگین نتایجی که در مرحله 6 به دست آوردید می باشد.


Repeated k-fold:

این روش احتمالا قوی ترین تکنیک در این مقاله است. دراینجا k تعداد فولدها نیست، بلکه تعداد مراتبی است که ما مدل را آموزش می دهیم. ایده کلی این است که در هر تکرار، نمونه‌هایی را به‌طور تصادفی از سرتاسر مجموعه داده به عنوان مجموعه آزمایشی انتخاب می‌کنیم. به عنوان مثال، اگر تصمیم بگیریم که 20٪ از مجموعه داده ها مجموعه آزمایشی ما باشد، 20٪ نمونه به طور تصادفی انتخاب می شوند و 80٪ بقیه به مجموعه آموزشی تبدیل می شوند. الگوریتم:

1.ابتدا k را انتخاب کنید (اینکه چند بار مدل آموزش داده می شود).

2. تعدادی نمونه را انتخاب کنید که مجموعه آزمایشی خواهد بود.

3. مجموعه داده را تقسیم کنید.

4. روی مجموعه آموزشی تمرین کنید. در هر تکرار CV، یک مدل جدید باید آموزش داده شود.

5. در مجموعه آزمایشی اعتبار سنجی کنید.

6. نتیجه اعتبارسنجی را ذخیره کنید.

7. مراحل 3تا6 را kبار تکرار کنید.

8. امتیاز نهایی، میانگین نتایجی که در مرحله 6 به دست آوردید است.

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

1. نسبت تقسیم آموزش/آزمایش دادگان به تعداد تکرارها بستگی ندارد.

2. می توانیم نسبت های منحصر به فردی را برای هر تکرار تنظیم کنیم.

3. انتخاب تصادفی نمونه‌ها از مجموعه داده‌ها، Repeated k-Fold را برای سوگیری انتخاب قوی‌تر می‌کند.

بااین حال معایبی هم وجود دارد! K-fold استاندارد تضمین می کند که مدل روی همه نمونه ها آزمایش می شود، اما این روش براساس تصادفی سازی است لذا ممکن است برخی از نمونه ها هرگز برای قرار گرفتن در مجموعه آزمایش انتخاب نشوند، درحالیکه ممکن است برخی از نمونه ها چندین بار انتخاب شوند.


Nested k-fold:

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

1. ابتدا k را انتخاب کنید(تعداد فولدها). به عنوان مثال، 10( اجازه دهید فرض کنیم که این عدد را انتخاب کرده ایم)

2. یک پارامتر p را انتخاب کنید. فرض کنید الگوریتم ما رگرسیون لجستیک است و p پارامتر جریمه.

3. مجموعه داده را به 10 تا تقسیم کنید و یکی از آنها را برای آزمایش رزرو کنید.

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

5. برای هر مقدار p روی 8 فولد آموزشی باقیمانده آموزش دهید و روی فولد اعتبارسنجی ارزیابی کنید. اکنون 4 اندازه گیری دارید.

6. مراحل 4و5 را 9مرتبه تکرار کنید. بچرخانید که کدام فولد آموزشی، فولد اعتبارسنجی است. اکنون 4*9 اندازه گیری دارید.

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

8. از مرحله 2 را 10 بار تکرار کنید و از هر فولد به نوبت به عنوان فولد تست استفاده کنید.

9. میانگین و انحراف معیار اندازه گیری ارزیابی را در 10 مورد تست گذشته ذخیره کنید.

10. الگوریتمی بهترین عملکرد را داشت که بهترین میانگین عملکرد خارج از نمونه را در 10 فولد آزمایشی داشت.

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


Complete CV:

این روش کم استفاده ترین روش است که یا در تحقیقات نظری استفاده می شود یا در صورت وجود فرمول مؤثری که به حداقل رساندن محاسبات کمک می کند. ایده کلی این است که ما یک عدد k (طول مجموعه آموزشی) را انتخاب می کنیم و روی هر تقسیم ممکن شامل k نمونه در مجموعه آموزشی اعتبار سنجی می کنیم. الگوریتم:

1. عدد k را انتخاب کنید (طول مجموعه آموزشی).

2. مجموعه داده را تقسیم کنید.

3. روی مجموعه آموزشی تمرین کنید.

4. در مجموعه آزمایشی اعتبار سنجی کنید.

5. نتیجه اعتبارسنجی را ذخیره کنید.

6. مراحل 2تا5 را Cnبه توانk مرتبه تکرار کنید. (n طول دیتاست است)

7. امتیاز نهایی، میانگین نتایجی که در مرحله 5 به دست آوردید است.


CV in ML:

بیشتر تکنیک های مذکور در یادگیری ماشین کاربرد دارند. مهم این است که بدانید کدام روش برای مسئله شما مناسب است و می تواند در زمان شما صرفه جویی کند. این نکته نیز قابل توجه است که برخی از الگوریتم‌های ML، به عنوان مثال، CatBoost روش‌های CV داخلی خود را دارند.


CV in DL:

از آنجا که اکثر تکنیک های CV چندین بار مدل را آموزش می دهند، برای DL مشکل خواهند بود و از آنها اجتناب می شود. به جای آن ممکن است از یک زیرمجموعه تصادفی از داده های آموزشی به عنوان نگهدارنده برای اهداف اعتبار سنجی استفاده شود. به عنوان مثال، کتابخانه Keras به شما امکان می دهد یکی از دو پارامتر را برای تابع fit که آموزش را انجام می دهد، ارسال کنید: درصدی از داده هایی که باید برای اعتبارسنجی نگهداری شوند – یک تاپل از (X, y) که باید برای اعتبارسنجی استفاده شود. این پارامتر پارامتر قبلی را نادیده می گیرد، به این معنی که شما می توانید تنها یکی از این پارامترها را در یک زمان استفاده کنید! با این حال اگر مجموعه دادگان کوچک است میتوان از CV در DL هم استفاده کرد. در این مورد، یادگیری یک مدل پیچیده ممکن است یک کار بی ربط باشد، بنابراین مطمئن شوید که کار را بیشتر پیچیده نخواهید کرد!


یسری نکات:

شایان ذکر است که گاهی اوقات انجام اعتبارسنجی متقابل ممکن است کمی گمراه کننده باشد. به عنوان مثال، انجام یک اشتباه منطقی در هنگام تقسیم مجموعه داده ممکن است منجر به یک نتیجه CV غیرقابل اعتماد شود. لذا نکات زیر را هنگام انتخاب تکنیک مدنظر داشته باشید:

1. آیا روش تقسیم منطقی است؟

2. آیا این روش برای مسئله ی من مناسب و قابل اجرا است؟

3. هنگام کار با سری های زمانی، گذشته را تأیید نکنید (به اولین نکته مراجعه کنید)!

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

5. هنگام برش تکه‌ها از تصاویر بزرگ‌تر، به یاد داشته باشید که با شناسه تصویر بزرگ تقسیم کنید.

6. به هر حال انجام یک تجزیه و تحلیل داده های اکتشافی solid قبل از شروع CV یک مدل، همیشه بهترین روش است.


سخن آخر:

هر دانشمند داده باید با CV آشنا باشد. در زندگی واقعی، شما نمی توانید پروژه را بدون CV یک مدل به پایان برسانید. به نظر من بهترین تکنیک های CV عبارت اند از k-fold تودرتو و استاندارد. من شخصاً از آنها در وظیفه تشخیص تقلب استفاده کردم. در آینده الگوریتم های ML قطعاً حتی بهتر از امروز عمل خواهند کرد اما CV همیشه برای پشتیبان گیری از نتایج شما مورد نیاز است.


در منبع ذیل نمونه هایی از پیاده سازی تکنیک های بالا نیز وجود دارد.

منبع: https://neptune.ai/blog/cross-validation-in-machine-learning-how-to-do-it-right#slideDown

یادگیری ماشینهوش مصنوعیالگوریتمmachine learningcross validation
شاید از این پست‌ها خوشتان بیاید