mohaddeseh eslahi
mohaddeseh eslahi
خواندن ۱۶ دقیقه·۳ سال پیش

Cross-Validation(CV)

اعتبار سنجی متقابل (Cross-Validation) در یادگیری ماشین: چگونه آن را به درستی انجام دهیم

  • 10 دقیقه زمان خواندن
  • نویسنده: ولادیمیر لیاشنکو
  • به روز شده در 12 نوامبر 2021
  • ترجمه :محدثه اصلاحی

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

برای انسان کلیات بخشی موجودات طبیعی ترین چیز ممکن است.ما میتونیم یه حشره رو طبقه بندی کنیم. برای مثال ما قطعا سگ را می شناسیم حتی اگر قبلا این نژاد و ندیده باشیم با این وجود ممکنه برای یک مدل یادگیری ماشین کاملا یک چالش باشد.

به همین دلیل چک کردن توانایی الگوریتم برای کلیات بخشی موجودات یک کار مهم در ساختار مدل است که به توجه زیادی احتیاج دارد.

برای این کار از اعتبارسنجی متقابل (Cross-Validation)استفاده میکنیم.

· در این مقاله به موارد زیر میپردازیم:

  • اعتبارسنجی متقابل چیست: تعریف / هدف از استفاده و تکنیک های آن
  • تکنیک های مختلف (CV) Cross-Validation :
  • 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 :
  • بهترین روش ها و نکات : سری زمانی /پزشکی و داده های مالی / تصاویر

Cross-Validation

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

معمولا cv در کارهای کاربردی ماشین لرنینگ استفاده میشود این به مقایسه و انتخاب یک مدل مناسب برای مسئله مدل‌سازی پیش‌بینی‌کننده خاص کمک می‌کند.

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

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

1. مجموعه داده را به دو بخش تقسیم کنید: یکی برای آموزش، دیگری برای آزمایش
2. مدل را روی مجموعه آموزشی آموزش دهید
3. اعتبار مدل را در مجموعه آزمایشی تأیید کنید
4. مرحله 1 تا 3 را چند بارتکرار کنید این عدد به روش اعتبار سنجی که استفاده می کنید بستگی دارد

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

  • Hold-out
  • K-folds
  • Leave-one-out
  • Leave-p-out
  • Stratified K-folds
  • Repeated K-folds
  • Nested K-folds
  • Complete

Hold-out


ساده ترین و رایج ترین تکنیک است. شما ممکن است درباره این روش ندانید اما مطمئناً هر روز از آن استفاده می کنید.

الگوریتم تکنیک Hold-out:

1. مجموعه داده را به دو بخش تقسیم کنید: مجموعه آموزشی و مجموعه تست. معمولاً 80 درصد مجموعه داده به مجموعه آموزشی و 20 درصد به مجموعه آزمایشی می‌رود، اما شما می توانید تقسیم بندی بهتری را اتخاب کنید.
2. مدل را روی مجموعه آموزشی آموزش دهید
3. در مجموعه آزمایشی اعتبار سنجی کنید
4. نتیجه اعتبارسنجی را ذخیره کنید

همینه

ما معمولاً از روش نگهدارنده در مجموعه داده‌های بزرگ استفاده می‌کنیم، زیرا فقط یک بار نیاز به آموزش مدل دارد.

پیاده سازی آن واقعا آسان است،

برای مثال شما میتوانید از sklearn.model_selection.train_test_split. استفاده کنید

با این حال hold-out یک نقطه ضعف بزرگ دارد به عنوان مثال، مجموعه داده ای که از نظر پراکندگی کاملا یکنواخت نیست اگرچه ممکن است پس از تقسیم در یک نقطه ناهنجار قرار بگیریم

به عنوان مثال، مجموعه آموزشی مجموعه تست را نشان نخواهد داد. هر دو مجموعه تمرین و تست ممکن است بسیار متفاوت باشند، یکی از آنها ممکن است آسان تر یا سخت تر باشد. علاوه بر این، این واقعیت که ما مدل خود را فقط یک بار آزمایش می کنیم ممکن است یک گلوگاه(bottleneck) باشد

با توجه به دلایل ذکر شده در بالا، ممکن است نتیجه به دست آمده با تکنیک Hold-out نادرست در نظر گرفته شود.

k-Fold


تکنیکی است که معایب روش Hold-out را به حداقل می رساند. k-Fold روش جدیدی را برای تقسیم مجموعه داده معرفی می کند که به غلبه بر " تست فقط یک بار گلوگاه " کمک می کند.

الگوریتم تکنیک k-Fold:

1. تعدادی عدد از folds – k انتخاب کنید معمولاk 5 یا 10 است اما شما می توانید هر عددی را انتخاب کنید که کمتر از طول مجموعه داده باشد.
2. مجموعه داده را به k قسمت مساوی (در صورت امکان) تقسیم کنید (به آنها foldsگفته می شود)
3. k – 1 folds انتخاب کنید که مجموعه آموزشی خواهد بود. باقیمانده مجموعه آزمایشی خواهد بود
4. مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار اعتبارسنجی متقابل، باید یک مدل جدید مستقل از مدل آموزش داده شده در تکرار قبلی آموزش دهید.
5. در مجموعه آزمایشی اعتبار سنجی کنید
6. نتیجه اعتبارسنجی را ذخیره کنید
7. مراحل را 3 تا 6 بار تکرار کنید.
8. هربار از باقیمانده ها به عنوان مجموعه تست استفاده کنید در پایان، شما باید مدل را روی هر دسته ای که دارید اعتبارسنجی کرده باشید.

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

برای اجرای k-fold cross validation میتواند از sklearn.model_selection.KFold استفاده کنید.

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

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

Leave-one-out

روش leave one out یا LOOCV یک مورد شدید یا افراط شده از K-Fold CV است. تصور کنید که k برابر با n باشد که n تعداد نمونه های دیتاست است. چنین k-Fold ای معادل تکنیک Leave-one-outخواهد بود

الگوریتم تکنیک LOOVCV:

1. یک نمونه از مجموعه داده را به عنوان داده تست خود انتخاب کنید.
2. در این مرحلهN-1 نمونه باقی مانده داده آموزش ما خواهد بود.
3. مدل را روی مجموعه آموزشی آموزش دهید، در هر تکرار، یک مدل جدید باید آموزش داده شود
4. روی داده تست ارزیابی را انجام دهید
5. نتیجه ارزیابی را ذخیره کنید
6. مراحل1 تا 5، n بار تکرار کنید (برای n نمونه، nمجموعه آموزشی و تست متفاوت داریم)
7. برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 5 به دست آوردید را محاسبه کنید.

کتابخانه sklearnبرای روش LOOCV هم یک روش دارد که میتوان آن را در model_selection، در بخش sklearn.model_selection.LeaveOneOutپیدا کرد.


بزرگترین مزیت Leave-one-out cross validation این است که داده زیادی را هدر نمی دهد. ما فقط از یک نمونه از کل مجموعه داده به عنوان مجموعه تست استفاده می کنیم، در حالی که بقیه نمونه ها متعلق به مجموعه آموزشی است. اما در مقایسه با k-Fold CV، LOOCV نیاز به ساخت n مدل به جای k مدل دارد، و می دانیم که n که مخفف تعداد نمونه در مجموعه داده است. بسیار بیشتر از k است. این بدان معناست که LOOCV از نظر محاسباتی گرانتر از k-Fold است، ممکن است زمان زیادی طول بکشد تا اعتبار سنجی متقابل با استفاد از روش LOOCVانجام شود. همچنین، جامعه علوم داده یک قاعده کلی بر اساس شواهد تجربی و تحقیقات مختلف دارد که اعتبارسنجی متقابل 5 یا 10 برابر باید بر LOOCV ترجیح داده شود.

Leave-p-out

روش leave-p-out cross validation یا LPOCVمشابه LOOCV است زیرا pنمونه را به عنوان مجموعه تست و باقی را به عنوان مجموعه آموزشی در نظر میگیرد، هر آنچه که برای LOOCVگفته شد برای LPOCV نیز صادق است. با این حال، شایان ذکر است که بر خلاف LOOCV و k-Fold ، در LPOCV اگر p بیشتر از 1 باشد مجموعه داده های تست همپوشانی خواهند داشت.

الگوریتم تکنیک LPOCV:

1. ابتدا P نمونه از مجموعه داده انتخاب کرده و به عنوان مجموعه داده تست در نظر میگیریم
1. 2.سپس N-p نمونه باقی مانده مجموعه داده آموزش خواهند بود
2. مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار، یک مدل جدید باید آموزش داده شود
3. روی مجموعه داده های تست مدل را ارزیابی کنید
4. نتیجه ارزیابی را ذخیره کنید
5. مراحل 2 تا 5 را به تعداد Cpnتکرار کنید
6. برای بدست آوردن امتیاز نهایی میانگین نتایجی که در مرحله 5 بدست آوردید را محاسبه کنید

میتوانید Leave-p-out CV را با استفاده از sklearn.model_selection.LeavePOutاجرا کنید


روش LPOCVتمام معایب LOOCV را دارد، اما، با این وجود به اندازه LOOCV قوی است.

Stratified k-Fold

گاهی ممکن است با عدم توازن زیادی در مقدار هدف در مجموعه داده ها مواجه شویم به عنوان مثال در مجموعه داده های مربوط به قیمت ساعت‌های مچی، ممکن است تعداد بیشتری از ساعت‌های مچی قیمت بالایی داشته باشند در مورد طبقه‌بندی، در مجموعه داده‌های گربه‌ها و سگ‌ها ممکن است تغییر زیادی به سمت طبقه سگ وجود داشته باشد.

تکنیک K-Fold طبقه بندی شده نوعی از تکنیک استاندارد K-Fold CV است که به گونه ای طراحی شده است که در چنین مواردی از عدم تعادل هدف موثر است، این روش به صورت زیر عمل می کند:

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

در مورد رگرسیون، Stratified k-Foldاطمینان حاصل می کند که میانگین مقدار هدف تقریباً در همه دسته ها برابر است.

الگوریتم تکنیک stratified k-fold:

1. یک عدد برای k انتخاب کنید
2. مجموعه داده را به k دسته تقسیم کنید، هر دسته باید تقریباً دارای درصد مشابهی از نمونه‌های هر کلاس هدف باشد
سپس K-1دسته را به عنوان مجموعه آموزشی انتخاب کنید و باقی مانده مجموعه آموزشی را به عنوان مجموعه داده تست در نظر بگیرید
3. مدل را بر روی مجموعه داده های آموزشی، آموزش دهید
4. روی مجموعه داده های تست مدل را ارزیابی کنید
5. نتیجه ارزیابی را ذخیره کنید
6. مراحل 3 تا 6 را k بار تکرار کنید، هر بار از دسته باقی مانده به عنوان مجموعه تست استفاده کنید
7. در پایان، شما باید مدل را روی هر دسته ای که دارید اعتبارسنجی کرده باشید
8. برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 6 به دست آوردید را محاسبه کنید

همانطور که ممکن است متوجه شده باشید، الگوریتم تکنیک Stratified k-Fold مشابه K-Folds استاندارد است و شما نیازی به کدنویسی اضافی ندارید زیرا این روش همه کارهای لازم را برای شما انجام می دهد.

روش Stratified k-Fold هم یک sklearn - sklearn.model_selection.StratifiedKFold دارد


تمام موارد ذکر شده در بالا در مورد K-Fold CV برای تکنیک Stratified k-Fold نیز صادق است. هنگام انتخاب بین روش های مختلف CV، مطمئن شوید که از روش مناسب استفاده می کنید. به عنوان مثال، ممکن است فکر کنید که مدل شما عملکرد بدی دارد، فقط به این دلیل که از K-Fold CV برای اعتبارسنجی مدلی استفاده می‌کنید که روی مجموعه داده با عدم تعادل در کلاس ها آموزش داده شده است. برای جلوگیری از آن، همیشه باید یک تجزیه و تحلیل مناسب روی داده های خود انجام دهید.

Repeated k-Fold

روش Repeated k-Fold cross-validation یا Repeated random sub-samplings CVاحتمالا قوی ترین تکنیک CV در این مطلب است. در این روش kتعداد دسته ها نیست بلکه تعداد دفعاتی است که ما مدل را آموزش میدهیم.

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

الگوریتم تکنیک Repeated k-Fold:

1. 1.ابتدا K را انتخاب کنید (تعداد دفعاتی که مدل آموزش می بیند)
2. تعدادی نمونه را به عنوان مجموعه آموزشی انتخاب کنید
3. مجموعه داده را تقسیم کنید
4. مدل را روی مجموعه داده های آموزشی، آموزش دهید، در هر تکرار اعتبارسنجی متقابل باید یک مدل جدید آموزش داده شود
5. روی مجموعه داده های تست مدل را ارزیابی کنید
6. نتیجه ارزیابی را ذخیره کنید
7. مراحل 3 تا 6 را k مرتبه تکرار کنید
8. برای بدست آوردن امتیاز نهایی میانگین نتایجی که در مرحله 6 به دست آوردید را محاسبه کنید

روش Repeated k-fold مزایای روشنی نسبت به k-fold استاندارد دارد، اولاٌ، نسبت تقسیم داده تست و آموزش به تعداد تکرارها بستگی ندارد. دوماٌ، ما حتی می توانیم نسبت های منحصر به فردی را برای هر تکرار تنظیم کنیم. سوماٌ، انتخاب تصادفی نمونه‌ها از مجموعه داده‌ها، Repeated k-Fold را برای سوگیری انتخاب قوی‌تر می‌کند.

با این حال، برخی از معایب وجود دارد. k-Fold CV تضمین می‌کند که مدل روی همه نمونه‌ها آزمایش می‌شود، در حالی که repeated k-fold بر اساس تصادفی‌سازی است که به این معنی است که برخی از نمونه‌ها ممکن است هرگز برای قرار گرفتن در مجموعه آزمایش انتخاب نشوند و همزمان ممکن است برخی از نمونه ها چندین بار انتخاب شوند.

کتابخانه Sklearn به شما در پیاده سازی Repeated k-Fold CV کمک می کند. فقط نیاز است از sklearn.model_selection.RepeatedKFoldاستفاده کنید.

در اجرای sklearn این تکنیک باید تعداد دسته هایی که می خواهید داشته باشید (n_splits) و تعداد دفعاتی که تقسیم انجام می شود (n_repeats) را تنظیم کنید. بدین ترتیب تضمین میشود که در هر تکرار دسته های مختلفی خواهید داشت.


Nested k-Fold

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

الگوریتم تکنیک Nested k-Fold:

1. ابتدا K را انتخاب کنید. یک عدد از دسته به عنوان مثال بیایید فرض کنیم ما عدد 10 رو انتخاب کردیم
2. پارامتر p را انتخاب کنید فرض کنید الگوریتم ما logistic regression است و p پارامتر penalty و برابر باp = {‘l1’, ‘l2’, ‘elasticnet’, ‘none’} است
3. مجموعه داده ها را به 10 دسته تقسیم کنید و یکی از آن ها را برای آزمایش رزرو کنید
4. یکی از دسته ها را برای اعتبارسنجی (validation) رزرو کنید
5. برای هر مقدار p روی 8 دسته آموزشی باقیمانده آموزش را انجام دهید و روی دسته اعتبارسنجی آن را ارزیابی کنید. اکنون 4 اندازه گیری دارید
6. مراحل 4 تا 5 را 9 بار تکرار کنید. دسته آموزش و اعتبار سنجی را با هم عوض کنید، هم اکنون 9*4 اندازه گیری دارید
7. حال P را طوری انتخاب کنید که میانگین خطای تمرین را بیش از 9 برابر به حداقل برساند. از آن pبرای ارزیابی روی مجموعه تست استفاده کنید
8. از مرحله 2، 10 بار مراحل را تکرار کنید و از هر دسته به نوبت به عنوان دسته تست استفاده کنید
9. میانگین و انحراف معیار اندازه گیری شده روی 10 دسته تست را ذخیره کنید
10. الگوریتمی که بهترین عملکرد را دارد، الگوریتمی بود که بهترین میانگین در میان این 10 دسته تست را داشت

این تکنیک از نظر محاسباتی گران تمام میشود زیرا در طول مراحل 1 تا 10 تعداد زیادی مدل باید آموزش و ارزیابی شوند. با این حال، Nested k-Fold CVمعمولا استفاده می شود و حتی ممکن است در چندین کار یادگیری ماشین واقعاً مؤثر باشد.

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

Complete Cross-Validation

روش Complete Cross-Validation کم استفاده ترین تکنیک CV است. ایده کلی این روش این است که ما یک عدد k (طول مجموعه آموزشی) را انتخاب می کنیم و روی هر تقسیم ممکن حاوی k نمونه در مجموعه آموزشی اعتبار سنجی می کنیم. مقدار آن تقسیم‌ها را می‌توان به صورت Cnkمحاسبه کرد که nطول مجموعه داده است. اگر kبالاتر از 2 باشد، باید مدل خود را چندین بار آموزش دهیم و همانطور که قبلاً متوجه شدیم یک فرایند گران قیمت و با محاسباتی زیاد است.

به همین دلیل است که Complete Cross-Validation در تحقیقات نظری و یا در صورت وجود فرمول موثری که به حداقل رساندن محاسبات کمک کند، استفاده می شود.

الگوریتم تکنیک Complete Cross-Validation:

1. ابتدا K را انتخاب کنید -طول مجموعه اموزشی
2. مجموعه داده ها را تقسیم کنید
3. روی مجموعه آموزشی، مدل را آموزش دهید
4. روی مجموعه داده های تست مدل را ارزیابی کنید
5. نتیجه ارزیابی را ذخیره کنید
6. مراحل 2 تا 5 را به تعداد Cnkتکرار کنید
7. برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 5 به دست آوردید را محاسبه کنید

Cross-Validation in Machine Learning

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

شایان ذکر است که اگر می‌خواهید مدل را اعتبارسنجي متقابل کنید، همیشه باید دفترچه راهنمای مدل را بررسی کنید زیرا برخی از الگوریتم‌های ML، به عنوان مثال، CatBoost روش‌های CVداخلی خود را دارند. ممکن است آنها را مربوط به وظیفه ML خود بیابید و به جای روش های داخلی sklearn از آنها استفاده کنید.

به طور کلی، همانطور که ممکن است متوجه شده باشید، بسیاری از تکنیک‌های CV دارای متود هايي در sklearnهستند. من به شدت توصیه می کنم از آنها استفاده کنید زیرا این روش ها برای کارهای پیچیده تر زمان زیادی را صرفه جویی می کنند.

Cross-Validation in Deep Learning

اعتبار سنجی متقابل در یادگیری عمیق (DL) ممکن است کمی مشکل باشد زیرا اکثر تکنیک های CV حداقل چند بار نیاز به آموزش مدل دارند.

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

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

1.درصدی از داده هایی که باید برای اعتبار سنجی نگهداری شوند(validation_split)
2.تاپلی از (X, y) که باید برای اعتبارسنجی استفاده شود. این پارامتر validation_split را override میکند، به این معنی که شما می توانید تنها یکی از این پارامترها را در یک زمان استفاده کنید.(validation_data)

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

1. آموزش – بخشی از مجموعه داده برای آموزش
2. اعتبار سنجی - بخشی از مجموعه داده برای اعتبارسنجی در حین آموزش
3. تست - بخشی از مجموعه داده برای اعتبار سنجی نهایی مدل

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

بهترین روش ها و نکات

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

نکاتی که ممکن است برای cross-validating مد نظر داشته باشید :

1. هنگام تقسیم داده ها منطقی باشید (آیا روش تقسیم منطقی است)
2. از روش CV مناسب استفاده کنید (آیا این روش برای مورد استفاده من قابل اجرا است)
3. هنگام کار با سری های زمانی، گذشته را تأیید نکنید (به اولین نکته مراجعه کنید)
4. هنگام کار با داده های پزشکی یا مالی، به یاد داشته باشید که به صورت شخصی تقسیم کنید. از داشتن داده برای یک نفر هم در آموزش و هم در مجموعه تست خودداری کنید زیرا ممکن است به عنوان نشت داده در نظر گرفته شود
5. هنگام برش تکه‌ها از تصاویر بزرگ‌تر، به یاد داشته باشید که با شناسه تصویر بزرگ تقسیم کنید

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

جمع بندی:

اعتبار سنجی متقابل ابزار قدرتمندی است. هر دانشمند داده باید با آن آشنا باشد. در زندگی واقعی، شما نمی توانید پروژه ای را بدون cross-validation بر روی یک مدل به پایان برسانید.

به نظر من بهترین تکنیک های CV، Nested k-Fold و k-Fold استاندارد هستند. من شخصاً از آنها در پروژه تشخیص تقلب استفاده کردم. K-Foldتودرتو و همچنین GridSeachCV به من کمک کرد تا پارامترهای مدل خود را تنظیم کنم. از طرف دیگر، k-Fold برای ارزیابی عملکرد مدل من استفاده شد.

در این مقاله، ما متوجه شدیم که اعتبارسنجی متقابل چیست، چه تکنیک‌های CV در طبیعت وجود دارد و چگونه آنها را پیاده‌سازی کنیم. در آینده قطعاً الگوریتم های ML حتی بهتر از امروز عمل خواهند کرد. با این حال، اعتبار سنجی متقابل همیشه برای پشتیبان گیری از نتایج شما مورد نیاز است.

امیدواریم با این اطلاعات، مشکلی در تنظیم CVبرای پروژه بعدی یادگیری ماشینی خود نخواهید داشت!

منابع :

https://www.geeksforgeeks.org/cross-validation-machine-learning/

https://www.geeksforgeeks.org/cross-validation-machine-learning/

https://machinelearningmastery.com/k-fold-cross-validation/

https://towardsdatascience.com/cross-validation-in-machine-learning-72924a69872f

https://towardsdatascience.com/why-and-how-to-do-cross-validation-for-machine-learning-d5bd7e60c189

https://scikit-learn.org/stable/modules/cross_validation.html

crossیادگیری ماشین
شاید از این پست‌ها خوشتان بیاید