اعتبار سنجی متقابل
اعتبار سنجی متقابل ( cross validation) یک روش ارزیابی مدل های یادگیری ماشین است، که نتایج تحلیل آماری را با در نظر گرفتن استقلال مدل شبکه از دادههای آموزشی بررسی می کند. این روش بهطور ویژه در کاربردهای پیشبینی مورد توجه قرار میگیرد تا مشخص شود مدل موردنظر تا چه اندازه برای داده های جدید مفید خواهد بود. در نهایت از نتایج اعتبارسنجیها میانگین گرفته میشود.
برای این مدل ارزیابی روش های مختلفی تعریف شده است از جمله :
- اعتبار سنجی متقابل Holdout
- اعتبار سنجی متقابل با کنار گذاشتن 1 نمونه
- اعتبار سنجی با کنار گذاشتن p نمونه
- اعتبار سنجی با نمونه های تصادفی
- اعتبار سنجی متقابل k-fold
- اعتبار سنجی متقابل k-fold طبقه بندی شده
- اعتبارسنجی متقابل سری زمانی
- اعتبار سنجی متقابل تو در تو
چرا اعتبار سنجی متقابل مهم است؟
ما اغلب بهطور تصادفی مجموعه دادهها را به دادههای test و train تقسیم میکنیم تا یک مدل یادگیری ماشین ایجاد شود. داده های train برای آموزش مدل ML استفاده می شود و در نهایت مدل آموزش دیده بر روی داده های test مستقل، به منظور بررسی عملکرد مدل، استفاده می شود. اما از آنجایی که نمی توان با تقسیم بندی ساده (مثلا 75 درصد tain و 25 درصد test) به دقت مدل اعتماد کرد، از روش ارزیابی متقابل استفاده می کنیم.

اعتبارسنجی متقابل اساساً یک تکنیک نمونهگیری مجدد است تا از کارامدی و دقت مدل مان در مواجه با دادههای جدید مطمئن شویم.این روش در هر بار آموزش داده های تست متفاوتی را را از کل داده ها بیرون کشیده و بقیه داده ها را برای train شبکه در نظر می گیرد. با این کار می توان عملکرد مدل را مستقل از داده های آموزشی نشان می دهد. برای اهداف زیر عمدتا از روش اعتبار سنجی متقابل استفاده می شود:
- هنگامیکه جمع آوری داده های بیشتر سخت، پرهزینه و یا غیرممکن باشد.
- برای تشخیص اینکه آیا شبکه آموزشی دچار بیش برازش شده است یا خیر؟!
- برای مقایسه عملکرد بین روش های مختلف ماشین لرنینگ بر روی دیتا ست مشخص
انواع روش های Cross Validation:
همانطور که گفته شد، اعتبار سنجی متقابل شامل روش های مختلفی می باشد که با توجه به حجم داده ها مساله می توان یکی از این روش ها را استفاده کرد.
1. اعتبار سنجی Holdout:
یک روش رایج در دسته بندی داده ها به این صورت است که مجموعه داده را به دو بخش تقسیم می کنیم: مجموعه آموزشی و مجموعه تست. معمولاً 80 درصد مجموعه داده به مجموعه آموزشی و 20 درصد به مجموعه آزمایشی میرود.
مدل را روی مجموعه آموزشی آموزش داده شده و در مجموعه آزمایشی اعتبار سنجی می شود در نهایت نتایج اعتبارسنجی ذخیره می گردد.

مزایا:
این روش کاملاً مستقل از داده است.
این روش فقط باید یک بار اجرا شود تا هزینه های محاسباتی کمتری داشته باشد.
معایب:
هر چه سایز داده کمتر، عملکرد تابع داده با واریانس بالاتر خواهد بود.
2. اعتبار سنجی متقابل Leave-One-Out:
همانطور که از اسم این روش پیداست در هر مرحله یکی از داده ها برای اعتبارسنجی بیرون گذاشته می شود و بقیه داده ها برای آموزش استفاده می شوند. این روش در واقع همان روش K-Fold است که در آن K برابر تعداد داده ها درنظر گرفته شده است. این روش از نظر محاسباتی بسیار پرهزینه است زیرا فرآیند آموزش و اعتبارسنجی به تعداد بسیار زیادی تکرار می شود.

3. اعتبار سنجی متقابل Leave-P-Out:
در اعتبار سنجی با کنار گذاشتن p سمپل (LpOCV) مشابه روش قبل است اما این بار در هر مرحله P داده برای اعتبارسنجی بیرون گذاشته می شود و بقیه داده ها برای آموزش استفاده می شوند. این روش در واقع همان روش K-Fold است که در آن K برابر تعداد داده ها درنظر گرفته شده است. این روش از نظر محاسباتی بسیار پرهزینه است زیرا فرآیند آموزش و اعتبارسنجی به تعداد بسیار زیادی تکرار می شود.
4. اعتبار سنجی Repeated random subsampling:
در این نوع اعتبارسنجی مجموعه داده ها به دو زیرمجموعه آموزش و تست تقسیم می شود. سپس مدل موردنظر با استفاده از داده های آموزشی آموزش داده می شود و نتیجه با استفاده از داده های تست اعتبارسنجی می شود. این روال چندین بار تکرار می شود و میانگین نتایج به عنوان تخمین نهایی درنظر گرفته میشود. مزیت این روش آن است که نسبت داده های آموزش و تست در هر اجرا به تعداد K وابسته نیست. عیب این روش آن است که بعضی داده ها ممکن است هرگز برای اعتبار سنجی استفاده نشوند و برخی دیگر ممکن است چند بار مورد استفاده قرار گیرند. به عبارت دیگر زیرمجموعه ها می توانند با هم هم پوشانی داشته باشند. این روش در واقع گونه از آزمایشات مونته کارلو می باشد. (Monte Carlo Cross-Validation)

5. اعتبار سنجی متقابل k_fold:
در این نوع اعتبارسنجی داده ها به K زیرمجموعه افراز می شوند. از این K زیرمجموعه، هر بار یکی برای اعتبارسنجی و K-1 تای دیگر برای آموزش بکار میروند. این روال K بار تکرار می شود و همه داده ها دقیقا یکبار برای آموزش و یکبار برای اعتبارسنجی بکار می روند. در نهایت میانگین نتیجه این K بار اعتبارسنجی به عنوان یک تخمین نهایی برگزیده می شود. البته می توان از روش های دیگر برای ترکیب نتایج استفاده کرد. بطور معمول از 10-Fold استفاده می شود.
در روش K-Fold طبقه ای سعی می شود نسبت داده های هر کلاس در هر زیرمجموعه و در مجموعه اصلی یکسان باشد.

برای توضیح نحوه اجرای این مساله باید به مثال شکل بالا توجه کرد. همانطور که در شکل می بینید دادهای آموزشی در هر بار تکرار به دو دسته test و train بخش بندی می شود. در مرحله بعدی 2 تای دیگر از داده ها به عنوان test انتخاب شده اند. در این حالت 6 داده در 3 بار تکرار مورد ارزیابی قرار گرفته است. و عملکرد مدل شبکه عصبی یا یادگیری ماشین به ازای داده های test متفاوت مورد بررسی قرار می گیرد. (3fold cross validation)
به طور کلی اعتبار سنجی متقابل kfold به معنی در نظر گرفت k تکرار پروسه آموزش است که در آن بعد از k بار آموزش، هر داده یک بار به عنوان داده test و k-1 بار هم به عنوان train در پروسه آموزش شبکه شرکت داده شده است.
6. اعتبار سنجی Stratified K-fold :
روش اعتبار سنجی متقاطع K-fold طبقه بندی شده روش دیگری است که مجموعه های نمونه داده به k زیرمجموعه تقسیم می شود. با این حال، برای اطمینان از اینکه هیچ تقسیم مغرضانه ای از داده ها در 'k' زیر مجموعه وجود ندارد، فرآیند طبقه بندی برای بازآرایی داده ها به گونه ای انجام می شود که هر پوشه نشان دهنده کل داده باشد. طبقه بندی منجر به قرارگیری داده ها از همه طبقات در همه زیر مجموعه ها شود به طوری که زیر مجموعه ها به طور کامل نشان دهنده داده ها باشد و منجر به دقت بیشتر شود.

7. اعتبار سنجی سری زمانی (time series):
روشی که میتوان برای اعتبارسنجی متقابل مدل سریهای زمانی استفاده کرد، اعتبارسنجی بر اساس چرخش (Rolling CV) است. با زیرمجموعه کوچکی از داده ها برای آموزش شروع می کنیم، برای نقاط داده بعدی پیش بینی سری زمای را انجام داده و سپس دقت را برای نقاط داده پیش بینی شده بررسی می کنیم. سپس همان نقاط داده پیش بینی شده به عنوان بخشی از مجموعه داده آموزشی بعدی گنجانده می شود و نقاط داده بعدی پیش بینی می شود.

8. اعتبار سنجی Nested k-Fold :
سایر تکنیکهای CV که برای ارزیابی کیفیت یک الگوریتم طراحی شده،اعتبار سنجی متقابل K-Fold تو در تو محبوبترین راه برای تنظیم یک الگوریتم است. در این روش داده ها به سه دسته تقسیم بندی می شود بخش داده های تست به صورت K-Fold دسته بندی شده و در بخش داده های اموزشی نیز به صورت k-fold داده های ارزشیابی و آموزش جدا سازی می شوند.

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