اعتبار سنجی متقابل (Cross-Validation) در یادگیری ماشینی: چگونه آن را درست انجام دهیم؟
در یادگیری ماشین (ML)، جامعیت و عمومیت معمولا به توانایی یک الگوریتم در تأثیرگذاری روی ورودیهای مختلف اشاره دارد؛ به این معنی که مدل یادگیری ماشین توانایی عملکرد خود را در برابر ورود دادههای جدید در یک توزیع دادهی آموزشی از دست نمیدهد.
برای انسان، عمومیتبخشی و تعمیم، طبیعیترین کار ممکن است. ما میتوانیم بهصورت آنی (در ذهنمان) دستهبندی و طبقهبندی انجام دهیم. بهطور مثال، ما بدون شک یک سگ را تشخیص میدهیم حتی اگر قبل از آن، چنین نژادی را ندیده باشیم. با این حال چنین مسالهای میتواند برای یک مدل یادگیری ماشین کاملا چالش برانگیز باشد. به همین دلیل بررسی توانایی الگوریتم در عمومیتبخشی کار مهمی است که در زمان ساخت مدل نیاز به توجه زیادی دارد.
برای انجام چنین کاری از روش اعتبارسنجی متقابل (CV) استفاده میکنیم.
موضوعاتی که در این مقاله به آنها خواهیم پرداخت، عبارتند از:
- اعتبارسنجی متقابل چیست: تعریف، هدف از استفاده و روشها.
- روشهای متفاوت CV:, Stratified , Leave-p-out, Leave-one-out, k-folds, k-folds ,hold-out Complete CV ,Nested k-folds, Repeated k-folds
- چگونه از این روشها استفاده کنیم؟ sklearn
- اعتبارسنجی متقابل در یادگیری ماشین: sklearn, CatBoost
- اعتبارسنجی متقابل در یادگیری عمیق: Keras, PyTorch, MxNet
- بهترین تمرینها و نکات: سریهای زمانی، دادههای پزشکی و اقتصادی، تصاویر
-
اعتبارسنجی متقابل چیست؟
اعتبارسنجی متقابل یک روش برای ارزیابی مدل یادگیری ماشین و تست کردن کارایی آن است. CVمعمولا در کارهای درخواستی ML به کار برده میشود. این روش کمک میکند که مدل مناسب برای مدل کردن پیشبینی مساله خاص مقایسه و انتخاب شود.
درک و فهمیدن روش CV راحت است، پیادهسازی آن راحت است و نسبت به سایر روشها که در شمارش امتیازات مدل استفاده میشود، بایاس کمتری دارد. همهی اینها، روش اعتبارسنجی متقابل را یک ابزار قوی در جهت انتخاب بهترین مدل برای انتخاب یک کار مشخص میسازد.
برای مدل کردن اعتبارسنجی متقابل روشهای متنوع زیادی ممکن است استفاده شود؛ با اینکه همهی آنها یک الگوریتم مشابه دارند:
1. تقسیم کردن مجموعه دادهها به دو بخش: بخشی برای آموزش و بخش دیگر برای تست
2. آموزش مدل روی مجموعه دادههای آموزشی
3. اعتبارسنجی مدل روی مجموعه دادههای تست
4. تکرار یک یا دوبار مراحل 1-3 . این تعداد بستگی به روش CV دارد که استفاده میکنید.
همانطور که میدانید، روشهای CV بسیاری وجود دارد. بعضی از آنها بهصورت متداول به کار گرفته میشوند و بعضی دیگر فقط در تئوری کار می کنند.
روشهای اعتبارسنجی متقابلی که در این مقاله به آنها خواهیم پرداخت، عبارتند از:
روش اعتبارسنجی متقابل 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 importtrain_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 روش جدیدی را برای تقسیم مجموعه داده معرفی میکند برای غلبه بر «تنگنای فقط یک تست» کمک میکند.
روش الگوریتم k-Fold:
1. عددی را برای k انتخاب کنید. معمولا k عددی بین 5 و 10 است اما میتوانید هر عددی کمتر از طول مجموعه داده را انتخاب کنید.
2. مجموعه داده را به k قسمت مساوی (در صورت امکان) تقسیم کنید. (به آنها folds گفته می شود)
3. 1-Kدسته یا fold را که مجموعه آموزشی خواهد بود، انتخاب کنید. دستههای باقیمانده مجموعه تست خواهد بود.
4. مدل را روی مجموعه آموزشی، آموزش دهید. در هر تکرار در اعتبارسنجی متقابل، باید یک مدل جدید مستقل از مدل آموزشی که در مرتبهی قبل آموزش دیده را آموزش دهید.
5. روی مجموعه تست ارزیابی انجام دهید.
6. نتیجهی ارزیابی را ذخیره کنید.
7. مراحل 3-6 را k بار تکرار کنید. هر بار یک دسته باقیمانده را بهعنوان دادهی تست در نظر بگیرید. در نهایت، شما با همه دستههایی که دارید مدل را ارزیابی کردهاید.
8. برای به دست آوردن امتیاز نهایی، نتایجی را که در مرحله 6 به دست آوردید میانگین بگیرید.
اعتبار سنجی متقابل به روش k- fold
برای انجام اعتبارسنجی متقابل 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]
به طور کلی همیشه بهتر است بهجای روش Hold-out از روش k- fold استفاده شود. بهطور دقیقتر، مقایسهی نتایجی که از روش k- fold به دست میآید درستتر و قابل اعتمادتر است زیرا تست و آموزش روی چندین بخش مختلف از مجموعه داده اجرا میشود. حتی میتوانیم تعداد دستهبندی یا fold های تست مدل را روی زیرمجموعه دادهها بیشتر کنیم، تا کل امتیاز را به دست آوریم.
همچنان روش k- fold معایبی دارد. افزایش k باعث آموزش مدلهای بیشتری میشود و روند آموزش ممکن است واقعا گران و زمان بر باشد.
Leave-one-out
اعتبارسنجی متقابل Leave-one-out (LOOCV) شدت یافتهی مورد k-Fold CV است. تصور کنید k برابر با n باشد که n تعداد نمونه های مجموعه داده است.
تکنیک الگوریتم LOOCV
1. یک نمونه از مجموعه داده انتخاب کنید که مجموعه تست باشد.
2. 1-nنمونه باقیمانده را در مجموعه آموزشی قرار دهید.
3. مدل را روی مجموعه آموزشی، آموزش دهید. هر بار باید یک مجموعه جدید آموزش ببیند.
4. آن را روی داده تست ارزیابی کنید.
5. نتیجه ارزیابی را ذخیره کنید.
6. مراحل 1-5 را nبار تکرار کنید زیرا برای n نمونه ما n مجموعه آموزشی و تست متفاوت داریم.
7. برای به دست آوردن امتیاز نهایی، میانگین نتایج به دست آمده در مرحله 5 را محاسبه کنید.
اعتبارسنجی متقابل Leave-one-out (LOOCV)
sklearn برای 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]
بزرگترین مزیت اعتبارسنجی متقابل Leave-one-out این است که داده زیادی را به هدر نمیدهد. ما فقط یک نمونه از کل مجموعه داده را بهعنوان داده تست در نظر میگیریم؛ درحالیکه بقیه داده، آموزشی است. اما وقتی با k-Fold CV مقایسه میشود، LOOCV نیاز است به جای k مدل n مدل ساخته شود. به این معنی که LOOCV از نظر محاسباتی گرانتر از k-Fold است، ممکن است زمان زیادی برای اعتبارسنجی متقابل مدل با استفاده از LOOCV نیاز باشد.بنابراین، جامعیت علم داده یک قاعدهی کلی بر اساس شواهد تجربی و تحقیقات متفاوت دارد که پیشنهاد میدهد که اعتبارسنجی متقابل 5-Fold یا10-Fold بر روشLOOCV ترجیح دارد.
Leave-p-out
اعتبارسنجی متقابل Leave-p-out (LpOC) شبیه Leave-one-out CV است؛ زیرا تمام مجموعههای آموزشی و تست ممکن را با استفاده از pنمونه، بهعنوان مجموعه آزمایشی ایجاد می کند. تمام موارد گفته شده در مورد LOOCV برایLpOC هم درست است.
با این حال قابل ذکر است که برخلاف مجموعه تست LOOCV و k-Fold برای LpOCاگر p بزرگتر از 1 باشد، همپوشانی دارد.
الگوریتم روشLpOC :
1- p نمونه را از مجموعه داده انتخاب کنید که مجموعه تست باشد.
2- n – p نمونه باقیمانده مجموعه آموزشی خواهد بود.
3- مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار، باید یک مدل جدید آموزش داده شود.
4- مجموعه تست را ارزیابی کنید.
5- نتیجه ارزیابی را ذخیره کنید.
6- مراحل 2 تا 5 Cnp بار را تکرار کنید.
7- برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 5 به دست آوردید، را محاسبه کنید.
میتوانید Leave-p-out CV را با استفاده – sklearn.model_selection.LeavePOut اجرا کنید.
import numpy as np
from sklearn.model_selection importLeavePOut
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 inlpo.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 قوی است.
k-Fold طبقهبندی شده
گاهی ممکن است با عدم تعادل زیادی در مقدار هدف در مجموعه داده مواجه شویم. به عنوان مثال، در مجموعه دادهی مربوط به قیمت ساعت مچی، ممکن است تعداد بالاتری از ساعتهای مچی قیمت زیادی داشته باشند. در مورد دستهبندی، در مجموعه دادههای گربه و سگ ممکن است گرایش زیادی به سمت دسته سگ وجود داشته باشد.
K-Fold طبقه بندی شده نوع دیگری از روش استاندارد K-Fold CV است که طراحی شده است تا در چنین مواردی از عدم تعادل هدف موثر واقع شود.
اینطور عمل میکند: K-Fold طبقه بندی شده مجموعه داده را روی K دسته طبقهبندی میکند به طوری که هر دسته تقریباً دارای همان درصدی باشد که نمونه های هر کلاس هدف به نسبت کل مجموعه دارد. در مورد رگرسیون، k-Fold طبقهبندی شده این اطمینان را می دهد که میانگین مقدار هدف تقریباً در همهی دستهها مساوی است.
الگوریتم روش K-Fold طبقه بندی شده به این صورت است:
1- تعداد K دسته را انتخاب کنید.
2- مجموعه دادهها را در K دسته تقسیمبندی کنید؛ به طوری که هر دسته تقریباً دارای همان درصدی باشد که نمونههای هر کلاس هدف به نسبت کل مجموعه دارد.
3- 1- K دسته را برای مجموعه آموزشی انتخاب کنید. دسته باقیمانده بهعنوان داده تست استفاده میشود.
4- مدل را روی مجموعه آموزشی آموزش دهید. در هر بار، یک مدل جدید باید آموزش داده شود.
5- با مجموعه تست ارزیابی انجام دهید.
6- نتیجه ارزیابی را ذخیره کنید.
7- مراحل 6-3 را K بار تکرار کنید. هر بار دستهی باقی مانده را برای مجموعه تست استفاده کنید. در پایان شما باید مدل را روی همهی مجموعهها ارزیابی کرده باشید.
8- برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 6 به دست آوردید را محاسبه کنید.
همانطور که ممکن است دقت کرده باشید، الگوریتم روش طبقهبندی شده k-Fold مشابه روش K-Fold استاندارد است. شما نیازی به کدنویسی اضافی ندارید زیرا این روش همه کارهای لازم را برای شما انجام خواهد داد.
k-Foldطبقهبندی شده یک متد داخلی در sklearn دارد. – sklearn.model_selection.StratifiedKFold
import numpy as np
from sklearn.model_selection importStratifiedKFold
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 inskf.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 تعداد دستهها نیست بلکه تعداد دفعاتی است که ما مدل را آموزش خواهیم داد.
ایده کلی این است که در هر تکرار، بهطور تصادفی نمونههایی را از تمام مجموعه داده به عنوان مجموعه تست انتخاب میکنیم. به عنوان مثال، اگر تصمیم بگیریم که 20٪ از مجموعه داده را برای مجموعه تست در نظر بگیریم، 20٪ نمونهها به طور تصادفی انتخاب شوند و 80٪ مابقی مجموعه آموزشی در نظر گرفته شوند.
الگوریتم روش Repeated k-Fold:
1- k – a را انتخاب کنید تا مدل آموزش داده شود.
2- تعداد a نمونه را انتخاب کنید که مجموعه تست قرار بگیرد.
3- مجموعه داده را تقسیم کنید.
4- مجموعه آموزشی را مورد آموزش قرار دهید. در هر تکرار اعتبارسنجی متقابل، یک مدل جدید باید آموزش داده شود.
5- مجموعه تست را مورد ارزیابی قرار دهید.
6- نتیجه ارزیابی را ذخیره کنید.
7- مراحل را 3-6 را k بار تکرار کنید.
8- برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 6 به دست آوردید را محاسبه کنید.
Repeated k-Fold
K-Fold تکرارشونده مزایای واضحی نسبت به k-Fold CV استاندارد دارد. اول، نسبت تقسیم آموزش/تست به تعداد تکرارها بستگی ندارد. دوم، حتی می توانیم نسبتهای خاصی را برای هر تکرار مشخص کنیم. سوم، انتخاب تصادفی نمونه از مجموعه دادهها، 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 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]
روش 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 دسته تقسیم کنید و یکی از آنها را برای تست در نظر بگیرید.
4- یکی از دستههای آموزشی را برای اعتبارسنجی رزرو کنید.
5- برای هر مقدار p روی 8 دسته آموزشی باقیمانده آموزش دهید و روی دسته اعتبارسنجی ارزیابی کنید. اکنون 4 اندازهگیری دارید.
6- مراحل 4-5 را 9 بار تکرار کنید. طوری دسته آموزشی را بچرخانید تا دسته ارزیابی قرار گیرد. اکنون 4 * 9 اندازه گیری دارید.
7- p را انتخاب کنید که میانگین خطای آموزش را روی 9 دسته به حداقل می رساند. از آن p برای ارزیابی روی مجموعه تست استفاده کنید.
8- از مرحله 2 ، 10 بار تکرار کنید و از هر فولد به نوبت به عنوان فولد تست استفاده کنید.
9- میانگین و انحراف معیار اندازه گیری ارزیابی را در 10 فولد تست ذخیره کنید.
10- الگوریتمی که بهترین عملکرد را داشت، الگوریتمی بود که بهترین میانگین عملکرد خارج از نمونه را در 10 فولد آزمایشی داشت.
این روش از نظر محاسباتی هزینهبر است؛ زیرا در طول مراحل 1 تا 10 تعداد زیادی مدل باید آموزش و ارزیابی شوند. با این حال، Nested k-Fold CV معمولا استفاده می شود و ممکن است در چندین کار ML واقعاً مؤثر باشد.
متأسفانه، هیچ روش داخلی در sklearn وجود ندارد که بتواند CV Nested k-Fold را برای شما انجام دهد. این لحظه ای است که شما باید یا گوگل کنید و پیاده سازی شخصی را پیدا کنید یا خودتان آن را کدنویسی کنید.
Complete Cross-Validation
CV کامل کم استفاده ترین تکنیک CV است. ایده کلی این است که ما یک عدد k - طول مجموعه آموزشی را انتخاب می کنیم و روی هر تقسیم ممکن شامل k نمونه در مجموعه آموزشی سنجی می کنیم.
مقدار آن تقسیمها را میتوان به صورت ترکیب n از k محاسبه کرد که n طول مجموعه داده است. اگر k بالاتر از 2 باشد، باید مدل خود را چندین بار آموزش دهیم که همانطور که قبلاً متوجه شدیم از نظر زمان فرآیند گران قیمت و از جنبه محاسبات پیچیده است.
به همین دلیل است که از CV کامل یا در تحقیقات نظری استفاده می شود و یا در صورت وجود فرمول مؤثری که به حداقل رساندن محاسبات کمک می کند.
الگوریتم اعتبار سنجی متقاطع کامل:
1- یک عدد k را انتخاب کنید ( طول مجموعه آموزشی).
2- مجموعه داده را تقسیم کنید.
3- روی مجموعه آموزشی تمرین کنید.
4- در مجموعه تست اعتبار سنجی کنید.
5- نتیجه اعتبارسنجی را ذخیره کنید.
6- مراحل 2 تا 5 را به اندازه ترکیب n از k تکرار کنید.
7- برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 5 به دست آوردید، محاسبه نمایید.
اعتبار سنجی متقابل در یادگیری ماشینی
بیشتر تکنیک های اعتبار سنجی متقابل ذکر شده در بالا به طور گسترده در ML استفاده می شود. مهم است که به خاطر داشته باشید که استفاده از تکنیک CV مناسب ممکن است در زمان شما صرفه جویی کند و به انتخاب بهترین مدل برای کار کمک کند.
این بدان معناست که اول این که بهتر است همیشه مدل را اعتبارسنجی متقابل کنید و دوم این که باید یک روش CV مربوطه را انتخاب کنید. بنابراین، دانستن مزایا و معایب تکنیک های اعتبارسنجی متقابل حیاتی است.
شایان ذکر است که اگر میخواهید مدل را اعتبار سنجی متقابل کنید، همیشه باید دفترچه راهنمای مدل را بررسی کنید زیرا برخی از الگوریتمهای ML، به عنوان مثال، CatBoost روشهای CV داخلی خود را دارند. ممکن است آنها را مربوط به وظیفه ML خود بیابید و به جای روش های داخلی sklearn از آنها استفاده کنید.
به طور کلی، همانطور که ممکن است متوجه شده باشید، بسیاری از تکنیکهای CV دارای روشهای داخلی sklearn هستند. من به شدت توصیه می کنم از آنها استفاده کنید زیرا این روش ها در زمان برای کارهای پیچیده تر صرفه جویی زیادی می کنند.
اعتبار متقابل در یادگیری عمیق
اعتبار سنجی متقابل در یادگیری عمیق (DL ) ممکن است کمی مشکل باشد زیرا اکثر تکنیک های CV حداقل چند بار نیاز به آموزش مدل دارند.
در یادگیری عمیق، معمولاً به دلیل هزینه های مرتبط با آموزش مدل های مختلف، از CV اجتناب میکنید. به جای انجام k-Fold یا سایر تکنیک های CV، ممکن است از یک زیرمجموعه تصادفی از داده های آموزشی خود به عنوان hold-out برای اهداف اعتبار سنجی استفاده کنید.
به عنوان مثال، کتابخانه یادگیری عمیق Keras به شما امکان می دهد یکی از دو پارامتر را برای تابع fit که آموزش را انجام می دهد، ارسال کنید.
validation_split: درصدی از داده هایی که باید برای اعتبار سنجی hold-out شوند.
validation_data: یک تاپل از (X, y) که باید برای اعتبارسنجی استفاده شود. این پارامتر, validation_split را نادیده می گیرد، به این معنی که شما می توانید تنها یکی از این پارامترها را در یک زمان استفاده کنید.
همین رویکرد در آموزش های رسمی سایر فریمورک های DL مانند PyTorch و MxNet استفاده می شود. آنها همچنین پیشنهاد می کنند مجموعه داده را به سه بخش تقسیم کنید: آموزش، اعتبار سنجی و تست.
آموزش : بخشی از مجموعه داده برای آموزش.
اعتبار سنجی : بخشی از مجموعه داده برای اعتبارسنجی در حین آموزش.
تست : بخشی از مجموعه داده برای اعتبار سنجی نهایی مدل.
با این حال، اگر مجموعه داده کوچک است (شامل صدها نمونه) می توانید از اعتبارسنجی متقابل در وظایف DLاستفاده کنید. در این مورد، یادگیری یک مدل پیچیده ممکن است یک کار بی ربط باشد، بنابراین مطمئن شوید که کار را بیشتر پیچیده نکنید.
بهترین روش ها و نکات
شایان ذکر است که گاهی اوقات انجام اعتبارسنجی متقابل ممکن است کمی مشکل باشد.
به عنوان مثال، اشتباه منطقی هنگام تقسیم مجموعه داده بسیار آسان است که ممکن است منجر به یک CVغیرقابل اعتماد شود.
ممکن است نکاتی را بیابید که باید هنگام اعتبارسنجی متقابل یک مدل همچنانکه در زیر آمده مد نظر داشته باشید:
1- هنگام تقسیم داده ها منطقی باشید (آیا روش تقسیم منطقی است).
2- از روش CV مناسب استفاده کنید (آیا این روش برای مورد استفاده من قابل اجرا است).
3- هنگام کار با سری های زمانی، گذشته را ارزیابی نکنید (به اولین نکته مراجعه کنید).
4- هنگام کار با داده های پزشکی یا مالی، به یاد داشته باشید که آن را بر اساس شخص تقسیم کنید. از داشتن داده برای یک نفر هم در آموزش و هم در مجموعه تست خودداری کنید زیرا ممکن است به عنوان نشت داده در نظر گرفته شود.
5- هنگام برش تکهها از تصاویر بزرگ تر، به یاد داشته باشید که با شناسه تصویر بزرگ تقسیم کنید.
البته، نکات از کار به کار متفاوت است و پوشش همه آنها تقریبا غیرممکن است. به همین دلیل است که انجام یک تجزیه و تحلیل داده های اکتشافی جامد قبل از شروع اعتبارسنجی متقابل یک مدل همیشه بهترین روش است.
نتایج نهایی
اعتبار سنجی متقابل ابزار قدرتمندی است. هر دانشمند داده باید با آن آشنا باشد. در زندگی واقعی، شما نمی توانید پروژه را بدون اعتبارسنجی متقابل یک مدل به پایان برسانید.
به نظر من بهترین تکنیک های CV Nested k-Fold و استاندارد k-Fold هستند. من شخصاً از آنها در پروژه تشخیص تقلب استفاده کردم. K-Fold تودرتو و همچنین GridSeachCV به من کمک کرد تا پارامترهای مدل خود را تنظیم کنم. از طرف دیگر، k-Fold برای ارزیابی عملکرد مدل من استفاده شد.
در این مقاله، ما متوجه شدیم که اعتبارسنجی متقابل چیست، چه تکنیکهای CV در طبیعت وجود دارد و چگونه آنها را پیادهسازی کنیم. در آینده الگوریتم های ML قطعاً حتی بهتر از امروز عمل خواهند کرد. با این حال، اعتبار سنجی متقابل همیشه برای پشتیبان گیری از نتایج شما مورد نیاز است.
امیدواریم با این اطلاعات، مشکلی در تنظیم CV برای پروژه بعدی یادگیری ماشینی خود نخواهید داشت.
منبع: https://neptune.ai/blog/cross-validation-in-machine-learning-how-to-do-it-right