در یادگیری ماشین (ML)، تعمیم معمولاً اشاره به توانایی یک الگوریتم برای مؤثر بودن در ورودی های مختلف دارد. این به این معناست که مدل یادگیری ماشین با کاهش عملکرد روی ورودی های جدید از توزیع یکسان داده های آموزشی مواجه نمی شود.
برای انسان ها این توانایی تعمیم طبیعی ترین چیز ممکن است. ما می توانیم سریعا طبقه بندی کنیم. به عنوان مثال ما قطعا قادریم یک سگ را شناسایی کنیم حتی اگر قبلا این نژاد را ندیده باشیم. با این وجود، این کار برای مدل یادگیری ماشین ممکن است کاملا یک چالش باشد. به همین دلیل است که بررسی توانایی تعمیم الگوریتم یک کار مهم است که در زمان ساخت مدل نیاز به توجه زیادی دارد.
برای این کار از اعتبار سنجی متقابل استفاده می کنیم.
در این مقاله به موارد زیر می پردازیم:
اعتبارسنجی متقابل چیست: تعریف، هدف استفاده و تکنیک ها
تکنیک های مختلف اعتبارسنجی متقابل:
hold-out, k-folds, Leave-one-out, Leave-p-out, Stratified k-folds, Repeated k-folds, Nested k-folds, Complete CV
نحوه استفاده از این تکنیک ها: sklearn
اعتبارسنجی متقابل در یادگیری ماشین: sklearn, CatBoost
اعتبارسنجی متقابل در یادگیری عمیق: Keras, PyTorch, MxNet
بهترین شیوه ها و نکات: سری های زمانی، داده های پزشکی و مالی و تصاویر
اعتبارسنجی متقابل چیست؟
اعتبار سنجی متقابل(CV) تکنیکی برای ارزیابی یک مدل یادگیری ماشین و آزمایش عملکرد آن است. اعتبارسنجی متقابل معمولاً در کارهای کاربردی یادگیری ماشین استفاده می شود. این تکنیک در مقایسه و انتخاب یک مدل مناسب برای مسئله مدلسازی پیشبینیکننده مشخص کمک میکند.
اعتبارسنجی متقابل به سادگی قابل درک است، پیادهسازی آن آسان است و نسبت به سایر روشهای مورد استفاده برای شمارش معیار کارایی مدل، بایاس کمتری دارد. همه این ها اعتبارسنجی متقابل را به ابزاری قدرتمند برای انتخاب بهترین مدل برای کار خاص تبدیل می کند.
تکنیک های مختلفی وجود دارد که ممکن است برای اعتبارسنجی متقابل یک مدل استفاده شوند. با این حال، همه آنها یک الگوریتم مشابه دارند:
1- مجموعه داده را به دو بخش تقسیم کنید: یکی برای آموزش، دیگری برای آزمایش
2- مدل را روی مجموعه داده های آموزشی، آموزش دهید
3- اعتبار مدل را در مجموعه آزمایشی تأیید کنید
4- مراحل 1 تا 3 را چند بار تکرار کنید. تعداد تکرار به روش اعتبارسنجی متقابل مورد استفاده، بستگی دارد.
همانطور که می دانید، تکنیک های اعتبارسنجی متقابل زیادی وجود دارد. برخی از آنها به طور معمول استفاده می شوند اما برخی دیگر فقط در تئوری کار می کنند. بیایید روش های اعتبارسنجی متقابلی را که در این مقاله پوشش داده خواهند شد، ببینیم:
· Hold-out
· K-folds
· Leave-one-out
· Leave-p-out
· Stratified K-folds
· Repeated K-folds
· Nested K-folds
· Complete
· Hold-out
اعتبار سنجی متقابل Hold-out(برگزاری) ساده ترین و رایج ترین تکنیک است. شاید آگاه نباشید که این یک روش Hold-out است اما مطمئناً هر روز از آن استفاده می کنید.
الگوریتم تکنیک Hold-out:
1- مجموعه داده را به دو بخش تقسیم کنید: مجموعه آموزشی و مجموعه آزمایش. معمولاً 80 درصد مجموعه داده به مجموعه آموزشی و 20 درصد به مجموعه آزمایشی تخصیص داده میشود، اما میتوانید هر تقسیمبندی که مناسبتر باشد را انتخاب کنید.
2- مدل را روی مجموعه آموزشی آموزش دهید
3- مدل را روی مجموعه داده های آزمایش، اعتبار سنجی کنید
4- نتیجه اعتبارسنجی را ذخیره کنید
ما معمولاً از روش Hold-outدر مجموعه دادههای بزرگ استفاده میکنیم، زیرا فقط یک بار نیاز به آموزش مدل دارد. اجرای روش Hold-outواقعاً آسان است. برای مثال، میتوانید این کار را با استفاده از sklearn.model_selection.train_test_splitانجام دهید.
با این حال، روش Hold-outیک نقطه ضعف بزرگ دارد.
به عنوان مثال، مجموعه داده ای که از لحاظ توزیع کاملاً یکنواخت نیست. اگر چنین باشد، ممکن است پس از تقسیم در یک نقطه ناهموار قرار بگیریم. به عنوان مثال، اگر مجموعه دیتا آموزشی نماینگر مجموعه دیتا آزمایش نباشد هر دو مجموعه آموزش و آزمایش ممکن است بسیار متفاوت باشند، یکی از آنها ممکن است آسان تر یا سخت تر باشد.
علاوه بر این، این واقعیت که ما مدل خود را فقط یک بار آزمایش می کنیم ممکن است یک تنگنا برای این روش باشد. با توجه به دلایلی که قبلا عنوان شد، نتیجه به دست آمده با تکنیک Hold-outممکن است غیر دقیق در نظر گرفته شود.
روش K-Fold :
تکنیکی است که معایب روش Hold-outرا به حداقل می رساند. K-Fold ،روش جدیدی را برای تقسیم مجموعه داده معرفی می کند که به غلبه بر مشکل "تنگنای فقط یک بار آزمایش مدل" کمک می کند.
1- تعداد kدسته را انتخاب کنید. معمولاً k برابر 5 یا 10 است، اما میتوانید هر عددی را که کمتر از طول مجموعه داده باشد، انتخاب کنید.
2- مجموعه داده را به k قسمت مساوی (در صورت امکان) تقسیم کنید (به آنها foldsگفته می شود).
3- قسمت k-1را انتخاب کنید که مجموعه داده آموزشی خواهد بود. Fold باقیمانده مجموعه داده آزمایشی خواهد بود.
4- مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار از اعتبارسنجی متقابل، باید یک مدل جدید مستقل از مدل آموزش داده شده در تکرار قبلی را آموزش دهید.
5- روی مجموعه آزمایشی اعتبار سنجی کنید.
6- نتیجه اعتبارسنجی را ذخیره کنید.
7- مراحل 3 تا 6 را kبار تکرار کنید. هر بار از fold باقی مانده به عنوان مجموعه تست استفاده کنید. در پایان، شما باید مدل را روی هر fold ای که دارید اعتبارسنجی کرده باشید.
8- برای به دست آوردن امتیاز نهایی، از نتایجی که در مرحله 6 به دست آوردید، میانگین بگیرید.
برای انجام اعتبارسنجی متقابل به روش k-Fold می توانید از sklearn.model_selection.KFold استفاده کنید؛که مثال کدش رو در پایین میبینید:
به طور کلی همیشه بهتر است به جای روش Hold-out از تکنیک k-Fold استفاده کنید. از آنجایی که فرایند آموزش و آزمایش بر روی چندین بخش مختلف مجموعه داده انجام می شود، در مقایسه یک یه یک، k-Fold نتیجه پایدارتر و قابل اعتمادتری به دست می دهد. اگر تعداد foldها را برای آزمایش مدل بر روی بسیاری از زیر مجموعههای مختلف افزایش دهیم، میتوانیم امتیاز کلی را قویتر کنیم.
با این حال، روش k-Fold یک نقطه ضعف دارد. افزایش k منجر به آموزش مدل های بیشتر می شود و فرآیند آموزش ممکن است واقعاً پرهزینه و زمان بر باشد.
روش Leave-one-out:
اعتبار سنجی متقابل(LOOCV) یک مورد کرانی از K-Fold روش است. تصور کنید که k برابر با n باشد و n تعداد نمونه های مجموعه داده است. چنین مورد k-Fold معادل تکنیکLeave-one-out است.
الگوریتم تکنیکLOOCV:
1- یک نمونه از مجموعه داده را انتخاب کنید که مجموعه آزمایشی خواهد بود.
2- در اینجاn – 1نمونه باقیمانده مجموعه آموزشی خواهد بود.
3- مدل را روی داده های مجموعه آموزشی آموزش دهید. در هر تکرار، یک مدل جدید باید آموزش داده شود.
4- روی مجموعه آزمایشی اعتبار سنجی کنید.
5- نتیجه اعتبارسنجی را ذخیره کنید.
مراحل 1 تا 5 را nبار تکرار کنید، چرا که برای n نمونه، n مجموعه آموزشی و آزمایشی متفاوت داریم.
برای به دست آوردن امتیاز نهایی، از نتایجی که در مرحله 5 به دست آوردید، میانگین بگیرید.
برای روش LOOCV نیز sklearn دارای یک روش built-in است که می توان آن را در کتابخانه model_selection - sklearn.model_selection.LeaveOneOutپیدا کرد.
بزرگترین مزیت روش اعتبارسنجی متقابل Leave-one-out این است که داده های زیادی را هدر نمی دهد. ما فقط از یک نمونه از کل مجموعه داده به عنوان یک مجموعه آزمایشی استفاده می کنیم، در حالی که بقیه دیتا متعلق به مجموعه آموزشی است. اما وقتی روش LOOCV با روش k-Fold مقایسه میشود، روش LOOCV نیازمند ساخت تعداد n مدل به جای k مدل دارد. میدانیم که n تعداد نمونههای مجموعه داده است که بسیار بیشتر از k است و این بدان معناست که LOOCV از نظر محاسباتی گرانتر از k-Fold است، ممکن است زمان زیادی برای اعتبارسنجی متقابل مدل با استفاده ازLOOCV نیاز باشد.
بنابراین، جامعه علوم داده یک قانون کلی بر اساس شواهد تجربی و تحقیقات مختلف دارد که پیشنهاد میدهد اعتبارسنجی متقابل 5 یا 10 fold باید بر LOOCV ترجیح داده شود.
روش Leave-p-out:
این روش اعتبار سنجی متقابل مشابه روش LOOC CV است زیرا تمام مجموعه داده های آموزشی و آزمایشی ممکن را با استفاده از p نمونه به عنوان مجموعه آزمایشی ایجاد می کند. تمام موارد ذکر شده در مورد روش LOOCV در مورد روش LpOC نیز صادق است.
با این حال، لازم به ذکر است که بر خلاف روش های LOOCV و k-Fold مجموعه دیتا های آزمایش اگر p بالاتر از 1 باشد، برای LpOC همپوشانی دارند.
الگوریتم تکنیک LpOC:
1- ابتدا p نمونه داده را از مجموعه داده ها انتخاب کنید که داده های مجموعه آزمایشی خواهند بود.
2- و n - p نمونه باقیمانده، داده های مجموعه آموزشی خواهند بود.
3- مدل را با استفاده از مجموعه داده های آموزشی آموزش دهید. در هر تکرار، یک مدل جدید باید آموزش داده شود.
4- اعتبار مدل روی مجموعه داده های آزمایش بسنجید.
5- نتیجه اعتبارسنجی را ذخیره کنید
6- مراحل 2 تا 5 را Cpn (ترکیب p از n) بار تکرار کنید.
7- برای به دست آوردن امتیاز نهایی، میانگین نتایجی را که در مرحله 5 به دست آوردید محاسبه کنید.
میتوانید اعتبار سنجی متقابل را به روش Leave-p-out را با استفاده از sklearn – sklearn.model_selection.LeavePOut انجام دهید.
روش LpOC تمام معایب روش LOOCV را دارد، با این حال به اندازه LOOCV قوی است.
روش Stratified k-Fold:
گاهی اوقات ممکن است در مقدار هدف در مجموعه داده با عدم تعادل زیادی مواجه شویم. به عنوان مثال، در مجموعه دادههای قیمت ساعتهای مچی، امکان دارد که تعداد بیشتری از ساعتهای مچی قیمت بالایی داشته باشند. در مورد طبقهبندی، در مجموعه دادههای گربهها و سگها ممکن است تعداد بیشتری داده در طبقه سگ وجود داشته باشند.
روش Stratified k-Fold نوعی از تکنیک استاندارد K-Fold CV است که به گونه ای طراحی شده است که در چنین مواردی از عدم تعادل در پارامتر هدف موثر باشد.
این تکنیک به صورت زیر عمل می کند:
روشStratified k-Foldمجموعه داده را به k دسته و به گونه ای که هر دسته دارای درصد یکسانی از نمونه های هر کلاس هدف به عنوان مجموعه کامل است، تقسیم می کند. در مورد رگرسیون، روش Stratified k-Fold مطمئن می شود که میانگین مقدار پارامتر هدف تقریباً در همه دسته ها برابر است.
الگوریتم تکنیک طبقه بندی Stratified k-Fold:
1- تعدادی k-foldرا انتخاب کنید.
2- مجموعه داده را به k دسته تقسیم کنید. هر fold باید تقریباً دارای درصد یکسانی از نمونههای هر کلاس هدف در مجموعه کامل باشد.
3- تعداد(k – 1) fold را انتخاب کنید که مجموعه دیتا آموزش خواهد بود. fold باقیمانده مجموعه دیتا آزمایش خواهد بود.
4- مدل را با استفاده از مجموعه دیتا آموزشی، آموزش دهید. در هر تکرار یک مدل جدید باید آموزش داده شود
5- روی مجموعه آزمایشی اعتبار سنجی کنید.
6- نتیجه اعتبارسنجی را ذخیره کنید.
7- مراحل 3 تا 6 را k بار تکرار کنید. هر بار از fold باقی مانده به عنوان مجموعه آزمایش استفاده کنید. در پایان، شما باید مدل را روی هر fold که دارید اعتبارسنجی کرده باشید.
8- برای به دست آوردن امتیاز نهایی، میانگین نتایجی را که در مرحله 6 به دست آوردید، محاسبه کنید.
همانطور که ممکن است متوجه شده باشید، الگوریتم تکنیک Stratified k-Fold شبیه به تکنیک K-Folds استاندارد است. شما نیازی به کدنویسی اضافی ندارید زیرا این روش همه کارهای لازم را برای شما انجام می دهد.
تکنیک اعتبارسنجی متقابل Stratified k-Fold دارای یک روش از پیش ساخته شده درsklearn sklearn.model_selection.StratifiedKFoldاست.
تمام موارد ذکر شده در باب روش K-Fold CV برای تکنیک Stratified k-Fold نیز صادق است. هنگام انتخاب بین روش های مختلف اعتبارسنجی متقابل ،اطمینان حاصل کنید که از روش مناسب استفاده می کنید. به عنوان مثال، ممکن است فکر کنید که مدل شما عملکرد بدی دارد، تنها به این دلیل که از روش اعتبارسنجی متقابل K-Foldبرای اعتبارسنجی مدلی استفاده میکنید که بر روی مجموعه دیتا با عدم تعادل در کلاس هدف، آموزش داده شده است. برای جلوگیری از این مشکل، همیشه باید ی تجزیه و تحلیل کاوشی مناسب روی داده های خود انجام دهید.
روش Repeated k-Fold:
اعتبارسنجی متقابل k-Foldتکراری یا نمونهبرداری تصادفی فرعی تکراری احتمالاً قویترین روش در بین همه ی تکنیکهای بیان شده در این مقاله است. این یک تغییر از k-Fold است اما در روش K-Foldsتکراری kتعداد foldها نیست. بلکه تعداد دفعاتی است که ما مدل را آموزش خواهیم داد.
ایده کلی این است که در هر تکرار، نمونههایی را بهطور تصادفی از مجموعه داده به عنوان مجموعه دا های آزمایشی انتخاب میکنیم. به عنوان مثال، اگر تصمیم بگیریم که 20٪ از مجموعه داده ها مجموعه آزمایشی ما باشد، 20٪ نمونه به طور تصادفی انتخاب می شوند و 80٪ باقی مانده، مجموعه آموزشی تخصیص داده می شود.
الگوریتم Repeated k-Fold:
1-ابتدا k (تعداد دفعاتی که مدل آموزش داده می شود) را انتخاب کنید.
2- تعدادی از نمونه ها را انتخاب کنید که در مجموعه آزمایشی خواهند بود.
3- مجموعه داده را تقسیم کنید.
4- روی مجموعه آموزشی مدل را آموزش دهید. در هر تکرار اعتبارسنجی متقابل، یک مدل جدید باید آموزش داده شود.
5- مدل را روی مجموعه دیتا آزمایشی اعتبار سنجی کنید.
6- نتیجه اعتبارسنجی را ذخیره کنید.
7- مراحل 3-6 را kبار تکرار کنید.
8- برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 6 به دست آوردید، محاسبه نمایید.
روش K-Fold تکراری مزایای مشخصی نسبت به روش استاندارد k-Fold CV دارد. اولا، نسبت تقسیم دیتا آموزش/آزمایش به تعداد تکرارها بستگی ندارد. ثانیا، ما حتی می توانیم نسبت های منحصر به فردی را برای هر تکرار تنظیم کنیم. ثالثاً، انتخاب تصادفی نمونهها از مجموعه دادهها، این روش را را برای بایاس انتخابی مقاوم میسازد.
با این حال، دارای برخی از معایب نیز می باشد. k-Fold CV تضمین میکند که مدل روی همه نمونهها آزمایش میشود، در حالی که K-Fold تکراری بر اساس تصادفیسازی کار میکند که به این معنی است که برخی از نمونهها ممکن است هرگز برای قرار گرفتن در مجموعه آزمایش انتخاب نشوند. در حالی که، برخی از نمونه ها ممکن است چندین بار انتخاب شوند.
دراینجا Sklearn به شما در پیاده سازی Repeated k-Fold CV کمک می کند.
از sklearn.model_selection.RepeatedKFoldاستفاده کنید. در اجرای این تکنیک توسط sklearn باید تعداد fold هایی که می خواهید داشته باشید (n_splits) و تعداد دفعاتی که تقسیم انجام می شود (n_repeats ) را تنظیم کنید. این تضمین می کند که در هر تکرار فولدهای مختلفی داشته باشید.
روش Nested k-Fold:
برخلاف سایر تکنیکهای CV، که برای ارزیابی کیفیت یک الگوریتم طراحی شدهاند، Nested k-Fold CV بیشتر برای تنظیم پارامترهای یک الگوریتم معروف و محبوب است.
تصور کنید که ما یک پارامتر p داریم که معمولاً به الگوریتم پایه ای که ما در حال اعتبارسنجی متقابل آن هستیم بستگی دارد. به عنوان مثال، برای رگرسیون لجستیک، ممکن است پارامتر جریمه باشد که برای تعیین هنجار مورد استفاده در جریمه استفاده می شود.
الگوریتم تکنیک Nested k-Fold:
1- ابتدا k (تعداد فولدها) را انتخاب کنید ، به عنوان مثال، 10. فرض کنیم این عدد را انتخاب کرده ایم.
2- یک پارامتر pرا انتخاب کنید. فرض کنید الگوریتم ما رگرسیون لجستیک است و p پارامتر جریمه p = {'l1', 'l2', 'elasticnet', 'none'}
3- مجموعه داده را به 10 fold تقسیم کنید و یکی از آنها را برای آزمایش رزرو کنید.
4- یکی از foldهای آموزشی را برای اعتبار سنجی رزرو کنید.
5- برای هر مقدار pروی 8 foldآموزشی باقیمانده آموزش دهید و روی فولد اعتبارسنجی ارزیابی کنید. اکنون 4 اندازه گیری دارید
6- مراحل 4-5 را 9 بار تکرار کنید. جابه جا کنید که هر بار کدام فولد آموزشی، fold اعتبارسنجی است؛
اکنون 4 * 9 اندازه گیری دارید.
7- دراینجا p را به گونه ای انتخاب کنید که میانگین خطای آموزش را روی 9 دسته به حداقل می رساند. از آن p برای ارزیابی مدل با استفاده از مجموعه آزمایش استفاده کنید.
8- از مرحله 2 ، 10 بار تکرار کنید و از هر fold به نوبت به عنوان فولد آزمایش استفاده کنید.
9- میانگین و انحراف معیار اندازه گیری ارزیابی را در 10 فولد آزمایش ذخیره کنید.
10- الگوریتمی که بهترین عملکرد را داشت، الگوریتمی است که بهترین میانگین عملکرد خارج از نمونه را در 10 فولد آزمایشی دارد.
این تکنیک از نظر محاسباتی گران است زیرا در طول مراحل 1 تا 10 تعداد زیادی مدل باید آموزش و ارزیابی شوند. با این حال، روش Nested k-Fold CV معمولا استفاده می شود و ممکن است در چندین کار یادگیری ماشین واقعاً مؤثر باشد.
متأسفانه، هیچ روش از پیش ساخته ای در sklearn وجود ندارد که بتواند CV Nested k-Fold را برای شما انجام دهد شما باید یا با استفاده از گوگل پیاده سازی شخصی را پیدا کنید یا خودتان آن را کدنویسی کنید.
اعتبار سنجی متقابل complete(کامل):
تکنیک اعتبارسنجی متقابل کامل کم استفاده ترین تکنیک در بین روش های اعتبارسنجی متقابل است. ایده کلی این است که ما یک عدد k ( طول مجموعه آموزشی ) را انتخاب می کنیم و روی هر بخش ممکن از دیتا که شامل kنمونه در مجموعه آموزشی است، اعتبار سنجی می کنیم.
مقدار بخش ها را میتوان به صورت ترکیب n از k محاسبه کرد که n طول مجموعه داده است. اگر k بیشتر از 2 باشد، باید مدل خود را چندین بار آموزش دهیم که همانطور که قبلاً متوجه شدیم از جنبه زمانی و محاسباتی فرآیندی گران قیمت است.
به همین دلیل است که از این روش یا در تحقیقات نظری و یا در صورتی که فرمول مؤثری برای به حداقل رساندن محاسبات وجود داشته باشد، استفاده می شود.
الگوریتم اعتبار سنجی متقابل کامل:
1- یک عدد k ( طول مجموعه آموزشی) را انتخاب کنید.
2- مجموعه داده را تقسیم کنید.
3- مدل را توسط مجموعه آموزشی آموزش دهید.
4- روی مجموعه آزمایشی اعتبار سنجی کنید.
5- نتیجه اعتبارسنجی را ذخیره کنید.
6- مراحل 2 تا 5 را به اندازه ترکیب n از k تکرار کنید.
7- برای به دست آوردن امتیاز نهایی، از نتایجی که در مرحله 5 به دست آوردید، میانگین بگیرید.
اعتبار سنجی متقابل در یادگیری ماشین
بیشتر تکنیک های اعتبار سنجی متقابل ذکر شده در بالا به طور گسترده در یادگیری ماشین استفاده می شود. مهم است که به خاطر داشته باشید که استفاده از تکنیک اعتبارسنجی متقابل مناسب ممکن است در زمان شما صرفه جویی کند و به انتخاب بهترین مدل برای کار کمک کند.
این به تین معناست که اولاً، بهتر است همیشه مدل را اعتبارسنجی متقابل کنید و ثانیاً باید یک روش از میان روش های ارزیابی متقابل مربوطه را انتخاب کنید. بنابراین، دانستن مزایا و معایب تکنیکهای اعتبارسنجی متقابل ضروری است.
لازم به ذکر است که اگر میخواهید مدل را اعتبار سنجی متقابل کنید، همیشه باید منوال(manual) مدل را بررسی کنید چرا که برخی از الگوریتمهای یادگیری ماشین، به عنوان مثال، CatBoost روشهای ارزیابی متقابل مختص به خود را دارند. ممکن است آنها در کار یادگیری ماشین شما مرتبط و کارامد بیابید و به جای روش های از پیش ساخته sklearnاز آنها استفاده کنید.
به طور کلی، ممکن است متوجه شده باشید، بسیاری از تکنیکهای ارزیابی متقابل دارای روشهای از پیش ساخته شده در sklearn هستند. من به شدت توصیه می کنم از آنها استفاده کنید زیرا این روش ها برای کارهای پیچیده تر منجر به صرفه جویی زیادی در زمان می شوند.
اعتبارسنجی متقابل در یادگیری عمیق(DL )
اعتبار سنجی متقابل در یادگیری عمیق ممکن است کمی مشکل تر باشد زیرا اکثر تکنیک ها حداقل چند بار نیاز به آموزش مدل دارند.
در یادگیری عمیق، معمولاً به دلیل هزینههای مربوط به آموزش تعداد k مدل مختلف، از اعتبارسنجی متقابل اجتناب میکنید. به جای انجام k-Fold یا سایر روش ها ممکن است از یک زیرمجموعه تصادفی از داده های آموزشی خود به عنوان hold-outبرای اهداف اعتبار سنجی استفاده کنید.
به عنوان مثال، کتابخانه یادگیری عمیق Keras به شما این این مکان را می دهد که از یکی از دو پارامتر برای تابع fit که کار آموزش را انجام می دهد، عبور(ارسال) کنید.
تعریف validation_split: درصدی از دیتا که باید برای اعتبار سنجی hold-out شوند.
تعریف validation_data: یک تاپل از (X, y) که باید برای اعتبارسنجی استفاده شود. این پارامتر، پارامتر دیگر validation_splitرا نادیده می گیرد، به این معنی که شما تنها یکی از این پارامترها را در یک زمان می توانید استفاده کنید.
همین رویکرد در آموزش های رسمی سایر محیط های کاری یادگیری عمیق مانند PyTorch و MxNet استفاده می شود. آنها همچنین پیشنهاد می کنند مجموعه دیتا را به سه بخش تقسیم کنید: دیتاآموزش، دیتا اعتبار سنجی و دیتا آزمایش.
آموزش – بخشی از مجموعه داده برای آموزش
اعتبار سنجی - بخشی از مجموعه داده برای اعتبارسنجی در حین آموزش
آزمایش- بخشی از مجموعه داده برای اعتبار سنجی نهایی مدل
با این حال، اگر مجموعه داده کوچک باشد (شامل صدها نمونه) می توانید از اعتبارسنجی متقابل در کار های یادگیری عمیق استفاده کنید. در این مورد، یادگیری یک مدل پیچیده ممکن است یک کار بی ربط باشد، بنابراین مطمئن شوید که کار را پیچیده تر نکنید.
بهترین روش ها و نکات
لازم به ذکر است که گاهی اوقات انجام اعتبارسنجی متقابل ممکن است کمی مشکل باشد.
به عنوان مثال، اشتباه منطقی در هنگام تقسیم مجموعه داده بسیار آسان است که ممکن است منجر به یک اعتبارسنجی متقابل غیرقابل اعتماد شود.
ممکن است نیاز باشد نکاتی را که در زیر آمده شده در هنگام اعتبارسنجی متقابل یک مدل مد نظر داشته باشید:
1- هنگام تقسیم داده ها منطقی باشید (آیا روش تقسیم منطقی است؟)
2- از روش اعتبارسنجی متقابل مناسب استفاده کنید (آیا این روش در این کار من قابل اجرا است؟)
3- هنگام کار با سری های زمانی، روی گذشته ارزیابی نکنید (به اولین نکته مراجعه کنید)
4- هنگام کار با داده های پزشکی یا مالی، در خاطر داشته باشید که آن را بر اساس دیتای هر شخص تقسیم کنید. از قرار دادن داده یک نفر هم در آموزش و هم در مجموعه تست خودداری کنید زیرا ممکن است به عنوان نشت داده در نظر گرفته شود.
5- هنگام برش تکهها از تصاویر بزرگتر، به یاد داشته باشید که با شناسه تصویر بزرگ تقسیم کنید.
البته، نکات از کاری به کاری دیگر متفاوت هستند و پوشش دادن همه آنها تقریبا غیرممکن است. به این دلیل است که انجام یک تجزیه و تحلیل قوی (آنالیز) کاوشی داده ها قبل از شروع اعتبارسنجی متقابل یک مدل، همیشه بهترین روش است.
سخن نهایی
اعتبار سنجی متقابل ابزار قدرتمندی است. هر دانشمند داده باید با آن آشنا باشد. در زندگی واقعی، شما نمی توانید پروژه ای را بدون اعتبارسنجی متقابل یک مدل به پایان برسانید.
به نظر من بهترین تکنیک ها، Nested k-Fold و k-Fold استاندارد هستند. من پیشتر از آنها در پروژه تشخیص تقلب و کلاهبرداری استفاده کردم. دو تکنیک Nested k-Fold و همچنین GridSeachCV به من در تنظیم پارامترهای مدل کمک کردند. از طرف دیگر، تکنیک k-Fold برای ارزیابی عملکرد مدل من استفاده شد.
در این مقاله، ما متوجه شدیم که اعتبارسنجی متقابل چیست، چه تکنیکهای در این بحث وجود دارد و چگونه می توان آنها را پیادهسازی کرد. الگوریتم های یادگیری ماشین در آینده قطعاً حتی بهتر از امروز عمل خواهند کرد. با این حال، اعتبار سنجی متقابل همیشه برای تقویت وپشتیباتی از نتایج شما مورد نیاز است.
به امید خدا با این اطلاعات، مشکلی در انجام اعتبارسنجی متقابل برای پروژه بعدی یادگیری ماشین نخواهید داشت!
باتشکر
سامرند مجنونی
منبع: نپتون بلاگ