ویرگول
ورودثبت نام
محسن رمضانی نصرتی
محسن رمضانی نصرتی
محسن رمضانی نصرتی
محسن رمضانی نصرتی
خواندن ۱۷ دقیقه·۵ سال پیش

Cross-Validation in Machine Learning

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

چگونه آن را به درستی انجام دهیم؟

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

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

برای این کار از Cross-Validation (CV) استفاده می کنیم.

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

· اعتبار متقابل چیست: تعریف، هدف استفاده و تکنیک ها

· تکنیک‌های مختلف CV:

hold-out, k-folds, Leave-one-out, Leave-p-out, Stratified k-folds, Repeated

k-folds, Nested k-folds, Complete CV

· نحوه استفاده از این تکنیک ها: sklearn

· Cross-Validation در یادگیری ماشینی: sklearn، CatBoost

· Cross-Validation در یادگیری عمیق: Keras، PyTorch، MxNet

· بهترین شیوه ها و نکات: سری های زمانی، داده های پزشکی و مالی، تصاویر.

Cross-Validation چیست؟

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

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

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

1- مجموعه داده را به دو بخش تقسیم کنید: یکی برای آموزش، دیگری برای آزمایش

2- مدل را روی مجموعه آموزشی آموزش دهید

3- اعتبار مدل را در مجموعه آزمایشی تأیید کنید

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

5- همانطور که می دانید، تکنیک های 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 ساده ترین و رایج ترین تکنیک است. شاید ندانید که این روش نگهدارنده است اما مطمئناً هر روز از آن استفاده می کنید.

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

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

2- مدل را روی مجموعه آموزشی آموزش دهید

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

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

خودشه.

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

اجرای hold-out واقعاً آسان است. برای مثال، می‌توانید این کار را با استفاده از روش زیر انجام دهید. sklearn.model_selection.train_test_split

import numpy as np

from sklearn.model_selection import train_test_split

X, y = np.arange(10).reshape((5, 2)), range(5)

X_train, X_test, y_train, y_test = train_test_split(X, y,

test_size=0.2,

random_state=111)

با این حال، hold-out یک نقطه ضعف بزرگ دارد.

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

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

k-Fold

K-Fold CV تکنیکی است که معایب روش hold-out را به حداقل می رساند. k-Fold روش جدیدی را برای تقسیم مجموعه داده معرفی می کند که به غلبه بر "تست فقط یک بار گلوگاه(test only once bottleneck )" کمک می کند.

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

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

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

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

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

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

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

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

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

import numpy as np

from sklearn.model_selection import KFold

X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])

y = np.array([1, 2, 3, 4])

kf = KFold(n_splits=2)

for train_index, test_index in kf.split(X):

print("TRAIN:", train_index, "TEST:", test_index)

X_train, X_test = X[train_index], X[test_index]

y_train, y_test = y[train_index], y[test_index]

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

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

Leave-one-out

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

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

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

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

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

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

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

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

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

برای LOOCV sklearn همچنین دارای یک روش داخلی است. می توان آن را در کتابخانه model_selection - sklearn.model_selection.LeaveOneOut پیدا کرد.import numpy as npfrom sklearn.model_selection import LeaveOneOutX = np.array([[1, 2], [3, 4]])y = np.array([1, 2])loo = LeaveOneOut()for train_index, test_index in loo.split(X):print("TRAIN:", train_index, "TEST:", test_index)X_train, X_test = X[train_index], X[test_index]y_train, y_test = y[train_index], y[test_index]

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

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

بنابراین، جامعه علوم داده یک قاعده کلی بر اساس شواهد تجربی و تحقیقات مختلف دارد که نشان می‌دهد Cross-Validation 5 یا 10 برابر باید بر LOOCV ترجیح داده شود.

Leave-p-out

Leave-p-out cross-validation (LpOC) شبیه به Leave-one-out CV است زیرا تمام مجموعه های آموزشی و آزمایشی ممکن را با استفاده از نمونه های p به عنوان مجموعه آزمایشی ایجاد می کند. تمام موارد ذکر شده در مورد LOOCV و برای LpOC درست است.

با این حال، شایان ذکر است که بر خلاف LOOCV و مجموعه‌های تست k-Fold برای LpOC اگر p بالاتر از 1 باشد، همپوشانی دارند.

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

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

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

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

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

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

6- مراحل را Cpn 5-2 بار تکرار کنید

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

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

import numpy as np

from sklearn.model_selection import LeavePOut

X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])

y = np.array([1, 2, 3, 4])

lpo = LeavePOut(2)

for train_index, test_index in lpo.split(X):

print("TRAIN:", train_index, "TEST:", test_index)

X_train, X_test = X[train_index], X[test_index]

y_train, y_test = y[train_index], y[test_index]

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

Stratified k-Fold

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

Stratified k-Fold یک تغییر از تکنیک استاندارد K-Fold CV است که به گونه ای طراحی شده است که در چنین مواردی از عدم تعادل هدف موثر باشد.

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

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

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

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

3- k – 1 ، folds را انتخاب کنید که مجموعه آموزشی خواهد بود. fold باقیمانده مجموعه آزمایشی خواهد بود

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

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

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

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

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

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

Stratified k-Fold همچنین یک روش داخلی در sklearn دارد

sklearn.model_selection.StratifiedKFold

import numpy as npfrom sklearn.model_selection import StratifiedKFoldX = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])y = np.array([0, 0, 1, 1])skf = StratifiedKFold(n_splits=2)for train_index, test_index in skf.split(X, y):print("TRAIN:", train_index, "TEST:", test_index)X_train, X_test = X[train_index], X[test_index]y_train, y_test = y[train_index], y[test_index]

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

Repeated k-Fold

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

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

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

1- تعدادk-a دفعاتی که مدل آموزش داده می شود را انتخاب کنید

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

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

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

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

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

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

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

K-Fold مکرر مزایای واضحی نسبت به استاندارد k-Fold CV دارد. اولا، نسبت تقسیم train/test به تعداد تکرارها بستگی ندارد. ثانیا، ما حتی می توانیم نسبت های منحصر به فردی را برای هر تکرار تنظیم کنیم. ثالثاً، انتخاب تصادفی نمونه‌ها از مجموعه داده، Repeated k-Fold را برای سوگیری انتخاب قوی‌تر می‌کند.

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

Sklearn به شما در پیاده سازی Repeated k-Fold CV کمک می کند.

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

import numpy as npfrom sklearn.model_selection import RepeatedKFoldX = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])y = np.array([0, 0, 1, 1])rkf = RepeatedKFold(n_splits=2, n_repeats=2, random_state=42)for train_index, test_index in rkf.split(X):print("TRAIN:", train_index, "TEST:", test_index)X_train, X_test = X[train_index], X[test_index]y_train, y_test = y[train_index], y[test_index]

Nested k-Fold

برخلاف سایر تکنیک‌های CV، که برای ارزیابی کیفیت یک الگوریتم طراحی شده‌اند، Nested k-Fold CV محبوب‌ترین راه برای تنظیم پارامترهای یک الگوریتم است.

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

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

1- تعدادی k-a ، fold را انتخاب کنید ، به عنوان مثال، 10 - اجازه دهید فرض کنیم که این عدد را انتخاب کرده ایم

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

3- و p پارامتر جریمه p = {'l1', 'l2', 'elasticnet', 'none'}

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

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

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

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

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

9- از مرحله 2 ، 10 بار تکرار کنید و از هر تا به نوبت به عنوان تای تست استفاده کنید

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

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

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

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

Cross-Validation Complete

CV کامل کم استفاده ترین تکنیک CV است. ایده کلی این است که ما یک عدد ( طول مجموعه آموزشیk - )را انتخاب می کنیم و روی هر تقسیم ممکن حاوی k نمونه در مجموعه آموزشی اعتبار سنجی می کنیم.

مقدار آن تقسیم‌ها را می‌توان به صورت Сnkمحاسبه کرد که n طول مجموعه داده است. اگر k بالاتر از 2 باشد، باید مدل خود را چندین بار آموزش دهیم که همانطور که قبلاً متوجه شدیم یک زمان فرآیند گران قیمت و از نظر محاسباتی است.

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

الگوریتم Complete cross-validation :

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

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

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

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

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

6- مراحل 2 تا 5 را Сnkبار تکرار کنید

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

Cross-Validation در: Machine Learning

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

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

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

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

Cross-Validation در Deep Learning :

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

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

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

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

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

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

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

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

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

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

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

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

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

ممکن است نکاتی را بیابید که باید هنگام تایید متقابل یک مدل در زیر مد نظر داشته باشید:

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

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

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

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

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

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

اندیشه های نهایی

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

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

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

Cross-validation همیشه برای پشتیبان گیری از نتایج شما مورد نیاز است.

امیدواریم با این اطلاعات، مشکلی در تنظیم 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


۵
۱
محسن رمضانی نصرتی
محسن رمضانی نصرتی
شاید از این پست‌ها خوشتان بیاید