ویرگول
ورودثبت نام
Melika
Melika
خواندن ۱۷ دقیقه·۳ سال پیش

هر آنچه باید درباره Cross validation در یادگیری ماشین بدانیم


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

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

برای ایجاد تعمیم از 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 معمولاً در کارهای کاربردی MLاستفاده می شود. CV کمک می کند تا مدل های مختلف را مقایسه و مناسب ترین را با توجه به مسئله پیش بینی خود انتخاب کنیم.

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

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

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

2. آموزش مدل با استفاده از داده های آموزشی

3. ارزیابی مدل بر روی داده های تست

4. تکرار چند باره مراحل 1 تا 3 (تعداد تکرار به شیوه CV مورد استفاد ما بستگی دارد)

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

· Hold-out

· K-folds

· Leave-one-out

· Leave-p-out

· Stratified K-folds

· Repeated K-folds

· Nested K-folds

· Complete

1.روش Hold-out:

اعتبار سنجی متقابل Hold-out ساده ترین و رایج ترین تکنیک است. شاید ندانید که اسم آن روش hold-out است اما مطمئناً هر روز از آن استفاده می کنید.

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

1. دیتاست را به دو بخش آموزش و تست تقسیم کنید، معمولا 80 درصد دیتاست برای آموزش و 20 درصد آن برای تست کنار گذاشته می شود، البته شما می توانید هر تقسیم بندی را انتخاب کنید که برای شما مناسب تر است

2. مدل را با استفاده از داده های آموزشی(train)، آموزش می دهیم

3. مدل را با داده های ارزیابی (validation) ، ارزیابی می کنیم

4. نتایج validation را ذخیره می کنیم

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

اجراي hold-out بسيار آسان است، براي مثال ميتوانيد ازsklearn.model_selection.train_test_split براي اين كار استفاده كنيد.

با اين حال روش hold-out يك نقطه ضعف بزرگ دارد

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

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


2. روش k-Fold:

اين روش تكنيكي است كه معايب تكنيك hold-outرا كمينه مي كند، k-fold روش جديدي براي تقسيم ديتاست معرفي مي كند كه مشكل گلوگاه در تست يكباره را حل مي كند.

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

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

2. مجموعه داده را به kقسمت مساوی (در صورت امکان) تقسیم کنید (به آنها folds گفته می شود)

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

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

5. روی دیتاست تست ارزیابی را انجام دهید

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

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

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

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

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

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

3. روش Leave-one-out cross validation :

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

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

1. یک نمونه (sample) از دیتاست را به عنوان داده تست خود انتخاب کنید.

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 انجام شود. همچنین، جامعه علوم داده یک قاعده کلی بر اساس شواهد تجربی و تحقیقات مختلف دارد که نشان می‌دهد اعتبارسنجی متقابل به روش k-fold با 5 یا 10 fold باید بر LOOCV ترجیح داده شود.

4. روش Leave-p-out:

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

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

1. ابتدا P نمونه از دیتاست انتخاب کرده و به عنوان دیتاست تست در نظر میگیریم

2.سپس N-p نمونه باقی مانده دیتاست آموزش خواهند بود

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

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

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

6. مراحل 2 تا 5 را به تعداد Cpnتکرار کنید

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

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

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

5. روش Stratified k-Fold:

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

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

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

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

1. یک عدد برای k انتخاب کنید

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

3.سپس K-1دسته را به عنوان دیتاست آموزشی انتخاب کنید و باقی مانده دیتا ها را به عنوان دیتاست تست در نظر بگیرید

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

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

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

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

8. در پایان، شما باید مدل را روی هر دسته ای که دارید اعتبارسنجی کرده باشید

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

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

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

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

6. روش Repeated k-Fold:

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

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

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

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) را تنظیم کنید. بدین ترتیب تضمین میشود که در هر تکرار دسته های مختلفی خواهید داشت.

7. روش Nested k-Fold:

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

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

1.ابتدا K را انتخاب کنید (تعداد دسته ها، فرض کنید ما مقدار 10 را برای k در نظر گرفته ایم)

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 را برای شما انجام دهد. این همان لحظه ای است که مجبورید در گوگل درباره پیاده سازی آن توسط فردی دیگر سرچ کنید و یا خودتان شخصا آن را پیاده سازی کنید.

8. روش 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 در يادگيري ماشين:

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

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

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

استفاده از Cross-validation در يادگيري عميق:

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

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

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

1. validation_split: درصدی از داده هایی که باید برای اعتبار سنجی نگهداری شوند

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

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

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

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

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

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


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

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

نکاتی که ممکن است برای انجام cross-validation مفید باشد در ادامه آورده شده است:

1. هنگام تقسیم داده ها منطقی باشید (آیا روش تقسیم منطقی است)

2. از روش CV مناسب استفاده کنید (آیا این روش برای مورد استفاده من قابل اجرا است)

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

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

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

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

جمع بندی:

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

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

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

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



منابع:

  1. https://www.geeksforgeeks.org/cross-validation-machine-learning/
  2. https://machinelearningmastery.com/k-fold-cross-validation/
  3. https://towardsdatascience.com/cross-validation-in-machine-learning-72924a69872f
  4. https://towardsdatascience.com/why-and-how-to-do-cross-validation-for-machine-learning-d5bd7e60c189
  5. https://scikit-learn.org/stable/modules/cross_validation.html
یادگیری ماشینهوش مصنوعیmachine learningcross validation
شاید از این پست‌ها خوشتان بیاید