Cross-Validation in Machine Learning: How to Do It Right
اعتبار سنجی متقابل در یادگیری ماشین:چگونه میتوان این کار را به درستی انجام داد
نویسنده: ولادمیر لیاشنکو
در یادگیری ماشین (ML)، تعمیم معمولاً به توانایی یک الگوریتم برای کارآمدبودن در ورودی های مختلف دیده نشده اشاره دارد. این بدان معنی است که مدل یادگیری ماشین با کاهش عملکرد در ورودیهای جدیدی که از توزیع یکسانی با دادههای آموزشی دارند مواجه نمیشود.
برای انسان تعمیم یکی از طبیعی ترین چیزهای ممکن است. ما میتونیم رو هوا طبقه بندی کنیم. به عنوان مثال، ما قطعاً یک سگ را میشناسیم حتی اگر قبلاً این نژاد را ندیده باشیم. با این وجود، ممکن است این کار برای یک مدل یادگیری ماشین کاملاً یک چالش باشد. به همین دلیل است که در ساخت مدل بررسی توانایی الگوریتم برای تعمیم یک کار مهم بوده و نیاز به توجه زیادی دارد.
برای این کار(تعمیم) ازروش اعتبار سنجی متقابل (CV) استفاده میشود.
در این مقاله به موارد زیر پرداخته میشود:
· اعتبار سنجی متقابل چیست: تعریف، هدف استفاده و تکنیک ها
· تکنیکهای مختلف: CV به روش برگزاری، روش k-folds، اعتبارسنجی یک طرفه، اعتبار سنجی خارج از صفحه، k-folds دستهای، k-folds مکرر، k-folds تودرتو، روش اعتبارسنجی کامل
· نحوه استفاده از این تکنیک ها در sklearn:
· اعتبار سنجی متقابل در یادگیری ماشینی: sklearn، CatBoost
· اعتبار سنجی متقابل در یادگیری عمیق : Keras، PyTorch، MxNet
· بهترین برای شیوهها و کارهایی از جمله: سری های زمانی، داده های پزشکی و مالی، تصاویر
اعتبارسنجی متقابل تکنیکی برای ارزیابی یک مدل یادگیری ماشینی و آزمایش عملکرد آن است. معمولاً در کارهای یادگیری ماشین استفاده میشود که به مقایسه و انتخاب یک مدل متناسب با مسئله مدلسازی پیشبینیکننده مختص خود کمک میکند.
درک و پیادهسازی CV آسان است، و مشکلات کمتری نسبت به سایر روشهای مورد استفاده برای محاسبه کارایی مدل دارد. همه اینها اعتبار سنجی متقابل را به ابزاری قدرتمند برای انتخاب بهترین مدل برای کار های یادگیری ماشین تبدیل میکند.
تکنیک های مختلفی وجود دارد که ممکن است برای اعتبارسنجی متقابل یک مدل استفاده شود. با این حال، همه آنها یک الگوریتم مشابه دارند:
1. مجموعه داده را به دو بخش تقسیم میشود: یکی برای آموزش، دیگری برای تست
2. مدل را روی مجموعه آموزشی آموزش داده میشود
3. اعتبار مدل را در مجموعه تست ارزیابی میشود
4. مراحل 1 تا 3 چند بار تکرار میشود. این تکرار به روش CVای که استفاده میشود بستگی دارد.
با توجه با اینکه تکنیکهای CV زیادی وجود دارد. معمولا برخی از آنها استفاده می شوند، برخی دیگر تنها در حد فرضیه هستند. در این بخش روشهای اعتبار سنجی متقابل توضیح داده میشود.
· روش برگزاری
· روش k-folds
· اعتبارسنجی یک طرفه
· اعتبار سنجی خارج از صفحه
· k-folds دستهای
· k-folds مکرر
· k-folds تودرتو
· روش اعتبارسنجی کامل
اعتبار سنجی متقابل به روش برگزاری سادهترین و رایجترین تکنیک است. ممکن است نحوه کار این روش را ندانید اما مطمئنا هر روز از آن استفاده میکنید.
الگوریتم تکنیک برگزاری:
1. مجموعه داده را به دو بخش تقسیم میشود: مجموعه آموزشی و مجموعه تست. معمولاً 80 درصد مجموعه داده به مجموعه آموزشی و 20 درصد به مجموعه آزمایشی تقسیم میشود، اما میتوان هر تقسیمبندی را که مناسبتر است را انتخاب کرد.
2. مدل بر روی مجموعه آموزشی، آموزش میبیند.
3. در مجموعه تست ارزیابی میشود.
4. نتیجه این ارزیابی ذخیره میشود.
از روش برگزاری در مجموعه دادههای بزرگ استفاده میشود، زیرا مدل فقط یک بار نیاز به آموزش دارد.
اجرای آن واقعاً آسان است. برای مثال، میتوان این کار را با استفاده از 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)
با این حال، روش برگزاری یک نقطه ضعف بزرگ دارد.
به عنوان مثال، مجموعه داده ای که در توزیع کاملاً یکنواخت نیست. اگر چنین باشد، ممکن است تقسیم دادهها در یک نقطه نامناسب قرار گیرد. به عنوان مثال، مجموعه آموزشی، بیانگری از مجموعه تست نخواهد بود. هر دو مجموعه تمرین و تست ممکن است بسیار متفاوت باشند، یکی از آنها ممکن است آسانتر یا سختتر باشد.
علاوه بر این، این واقعیت که ما مدل خود را فقط یک بار آزمایش می کنیم ممکن است یک نقطه چالش برانگیز برای این روش باشد. با توجه به دلایلی که قبلا ذکر شد، نتیجه به دست آمده با تکنیک برگزاری ممکن است نادرست در نظر گرفته شود.
روش k-Fold تکنیکی است که معایب روش برگزاری را به حداقل می رساند. در این روش رویه جدیدی برای تقسیم مجموعه داده ارائه میشود که به غلبه بر کشل 'فقط یک بار تست و نقطه چالش' کمک میکند.
الگوریتم تکنیک k-Fold:
1. مجموعه داده را به k قسمت مساوی (در صورت امکان) تقسیم میشود که به آنهاfolds گفته می شود. تعداد kبرای اجرای این الگوریتم انتخاب میشودکه معمولاً 5 یا 10 است، اما میتوان هر عددی را انتخاب شود به شرط آنکه کمتر از طول مجموعه داده باشد.
2. ? بسته مجموعه آموزشی خواهد بود. باقیمانده مجموعه تست خواهد بود.
3. مدل بر روی مجموعه آموزشی آموزش داده میشود. در هر تکرار اعتبار سنجی متقابل، باید یک مدل جدید مستقل از مدل آموزش داده شده در تکرار قبلی آموزش داده شود.
4. در مجموعه تست ارزیابی شود.
5. نتیجه اعتبارسنجی را ذخیره شود.
6. مراحل 3 تا 6 kبار تکرار شود. هر بار از مجموعه باقی مانده را به عنوان مجموعه تست استفاده شود. در پایان، مدل بایستی بر روی هر مجموعه که موجود است اعتبارسنجی شده باشد.
7. برای به دست آوردن امتیاز نهایی، میانگین نتایجی در مرحله 6 مدنظر گرفته شود.
برای انجام اعتبارسنجی متقاطع k Fold می توانید از sklearn.model_selection.KFold استفاده کنید.
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]
به طور کلی همیشه بهتر است از تکنیک k-Fold به جای روش برگزاری استفاده شود. از آنجایی که آموزش و تست بر روی تمامی بخشهای مختلف مجموعه داده انجام می شود الگوریتم k-Fold نتیجه پایدارتر و قابل اعتمادتری به دست میدهد. افزایش تعداد foldها برای آزمایش مدل در مجموعههای مختلف میتوان میزان امتیاز کلی را بهبود بخشید.
با این حال، روش K-Fold یک نقطه ضعف دارد. افزایش k منجر به آموزش مدلهای بیشتر می شود و فرآیند آموزش ممکن است واقعاً هزینهبر و زمانبر باشد.
اعتبارسنجی متقابل یکطرفه (LOOCV) یک مورد دقیقتر از روش اعتبارسنجیK-Fold است، بصورتی که k برابر با n یعنی تعدادنمونه های مجموعه داده است. در چنین حالتی k-Fold معادل تکنیک Leave one out است.
الگوریتم تکنیک LOOCV:
1. یک نمونه از مجموعه داده را انتخاب شود که مجموعه تست خواهد بود
2. نمونه باقیمانده مجموعه آموزشی خواهد بود
3. مدل بر روی مجموعه آموزشی، آموزش داده میشود. در هر تکرار، یک مدل جدید باید آموزش داده شود
4. در مجموعه تست ارزیابی شود.
5. نتیجه ارزیابی ذخیره شود
6. مراحل 1 تا 5 n بار تکرار شود، همانطور که برای n نمونه، n مجموعه آموزشی و تست متفاوت داریم.
7. برای به دست آوردن امتیاز نهایی، میانگین نتایج در مرحله 5 به دست آورده شود.
برای LOOCV همچنین دارای یک روش داخلی است. می توان آن را در کتابخانهmodel_selection - sklearn.model_selection.LeaveOneOut پیدا کرد.
import numpy as np
from sklearn.model_selection import LeaveOneOut
X = 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]
بزرگترین مزیت اعتبارسنجی متقابل یکطرفه این است که داده های زیادی هدر نمیرود. فقط از یک نمونه از کل مجموعه داده به عنوان یک مجموعه تست استفاده میشود، در حالی که بقیه مجموعه آموزشی است. اما در مقایسه با k-Fold ، LOOCV نیاز به ساخت n مدل به جای k مدل دارد که تعداد نمونه در مجموعه داده بوده و بسیار بیشتر از k است. این بدان معناست که LOOCV از نظر محاسباتی هزینه بر تر از از k-Fold است و ممکن است زمان زیادی طول بکشد تا اعتبارسنجی متقابل مدل با استفاده از LOOCVانجام شود.
بنابراین، جامعه علوم داده یک قاعده کلی مبتنی بر شواهد تجربی و تحقیقات مختلف دارد که نشان میدهد اعتبار سنجی متقاطع 5 یا 10 برابری باید بر LOOCV ترجیح داده شود.
اعتبارسنجی متقابل خارج از صفحه(LpOC) مشابه روش اعتبارسنجی یکطرفه است زیرا تمام مجموعههای آموزشی و تست ممکن را با استفاده از pنمونه به عنوان مجموعه آزمایشی ایجاد میکند. تمام موارد ذکر شده در مورد LOOCV و برای LpOC درست است.
با این وجود، شایان ذکر است که بر خلافLOOCV و k-Fold مجموعههای تست برای LpOC اگر p بالاتر از 1 باشد، همپوشانی دارند.
الگوریتم تکنیک LpOC:
1. نمونه های p را از مجموعه داده انتخاب کنید که مجموعه آزمایشی خواهد بود.
2. n - p نمونه باقیمانده مجموعه آموزشی خواهد بود.
3. مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار، یک مدل جدید باید آموزش داده شود
4. در مجموعه تست ارزیابی شود.
5. نتیجه ارزیابی ذخیره شود
6. مراحل 2 تا 5 بار را تکرار شود
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]
گاهی اوقات ممکن است با عدم تعادل زیادی در تابع هدف[12]در مجموعه داده مواجه شویم. به عنوان مثال، در مجموعه دادههای مربوط به قیمت ساعتهای مچی، ممکن است تعداد بیشتری از ساعتهای مچی قیمت بالایی داشته باشند. در مورد دستهبندی، در مجموعه دادههای گربهها و سگها ممکن است تغییر زیادی به سمت طبقه سگ وجود داشته باشد.
k-Fold دستهای گونه ای از روش استاندارد k-Fold است منتهی به گونه ای طراحی شده است که در چنین مواردی که تابع هدف تعادل ندارد موثر باشد.
این روش به صورت زیر عمل می کند. K-Fold دستهای مجموعه داده را بر روی k دسته تقسیم می کند به طوری که هر foldتقریباً دارای درصد مشابهی از نمونههای هر کلاس هدف به عنوان مجموعه کامل است. در مورد رگرسیون، k-Fold لایهای اطمینان حاصل می کند که میانگین تابع هدف تقریباً در همه دستهها برابر است.
الگوریتم تکنیک k-Fold دستهای:
1. تعدادی k دسته را انتخاب کنید
2. مجموعه داده را به k برابر تقسیم کنید. هر فولد باید تقریباً دارای درصد مشابهی از نمونههای هر کلاس تابع هدف در مجموعه کامل باشد.
3. k – 1 باقیمانده مجموعه تست خواهد بود.
4. مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار یک مدل جدید باید آموزش داده شود
5. در مجموعه تست ارزیابی شود.
6. نتیجه ارزیابی ذخیره شود
7. مراحل را 3 تا 6 هزار بار تکرار کنید. هر بار از دسته باقی مانده به عنوان مجموعه تست استفاده کنید. در پایان، شما باید مدل را روی هر دسته که دارید اعتبارسنجی کرده باشید.
8. برای به دست آوردن امتیاز نهایی، میانگین نتایج در مرحله 6 به دست آورده شود.
همانطور که ممکن است متوجه شده باشید، الگوریتم تکنیک k Foldدستهای مشابه K-Folds استاندارد است. نیازی به کدنویسی اضافی نیست زیرا این روش همه کارهای لازم را برای شما انجام می دهد.
k-Fold دستهای همچنین یک متد داخلی در sklearn دارد یعنی:sklearn.model_selection.StratifiedKFold.
import numpy as np
from sklearn.model_selection import StratifiedKFold
X = 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]
تمام ویژگیهای ذکرشده روشهای Fold برای تکنیک k-Fold دستهای صادق نیز است. هنگام انتخاب بین روش های مختلف اعتبارسنجی، اطمینان حاصل شود که از روش مناسب استفاده میشود. به عنوان مثال، در زمانی که مدل شما دچار مشکل تعادل در آموزش داده شده است، دلیل آن این است که از روشk-Fold برای اعتبارسنجی مدلی که بر روی مجموعه داده استفاده شده است. برای جلوگیری از چنین مواردی همیشه باید یک تجزیه و تحلیل داده های اکتشافی مناسب روی داده ها انجام شود.
اعتبارسنجی متقابل k-Fold مکرر یا اعتبار سنجی به روش زیرنمونهبرداری تصادفی احتمالاً قویترین تکنیک اعتبارسنجی در این مقاله است که نوعی از k-Fold بوده اما در k-Folds مکرر، k بیانگر تعداد دستهها نیست، بلکه تعداد دفعاتی است که ما مدل را آموزش خواهیم داد.
ایده کلی این است که در هر تکرار، نمونههایی را بهطور تصادفی از سرتاسر مجموعه داده به عنوان مجموعه تست انتخاب میکنیم. به عنوان مثال، اگر تصمیم بگیریم که 20درصد از مجموعه داده ها مجموعه تست باشند، 20 درصد نمونه به طور تصادفی انتخاب می شوند و 80 درصد بقیه به مجموعه تست تبدیل می شوند.
الگوریتم تکنیک k-Foldمکرر
1. عدد k را انتخاب کنید برای اینکه مشخص شود چند بار مدل آموزش داده خواهد شد
2. تعدادی نمونه را انتخاب کنید که مجموعه تست خواهد بود
3. مجموعه داده را تقسیم کنید
4. روی مجموعه آموزشی عمل یادگیری را انجام دهید. در هر تکرار اعتبارسنجی ، یک مدل جدید باید آموزش داده شود.
5. در مجموعه تست ارزیابی کنید
6. نتیجه اعتبارسنجی را ذخیره کنید
7. مراحل 3 را 6 k بار تکرار کنید
8. برای به دست آوردن امتیاز نهایی، میانگین نتایج در مرحله 6 را به دست آوردید.
تکرار k-Fold مزایای واضحی نسبت به روش استاندارد K-Fold دارد. اولا، نسبت تقسیم آموزش/تست به تعداد تکرارها بستگی ندارد. دوم می توان نسبت های منحصر به فردی را برای هر تکرار تنظیم کرد. سوم، انتخاب تصادفی نمونهها از مجموعه داده، k-Fold مکرر را برای انتخاب قاطع تر سوق میدهد.
با این حال، برخی از معایب وجود دارد. روش استاندارد k Fold تضمین میکند که مدل بر روی همه نمونهها آزمایش میشود، در حالی که k-Fold مکرر بر اساس تصادفیسازی است که به این معنی است که برخی از نمونهها ممکن است هرگز برای قرار گرفتن در مجموعه آزمایشی انتخاب نشوند. در همین حال برخی از نمونه ها ممکن است چندین بار انتخاب شوند.
Sklearn به شما در پیاده سازی اعتبارسنجیk Fold مکرر کمک می کند. فقط ازsklearn.model_selection.RepeatedKFold استفاده کنید. در اجرای sklearn این تکنیک باید تعداد بستههایی که می خواهید داشته باشید (n_splits) و تعداد دفعاتی که تقسیم انجام می شود (n_repeats) را تنظیم کنید. این تضمین می کند که در هر تکرار بستههای مختلفی خواهید داشت.
import numpy as np
from sklearn.model_selection import RepeatedKFold
X = 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]
برخلاف سایر تکنیکهای اعتبارسنجی که برای ارزیابی کیفیت یک الگوریتم طراحی شدهاند، k-Foldتودرتو محبوبترین راه برای تنظیم پارامترهای یک الگوریتم است.
تصور کنید که ما یک پارامتر p داریم که معمولاً به الگوریتم پایه ای که ما در حال اعتبارسنجی آن هستیم بستگی دارد. به عنوان مثال، برای رگرسیون لجستیک، ممکن است این پارامتر جریمه باشد که برای تعیین نرم در جریمه استفاده می شود.
الگوریتم تکنیک k-Fold تودرتو:
1. k را انتخاب کنید - تعداد بستهها، به عنوان مثال 10 - فرض کنیم این عدد را انتخاب کرده ایم
2. یک پارامتر p را انتخاب کنید. فرض کنید الگوریتم ما رگرسیون لجستیک و p پارامتر جریمه باشد
p = {'l1', 'l2', 'elasticnet', 'none'}
3. مجموعه داده را به 10 بسته تقسیم کنید و یکی از آنها را برای تست کنار بگذارید
4. یکی از بستههای آموزشی را برای ارزیابی کنار بگذارید
5. برای هر مقدار p روی 8 بسته آموزشی باقیمانده آموزش دهید و روی بسته ارزیابی را مورد ارزیابی قرار دهید. اکنون 4 اندازه گیری دارید.
6. مراحل 4 و 5 را 9 بار تکرار کنید. بسته آموزشی را عوض کنید به گونهای که بسته ازیابی تغییرکنداست. اکنون اندازه گیری 9 * 4 دارید
7. از مرحله 2 این کار ار 10 بار تکرار کنید و از هر بسته به نوبت به عنوان بسته تست استفاده کنید.
8. میانگین و انحراف معیار اندازه گیری ارزیابی را در 10 بسته تست ذخیره کنید.
9. الگوریتمی بهترین عملکرد را دارد که بهترین میانگین را در بین عملکرد نمونه خارج شده در 10 بسته تست داشته باشد.
این تکنیک از نظر محاسباتی گران است زیرا در طول مراحل 1 تا 10 تعداد زیادی مدل باید آموزش و ارزیابی شوند. با این حال، اعتبارسنجی k Foldتودرتو معمولا مورد استفاده قرار میگیرد و ممکن است در چندین کابرد یادگیری ماشین واقعاً مؤثر باشد.
متأسفانه، هیچ روش داخلی درsklearn وجود ندارد که بتواند k-Fold تودرتو را برای شما انجام دهد. این لحظه ای است که شما باید یا گوگل کنید و پیاده سازی شخصی را پیدا کنید یا خودتان آن را کدنویسی کنید.
اعتبارسنجی متقابل کامل کم استفاده ترین تکنیک اعتبارسنجی است. ایده کلی این است که عدد k را که طول مجموعه آموزشی است را انتخاب میکنیم و روی هر تقسیم ممکن که شامل k نمونه در مجموعه آموزشی است اعتبار سنجی می کنیم.
مقدار آن تقسیمها را میتوان به صورت ?محاسبه کرد که n طول مجموعه داده است. اگر k بیش از 2 باشد، باید مدل خود را بارها آموزش دهیم که همانطور که قبلاً متوجه شدیم از نظر زمان و محاسبات گران قیمت است.
به همین دلیل است که از اعتبارسنجی کامل یا در تحقیقات نظری استفاده می شود و یا مورد استفاده قرار میگیرد که فرمول مؤثری که به حداقل رساندن محاسبات وجود داشته باشد.
الگوریتم اعتبار سنجی متقابل کامل:
1. یک عدد k را انتخاب کنید - طول مجموعه آموزشی
2. مجموعه داده را تقسیم کنید
3. روی مجموعه آموزشی عمل یادگیری را انجام دهید کنید
4. در مجموعه تسس ارزیابی کنید
5. نتیجه اعتبارسنجی را ذخیره کنید
6. مراحل 2 تا 5 ?را تکرار کنید
7. برای به دست آوردن امتیاز نهایی، میانگین نتایج در مرحله 5 را به دست آوردید
بیشتر تکنیک های اعتبارسنجی متقابل ذکر شده در بالا به طور گسترده در یادگیری ماشین استفاده می شود. مهم است که به خاطر داشته باشید که استفاده از تکنیک اعتبارسنجی مناسب ممکن است باعث صرفه جویی شما در زمان شود و حتی به انتخاب بهترین مدل برای کار کمک کند.
این بدان معناست که اولاً بهتر است همیشه مدل را اعتبارسنجی کنید و ثانیاً باید یک روش اعتبار سنجی مرتبط را انتخاب کنید. بنابراین، دانستن مزایا و معایب تکنیکهای اعتبارسنجی متقابل حیاتی است.
شایان ذکر است که اگر مدل را اعتبار سنجی کنید، همیشه باید راهنمای مدل را بررسی کنید زیرا برخی از الگوریتمهای یادگیری ماشین به عنوان مثال، CatBoost روشهای اعتبارسنجی خود را دارند. شما ممکن است آنها را مرتبط به وظیفه برنامه یادگیری ماشین خود بیابید و از آنها به جای متدهایsklearn استفاده کنید.
به طور کلی، همانطور که ممکن است متوجه شده باشید، بسیاری از تکنیکهای اعتبارسنجی دارای روشهای sklearn هستند. به شدت توصیه میشود که از آنها استفاده کنید زیرا این روش ها در زمان زیادی برای کارهای پیچیدهتر صرفه جویی میکنند.
اعتبار سنجی متقاطع در یادگیری عمیق(DL) ممکن است کمی مشکل باشد زیرا اکثر تکنیک های اعتبارسنجی نیاز به آموزش مدل حداقل چند بار دارند.
در یادگیری عمیق، معمولاً به دلیل هزینههای مرتبط با آموزش مدلهای مختلف، از اعتبارسنجی اجتناب میشود. به جای انجام k-Fold یا سایر تکنیکهای اعتبارسنجی، ممکن است از یک زیرمجموعه تصادفی از دادههای آموزشی خود به عنوان روش برگزاری برای اهداف اعتبارسنجی استفاده شود.
به عنوان مثال، کتابخانه یادگیری عمیقKeras به شما امکان می دهد یکی از دو پارامتر را برای تابع fit که آموزش را انجام می دهد، ارسال کنید.
validation_split درصدی از داده هایی که باید برای اعتبار سنجی نگهداری شوند
validation_data چند عدد از (X, y) که باید برای اعتبارسنجی استفاده شود. این پارامتر پارامترvalidation_split را نادیده می گیرد، به این معنی که شما می توانید تنها یکی از این پارامترها را در یک زمان استفاده کنید.
همین رویکرد در آموزش های رسمی سایر فریمورک های DL مانند PyTorch و MxNet استفاده می شود. آنها همچنین پیشنهاد می کنند مجموعه داده را به سه بخش تقسیم کنید: آموزش، اعتبار سنجی و تست.
آموزش – بخشی از مجموعه داده برای آموزش
اعتبار سنجی - بخشی از مجموعه داده برای اعتبارسنجی در حین آموزش
تست - بخشی از مجموعه داده برای اعتبار سنجی نهایی مدل
با این حال، اگر مجموعه داده کوچک است (شامل صدها نمونه) می توانید از اعتبارسنجی متقابل در وظایف یادگیری عمیق استفاده کنید. در این مورد، یادگیری یک مدل پیچیده ممکن است یک کار بی ربط باشد، بنابراین مطمئن شوید که کار را بیشتر پیچیده نکنید.
شایان ذکر است که گاهی اوقات انجام اعتبارسنجی متقابل ممکن است کمی مشکل باشد.
به عنوان مثال، اشتباه منطقی هنگام تقسیم مجموعه داده به سادگی صورت میگیرد که ممکن است منجر به یک اعتبارسنجی غیرقابل اعتماد شود.
نکاتی را که باید هنگام اعتبارسنجی متقابل یک مدل مد نظر داشته باشید شامل موارد:
· هنگام تقسیم داده ها منطقی عمل کنید (آیا روش تقسیم منطقی است)
· از روش اعتبارسنجی مناسب استفاده کنید (آیا این روش برای مورد استفاده من قابل اجرا است)
· هنگام کار با سری های زمانی، گذشته را ارزیابی نکنید و مد نظر قرار ندهید(به اولین نکته مراجعه کنید)
· هنگام کار با داده های پزشکی یا مالی، به یاد داشته باشید که شخصا تقسیمبندی کنید. از قرار دادن داده یک نفر هم در آموزش و هم در مجموعه تست خودداری کنید زیرا ممکن است به عنوان داده لو رفته در نظر گرفته شود
· هنگام برش تکهها از تصاویر بزرگتر، به یاد داشته باشید که شناسه تصویر بزرگ را نیز تقسیم کنید.
البته، نکات از کاری به کار دیگر متفاوت است و پوشش همه آنها تقریبا غیرممکن است. به همین دلیل است که انجام یک تجزیه و تحلیل داده های اکتشافی جامد قبل از شروع اعتبارسنجی متقابل یک مدل همیشه بهترین روش و کار است.
اعتبار سنجی متقابل ابزار قدرتمندی است. هر کارشناس داده باید با آن آشنا باشد. در واقعیت، شما نمی توانید پروژه را بدون اعتبارسنجی متقابل یک مدل به پایان برسانید.
به نظر من بهترین تکنیک های اعتبارسنجیk-Fold تودرتو و k-Fold استاندارد هستند. شخصاً از آنها در وظیفه تشخیص تقلب استفاده کردم. K-Fold تودرتو و همچنین GridSeachCV به من کمک کردند تا پارامترهای مدل خود را تنظیم کنم. از طرف دیگر، k-Fold برای ارزیابی عملکرد مدل من استفاده شد.
در این مقاله، ما متوجه شدیم که اعتبار سنجی متقابل چیست، چه تکنیک های اعتبارسنجی وجود دارد، و چگونه آنها را پیاده سازی کنیم. در آینده الگوریتم های یادگیری ماشین قطعاً حتی بهتر از امروز عمل خواهند کرد. با این حال، اعتبار سنجی متقابل همیشه برای پشتیبانگیری از نتایج مورد نیاز است.
امیدواریم با این اطلاعات، مشکلی در تنظیم CV برای پروژه بعدی یادگیری ماشین خود نداشته باشید!
منابع
https://neptune.ai/blog/cross-validation-in-machine-learning-how-to-do-it-right
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