اعتبار سنجی متقاطع (cross validation) در یادگیری ماشین
در یادگیری ماشین (ML)، تعمیم (generalization)، معمولا به توانایی یک الگوریتم در پاسخ دادن به ورودی های مختلف و البته جدید اطلاق میشود و این بدان معناست که عملکرد در یک الگوریتم یادگیری ماشین، عملکرد الگوریتم بر اساس دیتایی که با آن آموزش دیده(train set) قابل ارزیابی درست نیست.
اصل تعمیم برای انسانهااز طبیعی ترین و ساده ترین کارهای ممکن است به عنوان نمونه، انسان حتی اگر یک سگی با نژادی متفاوت را که تا به حال ندیدیه برای اولین بار ببیند، باز هم میشناسد که این همان تعمیم است. اما این کار برای الگوریتم چالش هایی به دنبال دارد و به همین دلیل بررسی الگوریتم در توانایی تعمیم نیازمند توجه زیادی در زمان ساخت مدل است که برای انجام این کار، ما از روش اعتبار سنجی عرضی (CV)استفاده میکنیم.
در این مقاله موارد زیر را پوشش خواهیم داد:
اعتبار سنجی متقابل: تعریف، هدف از استفاده و تکنیکها
تکنیکهای مختلف CV: hold-out, k-folds, Leave-one-out, Leave-p-out, Stratified k-folds, Repeated k-folds, Nested k-folds, Complete CV
نحوه ی استفاده از این تکنیک ها : با استفاده از پکیج Sklearn
اعتبار سنجی متقابل در یادگیری ماشینی
اعتبار سنجی در یادگیری عمیق,…keras, pytorch:
بهترین روشها و نکات از: سریهای زمانی، دادههای پزشکی و مالی، تصاویر
اعتبار ستجی متقابل چیست؟
اعتبارسنجی متقابل تکنیکی برای ارزیابی یک مدل یادگیری ماشین و تست عملکرد آن است. این کار به مقایسه و انتخاب یک مدل مناسب برای مساله مدلسازی کمک میکند.
CV را می توان به راحتی درک کرد، پیادهسازی آن آسان است، و بایاس کمتری برای محاسبه ی ارزیابی مدل، نسبت به روشهای دیگر دارد. تمام این موارد اعتبارسنجی متقابل را به ابزاری قدرتمند برای انتخاب بهترین مدل برای این کار خاص یعنی ارزیابی مدل، تبدیل میکند.
تکنیکهای مختلفی وجود دارند که ممکن است برای اعتبارسنجی متقابل یک مدل مورد استفاده قرار گیرند. با این حال، همه آنها الگوریتم مشابهی دارند:
۱. مجموعه داده را به دو بخش تقسیم کنید: یکی برای آموزش و دیگری برای تست
۲. مدل را با استفاده از داده های trainآموزش دهید.
۳. اعتبارسنجی مدل در مجموعه تست .
۴. مرحله ی ۱ تا ۳ را چندین بار تکرار کنید. تعداد این تکرار به روش CVکه استفاده میکنید بستگی دارد. همانطور که میدانید تکنیکهای زیادی برای CV وجود دارد. برخی از آنها به طور معمول مورد استفاده قرار میگیرند و برخی دیگر تنها بصورت تئوری قابل استفاده هستند.
روش های ارزیابی متقابلی که در این مقاله \وشش دادیم، شامل موارد زیر است:
Hold-out
K-folds
Leave-one-out
Leave-p-out
Stratified K-folds
Repeated K-folds
Nested K-folds
Complete
Holdout
این تکنیک CV، ازسادهترین و رایجترین روشهای CV به شمار میرود .
الگوریتم تکنیک holdout:
۱. مجموعه داده را به دو بخش تقسیم کنید: مجموعه آموزشی و مجموعه تست. معمولا،
۸۰ % مجموعه داده به مجموعه آموزشی و ۲۰ % به مجموعه تست داده میشود، اما شما میتوانید هر گونه تقسیم که برای شما مناسبتر است را انتخاب کنید.
۲. آموزش مدل در مجموعه آموزشی
۳. ارزیابی داده ی تست
۴. ذخیره ی نتیجه ی ارزیابی
ما معمولا از روش 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)
با این حال، روش holdoutیک عیب بزرگ دارد.
به عنوان مثال، ممکن است در یک مجموعه داده ای که توزیع آن یکنواخت نیست، دچار مشکل شویم. به عنوان مثال، مجموعه آموزشی هیچ نشانی از مجموعه ی تست ندارد و ممکن یکی از آنها بسیار سخت و دیگری بسیار راحت باشد که درک این مساله برای الگوریتم مشکل خواهد بود. و یا این واقعیت که مدل خود را فقط یکبار آزمایش کنیم میتواند یک نقطه ی ضعف یا buttle neck برای الگوریتم باشد.
بنابراین با توجه به موارد ذکر شده، شاید نتایج بدست آمده با استفاده از تکنیک holdout چندان قابل اطمینان نباشد.
K_Fold
k-Fold CV تکنیکی است که معایب holdout را کمتر میکند. Kfold روشی جدید برای تقسیم بندی داده در راستای غلبه بر مشکل "یکبار تست کردن و buttleneckای که ممکن است بوجود آید" معرفی شده است.
الگوریتم تکنیک kfold:
1. انتخاب تعداد تعداد دسته یا همان مقدار k که بصورت معمول بین 5 تا 10 میباشد. البته شما مجاز به انتخاب هر عددی (کمتر از طول دیتاست) خواهید بود.
2. بخش بندی کردن داده به kدسته ی یکسان (با اندازه ی برابر)
3. انتخاب k-1دسته به عنوان دیتای آموزشی و دسته ی باقیمانده به عنوان دیتای تست.
4. آموزش مدل بر روی داده ی آموزشی. در هر گام cv، شما میبایست مدلی جدید، مستقل از مدل مرحله ی قبل آموزش دهید.
5. ارزیابی برروی داده ی تست.
6. ذخیره ی نتیجه ی ارزیابی
7. مراحل 3 تا 6 را kبار تکرار کنید و در هربار، بقیه ی دسته را به عنوان تست در نظر بگیرید و در پایان شما می بایست الگوریتم را روی هر دسته ارزیابی کرده باشید.
8. Scoreنهایی میانگین نتایجی است که در 6 مرحله ی بالا دریافت کردید.
برای \یاده سازی میتوانید از sklearn.model_selection.Kfold استفاده کنید:
?
بصورت کلی، در اکتر مواقع، استفاده از kfold نتیجه ی بهتری نسبت به holdout به شما خواهد داد. در شرایط برابر، نتایج ارائه شده توسط kfoldبسیار قابل اطمینان تر و پایدار تر میباشد چرا که آموزش و آزمایش برروی چندین بخش مختلف مجموعه ی داده انجام میشود. همچنین اگر مقدار k را افزایش دهیم، تا مدل برروی مجموعه های مختلف تست کنیم، نتایج و امتیاز کلی قوی تری نیز دریافت خواهیم کرد.
اما با این حال، روش kfold یک نقطه ضعف دارد و آن هم این است مه اگر مقدارk بزرگ باشد، فرآیند آموزش بسیار پرهزینه و زمان بر خواهد شد.
Leave-one-out сross-validation
Loocv (leave ome out cv) یک مدل خاص از kfoldمی باشد که در آن k دقیقا برابر تعداد داده ی آموزشی است.
الگوریتم تکنینک loocv:
1. انتخاب یک نمونه از داده به عنوان داده ی تست
2. بقیه ی نمونه ها(n-1نمونه ی باقیمانده) به عنوان دیتای آموزشی
3. آموزش مدل با استفاده از دیتای آموزشی. در هرگام باید مدل جدیدی آموزش داده شود.
4. ارطیابی برروی داده ی تست
5. ذخیره ی نتیجه ی ارزیابی
6. اجرای مراحل 1 تا 6 به تعداد nبار ( به تعداد نمونه های آموزشی و دسته ها)
7. Scoreنهایی میانگین نتایجی است مه از مرحله ی 5 دریافت شده.
Sklearn برای loocv نیز متودی ساخته است که در کتابخانه ی model_selectionو \س از آن sklearn.model_selection.LeaveOneOut.قابل مشاهده و استفاده است.
?
بزرگترین مزیت loocvاین است مه دیتای زیادی هدر نمیدهد. در واقع ما فقط از یک نمونه به عنوان دیتای تست استفاده میکنیم و از بقیه ی نمونه ها در فرآیند آموزش استفاده میکنیم.
در مقایسه kfold با loocvاز آنجایی که loocv از nدسته برای اجرای الگوریتم خود استفاده میکند و احتمالا مقدار nاز k خیلی بیشتر خواهد بود، لذا این روش هزینه ی زیادی را نیز به دنبال خواهد داشت.
بنابراین بر اساس شواهد تجربی و تحقیقات مختلفی که صورت پذیرفته است، جامعه ی علوم داده به این نتیجه رسیده اند که kfoldبا k برابر 5 یا 10 برloocvترجیح داده میشود.
Leave-p-out cross-validation
اعتبار سنجی leave p out (LPOC)، مشابه LOOCV است زیرا تمام مجموعه های آموزشی و آزمایشی ممکن را با استفاده از نمونه های p به عنوان مجموعه آزمایشی ایجاد می کند. تمام موارد ذکر شده در مورد LOOCV برای LpOC نیز صادق است.
با این حال، شایان ذکر است که بر خلاف LOOCV و مجموعههای تستk-Fold برای LpOC اگر p بالاتر از 1 باشد، همپوشانی دارند.
الگوریتم تکنیکLpOC
1.به تعداد p نمونه داده از مجموعه ی داده به عنوان داده ی تست جدا کنید.
n - p 2. نمونه باقیمانده مجموعه آموزشی خواهد بود
مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار، یک مدل جدید باید آموزش داده شود
مجموعه آزمایشی اعتبار سنجی کنید
نتیجه اعتبارسنجی را ذخیره کنید
مراحل 2 تا 5Cpn را تکرار کنید ب
رای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 5 به دست آوردید
میتوانیدLeave-p-out CV را با استفاده ازsklearn – sklearn.model_selection.LeavePOut انجام دهید.
?
LpOC تمام معایب LOOCV را دارد، اما، با این وجود، به اندازه LOOCV قوی است.
Stratified k-Fold
گاهی اوقات ممکن استدر دیتاست با عدم تعادل تعداد نمونه های کلاس ها مواجه شویم. به عنوان مثال، در مجموعه دادههای مربوط به قیمت ساعتهای مچی، ممکن است تعداد زیادی از ساعتهای مچی قیمت بالایی داشته باشند. در مورد طبقهبندی، در مجموعه دادههای گربهها و سگها ممکن است تغییر زیادی جز طبقه سگ دسته بندی شوند.
K-Fold طبقه بندی شده (stratified kfold) نوعی از تکنیک استاندارد K-Fold CV است که به گونه ای طراحی شده است که در چنین مواردی،موثر عمل کندK-Fold طبقه بندی شده مجموعه داده را بر روی k تا دسته تقسیم می کند به طوری که هر فولد تقریباً دارای درصد مشابهی از نمونه های هر کلاس باشددر مورد رگرسیون، Stratified k-Fold اطمینان حاصل می کند که میانگین مقدار هدف تقریباً در همه ی دسته ها برابر است.
الگوریتم تکنیک :stratified kfold
1.تعداد دسته ها را انتخاب کنید - k
2.مجموعه داده را به k دسته تقسیم کنید. هر فولد باید تقریباً دارای درصد مشابهی از نمونههای هر کلاس در مجموعه کامل باشد
3.k – 1 folds دیگر مجموعه آموزشی خواهد بود , باقیمانده مجموعه آزمایشی خواهد بود
4. مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار یک مدل جدید باید آموزش داده شود 5.مجموعه آزمایشی اعتبار سنجی کنید
6.نتیجه اعتبارسنجی را ذخیره کنید
7. مراحل 3 تا 6 را چندین بار تکرار کنید . هر بار از دسته ی باقی مانده به عنوان مجموعه تست استفاده کنید.
8. در پایان، شما باید مدل را روی هر فولد که دارید اعتبارسنجی کرده باشید. برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 6 به دست آوردید.
همانطور که ممکن است متوجه شده باشید، الگوریتم تکنیک Stratified k-Fold مشابه K-Folds استاندارد است. شما نیازی به کدنویسی اضافی ندارید زیرا این روش هم همه کارهای لازم را برای شما انجام می دهد( با استفاده از کتابخانه ی sklearn)
?
تمام موارد ذکر شده در بالا در مورد K-Fold CV برای تکنیکStratified k-Fold نیز صادق است. هنگام انتخاب بین روش های مختلف CV، مطمئن شوید که از روش مناسب استفاده می کنید. به عنوان مثال، ممکن است فکر کنید که مدل شما عملکرد بدی دارد، فقط به این دلیل که ازK-Fold CV برای اعتبارسنجی مدلی استفاده میکنید که روی مجموعه داده با عدم تعادل کلاس آموزش داده شده است. برای جلوگیری از آن، همیشه باید یک تجزیه و تحلیل داده ای مناسب روی داده های خود انجام دهید.
Repeated k-Fold cross-validation
اعتبار سنجی repeated kfold احتمالا قوی ترین تکنیک از بین تکنیک های ذکر شده در این مقاله می باشد. Repeated k fold نوعی از kfold cv می باشد با این تفاوت که در آن k تعداد دسته ها نیست بلکه تعداد دفعاتیست که مدل را آموزش می دهیم.
ایده کلی این است که در هر تکرار، نمونههایی را بهطور تصادفی از سرتاسر مجموعه داده به عنوان مجموعه آزمایشی انتخاب میکنیم. به عنوان مثال، اگر تصمیم بگیریم که 20٪ از مجموعه داده ها مجموعه آزمایشی ما باشد، 20٪ نمونه به طور تصادفی انتخاب می شوند و 80٪ بقیه به مجموعه آموزشی تبدیل می شوند.
الگوریتم تکنیک Repeated k-Fold:
k را که تعداد دفعات آموزش مدل است را انتخاب کنید
تعداد نمونه های مجموعه ی تست را انتخاب کنید و مجموعه داده را تقسیم کنید
آموزش را برروی دیتای trainانجام دهید فقط توجه داشته باشید که . در هر تکرار CV، یک مدل جدید باید آموزش داده شود
مجموعه آزمایشی را اعتبار ارزیابی کنید
نتیجه اعتبارسنجی را ذخیره کنید
مراحل را 3-6 هزار بار تکرار کنید برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 6 به دست آوردید، خواهد بود.
Repeated k fold
Repeated kfold، مزایای واضحی نسبت به استانداردهای k-Fold CV دارد. اولا، نسبت تقسیم دیتای آموزش و تست به تعداد تکرارها وابسته نیست. ثانیا، ما حتی می توانیم نسبت های منحصر به فردی را برای هر تکرار تنظیم کنیم.
ثانیا، ما میتوانیم یک تقسیم بندی منحصر به فرد برای هر تکرار داشته باشیم. سوما، انتخاب رندوم نمونه هااز بین دیتاست، repeated k fold را به انتخاب قوی تری تولید میکند.
با این حال معایبی نیز وجود دارد از جمله اینکه در kfold cv مدل بر روی همه ی نمونه ها آزمایش میشود در حالیکه در repeated kfold از آنجایی که بصورت تصادفی نمدنه هارا انتخاب میکند، ممکن است برخی نمونه ها هرگز دیده نشوند و انتخاب نشوند و این در حالیست که برخی نمونه ها ممکن است اصلا انتخاب نشوند.
Sklearn به شما در پیاده سازی Repeated k-Fold CV کمک می کند. فقط ازsklearn.model_selection.RepeatedKFold استفاده کنید.
در اجرایsklearn این تکنیک باید تعداد فولدهایی که می خواهید داشته باشید (n_splits) و تعداد دفعاتی که تقسیم انجام می شود (n_repeats) را تنظیم کنید.
?
Nested k fold
برخلاف سایر تکنیکهای CV، که برای ارزیابی کیفیت یک الگوریتم طراحی شدهاند، Nested k-Fold CV محبوبترین راه برای تنظیم پارامترهای یک الگوریتم است
. تصور کنید که ما یک پارامتر p داریم که معمولاً به الگوریتم پایه ای که ما در حال تایید متقابل آن هستیم بستگی دارد. به عنوان مثال، برای رگرسیون لجستیک، ممکن است پارامتر جریمه باشد که برای تعیین هنجار مورد استفاده در جریمه استفاده می شود
. الگوریتم تکنیک Nested k-Fold
1. K را که تعدادfoldیا دسته است انتخاب کنید. به عنوان مثال، 10. فرض کنید ما این تعداد را انتخاب کردیم.
2. پارامتر pرا انتخاب کنید. فرض کنید الگوریتم ما logistic regressionباشد بنابراین p همان جریمه خواهد بود.
3. دیتاست راه به 10 تقسیم کرده و یک دسته را به عنوان دیتای تست کنار بگذارید.
4. یک فولد از دیتای آموزشی را به عنوان دیتای validation کنار بگذارید.
5. برای هر مقدار p، 8 دسته ی باقیمامده از دیتای آموزسی را آموزش دهید و از روی دیتای validationارزیابی کنید.
6. گام های 4 و 5 را 9 بار تکرار کنید. دیتاهارا جابجا کنید به گونه ای که جای valو train عوض شود.
7. مقدار pرا انتخاب کنید که میانگین ارور ها در 9 دسته را minimize کند. همین مقدارp را برای ارزیابی بر روی دیتای تست استفاده کنید.
8. از مرحله ی 2 تا این قسمت را 10 بار تکرار کنید و هر fold را به نوبت به عنوان دسته ی تست استفاده کنید.
9. میانگین و انحراف معیار ارزیابی خود در 10 تست انجام شده را ذخیره کنید.
10. الگوریتمی که بهترین میانگین در بین 10 تست را دریافت کند، بهترین خواهد بود.
این تکنیک از نظر محاسباتی پر هزینه است زیرا در طول مراحل 1 تا 10 تعداد زیادی مدل باید آموزش و ارزیابی شوند. با این حال، Nested k-Fold CV معمولا استفاده می شود و ممکن است در چندین کار ML واقعاً مؤثر باشد. متأسفانه، هیچ روش داخلی در sklearn وجود ندارد که بتواند CV Nested k-Fold را برای شما پیاده سازی نماید.
Complete CV
روش Complete Cross-Validation کم استفاده ترین تکنیک CV است. ایده کلی این روش این است که ما یک عدد k (طول مجموعه آموزشی) را انتخاب می کنیم و روی هر تقسیم ممکن حاوی k نمونه در مجموعه آموزشی اعتبار سنجی می کنیم.
مقدار این تقسیم بندی ها با استفاده از Cn, k که nطول دیتاست می باشد، قابل محاسبه است. اگر kبزرگتر از 2 باشد، ما باید مدل خود را چندین بار گزارش دهیم که همانطور که قبلا ذمر شد و متوجه شدیم، بسیار از نظر محاسباتی و زمان هزینه بر است.
به همین دلیل است که از CV کامل یا در تحقیقات نظری و یا در صورت وجود فرمول مؤثری که به حداقل رساندن محاسبات کمک می کند. ، استفاده میشود.
الگوریتم اعتبار سنجی متقاطع کامل:
1. عددk را که طول دیتاست است، انتخاب کنید.
2.دیتاست را تقسیم بندی کنید.
3. آموزش را بر روی دیتای trainانجام دهید.
4. دیتای تست را ارزیابی کنید .
5. نتیجه ی اعتبار سنجی را ذخیره کنید.
6. مرحله ی 2 تا 5 را Cn, k بار تکرار کنید.
7. برای بدست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله ی 5 بدست آوردید، را محاسبه کنید.
استفاده از Cross-validation در یادگیری ماشین
بیشتر تکنیک های اعتبار سنجی متقابل ذکر شده در بالا به طور گسترده در ML استفاده می شود. این مهم است که به خاطر داشته باشید که استفاده از تکنیک CV مناسب ممکن است در زمان شما صرفه جویی کند و به انتخاب بهترین مدل برای کار کمک کندو این بدان معناست که اولاً، بهتر است همیشه مدل را با استفاده از cross validation ارزیابی کنید و پس از آن باید یک روش 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حتی بهتر از امروز عمل خواهند کرد. با این حال، اعتبار سنجی متقابل همیشه برای پشتیبان گیری از نتایج شما مورد نیاز است.
در یادگیری ماشین (ML)، تعمیم (generalization)، معمولا به توانایی یک الگوریتم در پاسخ دادن به ورودی های مختلف و البته جدید اطلاق میشود و این بدان معناست که عملکرد در یک الگوریتم یادگیری ماشین، عملکرد الگوریتم بر اساس دیتایی که با آن آموزش دیده(train set) قابل ارزیابی درست نیست.
اصل تعمیم برای انسانهااز طبیعی ترین و ساده ترین کارهای ممکن است به عنوان نمونه، انسان حتی اگر یک سگی با نژادی متفاوت را که تا به حال ندیدیه برای اولین بار ببیند، باز هم میشناسد که این همان تعمیم است. اما این کار برای الگوریتم چالش هایی به دنبال دارد و به همین دلیل بررسی الگوریتم در توانایی تعمیم نیازمند توجه زیادی در زمان ساخت مدل است که برای انجام این کار، ما از روش اعتبار سنجی عرضی (CV)استفاده میکنیم.
در این مقاله موارد زیر را پوشش خواهیم داد:
اعتبار سنجی متقابل: تعریف، هدف از استفاده و تکنیکها
تکنیکهای مختلف CV: hold-out, k-folds, Leave-one-out, Leave-p-out, Stratified k-folds, Repeated k-folds, Nested k-folds, Complete CV
نحوه ی استفاده از این تکنیک ها : با استفاده از پکیج Sklearn
اعتبار سنجی متقابل در یادگیری ماشینی
اعتبار سنجی در یادگیری عمیق,…keras, pytorch:
بهترین روشها و نکات از: سریهای زمانی، دادههای پزشکی و مالی، تصاویر
اعتبار ستجی متقابل چیست؟
اعتبارسنجی متقابل تکنیکی برای ارزیابی یک مدل یادگیری ماشین و تست عملکرد آن است. این کار به مقایسه و انتخاب یک مدل مناسب برای مساله مدلسازی کمک میکند.
CV را می توان به راحتی درک کرد، پیادهسازی آن آسان است، و بایاس کمتری برای محاسبه ی ارزیابی مدل، نسبت به روشهای دیگر دارد. تمام این موارد اعتبارسنجی متقابل را به ابزاری قدرتمند برای انتخاب بهترین مدل برای این کار خاص یعنی ارزیابی مدل، تبدیل میکند.
تکنیکهای مختلفی وجود دارند که ممکن است برای اعتبارسنجی متقابل یک مدل مورد استفاده قرار گیرند. با این حال، همه آنها الگوریتم مشابهی دارند:
۱. مجموعه داده را به دو بخش تقسیم کنید: یکی برای آموزش و دیگری برای تست
۲. مدل را با استفاده از داده های trainآموزش دهید.
۳. اعتبارسنجی مدل در مجموعه تست .
۴. مرحله ی ۱ تا ۳ را چندین بار تکرار کنید. تعداد این تکرار به روش CVکه استفاده میکنید بستگی دارد. همانطور که میدانید تکنیکهای زیادی برای CV وجود دارد. برخی از آنها به طور معمول مورد استفاده قرار میگیرند و برخی دیگر تنها بصورت تئوری قابل استفاده هستند.
روش های ارزیابی متقابلی که در این مقاله \وشش دادیم، شامل موارد زیر است:
Hold-out
K-folds
Leave-one-out
Leave-p-out
Stratified K-folds
Repeated K-folds
Nested K-folds
Complete
Holdout
این تکنیک CV، ازسادهترین و رایجترین روشهای CV به شمار میرود .
الگوریتم تکنیک holdout:
۱. مجموعه داده را به دو بخش تقسیم کنید: مجموعه آموزشی و مجموعه تست. معمولا،
۸۰ % مجموعه داده به مجموعه آموزشی و ۲۰ % به مجموعه تست داده میشود، اما شما میتوانید هر گونه تقسیم که برای شما مناسبتر است را انتخاب کنید.
۲. آموزش مدل در مجموعه آموزشی
۳. ارزیابی داده ی تست
۴. ذخیره ی نتیجه ی ارزیابی
ما معمولا از روش 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)
با این حال، روش holdoutیک عیب بزرگ دارد.
به عنوان مثال، ممکن است در یک مجموعه داده ای که توزیع آن یکنواخت نیست، دچار مشکل شویم. به عنوان مثال، مجموعه آموزشی هیچ نشانی از مجموعه ی تست ندارد و ممکن یکی از آنها بسیار سخت و دیگری بسیار راحت باشد که درک این مساله برای الگوریتم مشکل خواهد بود. و یا این واقعیت که مدل خود را فقط یکبار آزمایش کنیم میتواند یک نقطه ی ضعف یا buttle neck برای الگوریتم باشد.
بنابراین با توجه به موارد ذکر شده، شاید نتایج بدست آمده با استفاده از تکنیک holdout چندان قابل اطمینان نباشد.
K_Fold
k-Fold CV تکنیکی است که معایب holdout را کمتر میکند. Kfold روشی جدید برای تقسیم بندی داده در راستای غلبه بر مشکل "یکبار تست کردن و buttleneckای که ممکن است بوجود آید" معرفی شده است.
الگوریتم تکنیک kfold:
1. انتخاب تعداد تعداد دسته یا همان مقدار k که بصورت معمول بین 5 تا 10 میباشد. البته شما مجاز به انتخاب هر عددی (کمتر از طول دیتاست) خواهید بود.
2. بخش بندی کردن داده به kدسته ی یکسان (با اندازه ی برابر)
3. انتخاب k-1دسته به عنوان دیتای آموزشی و دسته ی باقیمانده به عنوان دیتای تست.
4. آموزش مدل بر روی داده ی آموزشی. در هر گام cv، شما میبایست مدلی جدید، مستقل از مدل مرحله ی قبل آموزش دهید.
5. ارزیابی برروی داده ی تست.
6. ذخیره ی نتیجه ی ارزیابی
7. مراحل 3 تا 6 را kبار تکرار کنید و در هربار، بقیه ی دسته را به عنوان تست در نظر بگیرید و در پایان شما می بایست الگوریتم را روی هر دسته ارزیابی کرده باشید.
8. Scoreنهایی میانگین نتایجی است که در 6 مرحله ی بالا دریافت کردید.
برای \یاده سازی میتوانید از sklearn.model_selection.Kfold استفاده کنید:
?
بصورت کلی، در اکتر مواقع، استفاده از kfold نتیجه ی بهتری نسبت به holdout به شما خواهد داد. در شرایط برابر، نتایج ارائه شده توسط kfoldبسیار قابل اطمینان تر و پایدار تر میباشد چرا که آموزش و آزمایش برروی چندین بخش مختلف مجموعه ی داده انجام میشود. همچنین اگر مقدار k را افزایش دهیم، تا مدل برروی مجموعه های مختلف تست کنیم، نتایج و امتیاز کلی قوی تری نیز دریافت خواهیم کرد.
اما با این حال، روش kfold یک نقطه ضعف دارد و آن هم این است مه اگر مقدارk بزرگ باشد، فرآیند آموزش بسیار پرهزینه و زمان بر خواهد شد.
Leave-one-out сross-validation
Loocv (leave ome out cv) یک مدل خاص از kfoldمی باشد که در آن k دقیقا برابر تعداد داده ی آموزشی است.
الگوریتم تکنینک loocv:
1. انتخاب یک نمونه از داده به عنوان داده ی تست
2. بقیه ی نمونه ها(n-1نمونه ی باقیمانده) به عنوان دیتای آموزشی
3. آموزش مدل با استفاده از دیتای آموزشی. در هرگام باید مدل جدیدی آموزش داده شود.
4. ارطیابی برروی داده ی تست
5. ذخیره ی نتیجه ی ارزیابی
6. اجرای مراحل 1 تا 6 به تعداد nبار ( به تعداد نمونه های آموزشی و دسته ها)
7. Scoreنهایی میانگین نتایجی است مه از مرحله ی 5 دریافت شده.
Sklearn برای loocv نیز متودی ساخته است که در کتابخانه ی model_selectionو \س از آن sklearn.model_selection.LeaveOneOut.قابل مشاهده و استفاده است.
?
بزرگترین مزیت loocvاین است مه دیتای زیادی هدر نمیدهد. در واقع ما فقط از یک نمونه به عنوان دیتای تست استفاده میکنیم و از بقیه ی نمونه ها در فرآیند آموزش استفاده میکنیم.
در مقایسه kfold با loocvاز آنجایی که loocv از nدسته برای اجرای الگوریتم خود استفاده میکند و احتمالا مقدار nاز k خیلی بیشتر خواهد بود، لذا این روش هزینه ی زیادی را نیز به دنبال خواهد داشت.
بنابراین بر اساس شواهد تجربی و تحقیقات مختلفی که صورت پذیرفته است، جامعه ی علوم داده به این نتیجه رسیده اند که kfoldبا k برابر 5 یا 10 برloocvترجیح داده میشود.
Leave-p-out cross-validation
اعتبار سنجی leave p out (LPOC)، مشابه LOOCV است زیرا تمام مجموعه های آموزشی و آزمایشی ممکن را با استفاده از نمونه های p به عنوان مجموعه آزمایشی ایجاد می کند. تمام موارد ذکر شده در مورد LOOCV برای LpOC نیز صادق است.
با این حال، شایان ذکر است که بر خلاف LOOCV و مجموعههای تستk-Fold برای LpOC اگر p بالاتر از 1 باشد، همپوشانی دارند.
الگوریتم تکنیکLpOC
1.به تعداد p نمونه داده از مجموعه ی داده به عنوان داده ی تست جدا کنید.
n - p 2. نمونه باقیمانده مجموعه آموزشی خواهد بود
مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار، یک مدل جدید باید آموزش داده شود
مجموعه آزمایشی اعتبار سنجی کنید
نتیجه اعتبارسنجی را ذخیره کنید
مراحل 2 تا 5Cpn را تکرار کنید ب
رای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 5 به دست آوردید
میتوانیدLeave-p-out CV را با استفاده ازsklearn – sklearn.model_selection.LeavePOut انجام دهید.
?
LpOC تمام معایب LOOCV را دارد، اما، با این وجود، به اندازه LOOCV قوی است.
Stratified k-Fold
گاهی اوقات ممکن استدر دیتاست با عدم تعادل تعداد نمونه های کلاس ها مواجه شویم. به عنوان مثال، در مجموعه دادههای مربوط به قیمت ساعتهای مچی، ممکن است تعداد زیادی از ساعتهای مچی قیمت بالایی داشته باشند. در مورد طبقهبندی، در مجموعه دادههای گربهها و سگها ممکن است تغییر زیادی جز طبقه سگ دسته بندی شوند.
K-Fold طبقه بندی شده (stratified kfold) نوعی از تکنیک استاندارد K-Fold CV است که به گونه ای طراحی شده است که در چنین مواردی،موثر عمل کندK-Fold طبقه بندی شده مجموعه داده را بر روی k تا دسته تقسیم می کند به طوری که هر فولد تقریباً دارای درصد مشابهی از نمونه های هر کلاس باشددر مورد رگرسیون، Stratified k-Fold اطمینان حاصل می کند که میانگین مقدار هدف تقریباً در همه ی دسته ها برابر است.
الگوریتم تکنیک :stratified kfold
1.تعداد دسته ها را انتخاب کنید - k
2.مجموعه داده را به k دسته تقسیم کنید. هر فولد باید تقریباً دارای درصد مشابهی از نمونههای هر کلاس در مجموعه کامل باشد
3.k – 1 folds دیگر مجموعه آموزشی خواهد بود , باقیمانده مجموعه آزمایشی خواهد بود
4. مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار یک مدل جدید باید آموزش داده شود 5.مجموعه آزمایشی اعتبار سنجی کنید
6.نتیجه اعتبارسنجی را ذخیره کنید
7. مراحل 3 تا 6 را چندین بار تکرار کنید . هر بار از دسته ی باقی مانده به عنوان مجموعه تست استفاده کنید.
8. در پایان، شما باید مدل را روی هر فولد که دارید اعتبارسنجی کرده باشید. برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 6 به دست آوردید.
همانطور که ممکن است متوجه شده باشید، الگوریتم تکنیک Stratified k-Fold مشابه K-Folds استاندارد است. شما نیازی به کدنویسی اضافی ندارید زیرا این روش هم همه کارهای لازم را برای شما انجام می دهد( با استفاده از کتابخانه ی sklearn)
?
تمام موارد ذکر شده در بالا در مورد K-Fold CV برای تکنیکStratified k-Fold نیز صادق است. هنگام انتخاب بین روش های مختلف CV، مطمئن شوید که از روش مناسب استفاده می کنید. به عنوان مثال، ممکن است فکر کنید که مدل شما عملکرد بدی دارد، فقط به این دلیل که ازK-Fold CV برای اعتبارسنجی مدلی استفاده میکنید که روی مجموعه داده با عدم تعادل کلاس آموزش داده شده است. برای جلوگیری از آن، همیشه باید یک تجزیه و تحلیل داده ای مناسب روی داده های خود انجام دهید.
Repeated k-Fold cross-validation
اعتبار سنجی repeated kfold احتمالا قوی ترین تکنیک از بین تکنیک های ذکر شده در این مقاله می باشد. Repeated k fold نوعی از kfold cv می باشد با این تفاوت که در آن k تعداد دسته ها نیست بلکه تعداد دفعاتیست که مدل را آموزش می دهیم.
ایده کلی این است که در هر تکرار، نمونههایی را بهطور تصادفی از سرتاسر مجموعه داده به عنوان مجموعه آزمایشی انتخاب میکنیم. به عنوان مثال، اگر تصمیم بگیریم که 20٪ از مجموعه داده ها مجموعه آزمایشی ما باشد، 20٪ نمونه به طور تصادفی انتخاب می شوند و 80٪ بقیه به مجموعه آموزشی تبدیل می شوند.
الگوریتم تکنیک Repeated k-Fold:
k را که تعداد دفعات آموزش مدل است را انتخاب کنید
تعداد نمونه های مجموعه ی تست را انتخاب کنید و مجموعه داده را تقسیم کنید
آموزش را برروی دیتای trainانجام دهید فقط توجه داشته باشید که . در هر تکرار CV، یک مدل جدید باید آموزش داده شود
مجموعه آزمایشی را اعتبار ارزیابی کنید
نتیجه اعتبارسنجی را ذخیره کنید
مراحل را 3-6 هزار بار تکرار کنید برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله 6 به دست آوردید، خواهد بود.
Repeated k fold
Repeated kfold، مزایای واضحی نسبت به استانداردهای k-Fold CV دارد. اولا، نسبت تقسیم دیتای آموزش و تست به تعداد تکرارها وابسته نیست. ثانیا، ما حتی می توانیم نسبت های منحصر به فردی را برای هر تکرار تنظیم کنیم.
ثانیا، ما میتوانیم یک تقسیم بندی منحصر به فرد برای هر تکرار داشته باشیم. سوما، انتخاب رندوم نمونه هااز بین دیتاست، repeated k fold را به انتخاب قوی تری تولید میکند.
با این حال معایبی نیز وجود دارد از جمله اینکه در kfold cv مدل بر روی همه ی نمونه ها آزمایش میشود در حالیکه در repeated kfold از آنجایی که بصورت تصادفی نمدنه هارا انتخاب میکند، ممکن است برخی نمونه ها هرگز دیده نشوند و انتخاب نشوند و این در حالیست که برخی نمونه ها ممکن است اصلا انتخاب نشوند.
Sklearn به شما در پیاده سازی Repeated k-Fold CV کمک می کند. فقط ازsklearn.model_selection.RepeatedKFold استفاده کنید.
در اجرایsklearn این تکنیک باید تعداد فولدهایی که می خواهید داشته باشید (n_splits) و تعداد دفعاتی که تقسیم انجام می شود (n_repeats) را تنظیم کنید.
?
Nested k fold
برخلاف سایر تکنیکهای CV، که برای ارزیابی کیفیت یک الگوریتم طراحی شدهاند، Nested k-Fold CV محبوبترین راه برای تنظیم پارامترهای یک الگوریتم است
. تصور کنید که ما یک پارامتر p داریم که معمولاً به الگوریتم پایه ای که ما در حال تایید متقابل آن هستیم بستگی دارد. به عنوان مثال، برای رگرسیون لجستیک، ممکن است پارامتر جریمه باشد که برای تعیین هنجار مورد استفاده در جریمه استفاده می شود
. الگوریتم تکنیک Nested k-Fold
1. K را که تعدادfoldیا دسته است انتخاب کنید. به عنوان مثال، 10. فرض کنید ما این تعداد را انتخاب کردیم.
2. پارامتر pرا انتخاب کنید. فرض کنید الگوریتم ما logistic regressionباشد بنابراین p همان جریمه خواهد بود.
3. دیتاست راه به 10 تقسیم کرده و یک دسته را به عنوان دیتای تست کنار بگذارید.
4. یک فولد از دیتای آموزشی را به عنوان دیتای validation کنار بگذارید.
5. برای هر مقدار p، 8 دسته ی باقیمامده از دیتای آموزسی را آموزش دهید و از روی دیتای validationارزیابی کنید.
6. گام های 4 و 5 را 9 بار تکرار کنید. دیتاهارا جابجا کنید به گونه ای که جای valو train عوض شود.
7. مقدار pرا انتخاب کنید که میانگین ارور ها در 9 دسته را minimize کند. همین مقدارp را برای ارزیابی بر روی دیتای تست استفاده کنید.
8. از مرحله ی 2 تا این قسمت را 10 بار تکرار کنید و هر fold را به نوبت به عنوان دسته ی تست استفاده کنید.
9. میانگین و انحراف معیار ارزیابی خود در 10 تست انجام شده را ذخیره کنید.
10. الگوریتمی که بهترین میانگین در بین 10 تست را دریافت کند، بهترین خواهد بود.
این تکنیک از نظر محاسباتی پر هزینه است زیرا در طول مراحل 1 تا 10 تعداد زیادی مدل باید آموزش و ارزیابی شوند. با این حال، Nested k-Fold CV معمولا استفاده می شود و ممکن است در چندین کار ML واقعاً مؤثر باشد. متأسفانه، هیچ روش داخلی در sklearn وجود ندارد که بتواند CV Nested k-Fold را برای شما پیاده سازی نماید.
Complete CV
روش Complete Cross-Validation کم استفاده ترین تکنیک CV است. ایده کلی این روش این است که ما یک عدد k (طول مجموعه آموزشی) را انتخاب می کنیم و روی هر تقسیم ممکن حاوی k نمونه در مجموعه آموزشی اعتبار سنجی می کنیم.
مقدار این تقسیم بندی ها با استفاده از Cn, k که nطول دیتاست می باشد، قابل محاسبه است. اگر kبزرگتر از 2 باشد، ما باید مدل خود را چندین بار گزارش دهیم که همانطور که قبلا ذمر شد و متوجه شدیم، بسیار از نظر محاسباتی و زمان هزینه بر است.
به همین دلیل است که از CV کامل یا در تحقیقات نظری و یا در صورت وجود فرمول مؤثری که به حداقل رساندن محاسبات کمک می کند. ، استفاده میشود.
الگوریتم اعتبار سنجی متقاطع کامل:
1. عددk را که طول دیتاست است، انتخاب کنید.
2.دیتاست را تقسیم بندی کنید.
3. آموزش را بر روی دیتای trainانجام دهید.
4. دیتای تست را ارزیابی کنید .
5. نتیجه ی اعتبار سنجی را ذخیره کنید.
6. مرحله ی 2 تا 5 را Cn, k بار تکرار کنید.
7. برای بدست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله ی 5 بدست آوردید، را محاسبه کنید.
استفاده از Cross-validation در یادگیری ماشین
بیشتر تکنیک های اعتبار سنجی متقابل ذکر شده در بالا به طور گسترده در ML استفاده می شود. این مهم است که به خاطر داشته باشید که استفاده از تکنیک CV مناسب ممکن است در زمان شما صرفه جویی کند و به انتخاب بهترین مدل برای کار کمک کندو این بدان معناست که اولاً، بهتر است همیشه مدل را با استفاده از cross validation ارزیابی کنید و پس از آن باید یک روش 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حتی بهتر از امروز عمل خواهند کرد. با این حال، اعتبار سنجی متقابل همیشه برای پشتیبان گیری از نتایج شما مورد نیاز است.
refrence: "https://neptune.ai/blog/cross-validation-in-machine-learning-how-to-do-it-right"