Alireza Mansouri
Alireza Mansouri
خواندن ۱۷ دقیقه·۳ سال پیش

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

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

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

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

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

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

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

· تکنیک‌های مختلف اعتبار سنجی :

o hold-out

o k-folds

o Leave-one-out

o Leave-p-out

o Stratifiedk-folds

o Repeated

o k-folds

o Nested

o k-folds

o Complete CV

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

· Cross-Validation in Machine Learning: sklearn, CatBoost

· Cross-Validation in Deep Learning: Keras, PyTorch, MxNet

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

Cross-Validation (اعتبار سنجی ) چیست ؟

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

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

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

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

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

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

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

همان طور که میدانید روش های مختلفی برای اعتبار سنجی وجود دارد و برخی از آن ها در تئوری استفاده می شوند، بیایید باهم بررسی کنیم :

· Hold-out

· K-folds

· Leave-one-out

· Leave-p-out

· Stratified K-folds

· Repeated K-folds

· Nested K-folds

· Complete

روش Hold-out

رایج ترین روش اعتبار سنجی می باشد و شاید ندانید که این روش نگهدارنده است ولی روزانه مطمئنا از آن استفاده میکنید.

الگوریتم روش نگهدارنده یا Hold-out :

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

می‌توانید این کار را با استفاده از کد 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دسته :

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

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

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

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

برای انجام اعتبارسنجی متقاطع k دسته می توانید از دستور 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 دسته استفاده کنید. از آنجایی که آموزش و آزمایش بر روی چندین بخش مختلف مجموعه داده انجام می شود، به صورت مو به مو، مقایسه k دسته نتیجه پایدارتر و قابل اعتمادتری به دست می دهد. اگر تعداد k ها را افزایش دهیم تا مدل را روی بسیاری از زیر مجموعه‌های مختلف آزمایش کنیم، می‌توانیم امتیاز کلی را قوی‌تر کنیم. با این حال، روش k دسته یک نقطه ضعف دارد. افزایش k منجر به آموزش مدل های بیشتر می شود و فرآیند آموزش ممکن است واقعاً گران و زمان بر باشد. تکنیکLeave-one-out : اعتبار سنجی متقابل یک مورد قوی تر از اعتبارسنجی متقاطع است. تصور کنید کهk برابر با n باشد که n تعداد نمونه های مجموعه داده است. چنین موردی معادل تکنیکLeave-one-out است. الگوریتم تکنیک اعتبارسنجی متقابل : یک نمونه از مجموعه داده را انتخاب کنید که مجموعه آزمایشی خواهد بود . n – 1 نمونه باقیمانده مجموعه آموزشی خواهد بود مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار، یک مدل جدید باید آموزش داده شود در مجموعه آزمایشی اعتبار سنجی کنید . نتیجه اعتبارسنجی را ذخیره کنید .این مراحل راn بار تکرار کنید، به این ترتیب برای n نمونه، n مجموعه آموزشی و تست متفاوت داریم. برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله آخر به دست آوردید. اعتبارسنجیsklearn دارای یک روش داخلی است.

می توان آن را در کتابخانهmodel_selectionsklearn.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 دسته مقایسه می‌شود، اعتبارسنجی متقابل نیاز به ساخت nمدل به جای kمدل دارد، وقتی می‌دانیم که n که مخفف تعداد نمونه‌های مجموعه داده است بسیار بیشتر از kاست. این بدان معناست که اعتبارسنجی متقابل از نظر محاسباتی گرانتر از kدسته است، ممکن است زمان زیادی برای اعتبارسنجی متقابل مدل با استفاده از اعتبارسنجی متقابل نیاز باشد.

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

اعتبار سنجی متقاطع ترک p :

اعتبار سنجی متقاطع ترک p شبیه به ترک یک خروجی اعتبارسنجی است زیرا تمام مجموعه های آموزشی و آزمایشی ممکن را با استفاده از نمونه های p به عنوان مجموعه آزمایشی ایجاد می کند. تمام موارد ذکر شده در مورد اعتبارسنجی متقابل و برای اعتبارسنجی متقاطع ترک p درست است. با این حال، بر خلاف اعتبارسنجی متقابل و مجموعه‌های تستkدسته برای اعتبار سنجی متقاطع ترک p , اگر p بالاتر از 1 باشد، همپوشانی دارند. الگوریتم این تکنیک به صورت زیر است : نمونه های p را از مجموعه داده انتخاب کنید که مجموعه آزمایشی خواهد بود n-pنمونه باقیمانده مجموعه آموزشی خواهد بود . مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار، یک مدل جدید باید آموزش داده شود .در مجموعه آزمایشی اعتبار سنجی کنید نتیجه اعتبارسنجی را ذخیره کنید . این مراحل را n بار را تکرار کنید . برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله آخر است را به دست آوردید.میتوانید اعتبارسنجی ترک pرا با استفاده از دستور 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]

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

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

Kدسته را انتخاب کنید . مجموعه داده را به k برابر تقسیم کنید. هر دسته باید تقریباً دارای درصد مشابهی از نمونه‌های هر کلاس هدف در مجموعه کامل باشد .k-1 دسته را انتخاب کنید که مجموعه آموزشی خواهد بود. تای باقیمانده مجموعه آزمایشی خواهد بود. مدل را روی مجموعه آموزشی آموزش دهید. در هر تکرار یک مدل جدید باید آموزش داده شود.در مجموعه آزمایشی اعتبار سنجی کنید .نتیجه اعتبارسنجی را ذخیره کنید این مراحل را هزار بار تکرار کنید. هر بار از دسته باقی مانده به عنوان مجموعه تست استفاده کنید. در پایان، شما باید مدل را روی هر دسته که دارید اعتبارسنجی کرده باشید.برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحلهآخر را به دست آوردید. الگوریتم تکنیک طبقه بندی k دسته مشابه kدسته استاندارد است. شما نیازی به کدنویسی اضافی ندارید زیرا این روش همه کارهای لازم را برای شما انجام می دهد.این تکنیک یک روش داخلی در sklearnدارد.

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]

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

اعتبارسنجی متقابل kدسته مکرر :

اعتبارسنجی متقابل k دسته مکرر یا اعتبارسنجی نمونه‌برداری تصادفی فرعی مکرر احتمالاً قوی‌ترین تکنیک از تمام تکنیک‌های اعتبارسنجی در این مقاله است. این یک تغییر از k دسته است اما در مورد k دسته های تکراری k تعداد تاها نیست. تعداد دفعاتی است که ما مدل را آموزش خواهیم داد. ایده کلی این است که در هر تکرار، نمونه‌هایی را به‌طور تصادفی از سرتاسر مجموعه داده به عنوان مجموعه آزمایشی انتخاب می‌کنیم. به عنوان مثال، اگر تصمیم بگیریم که 20٪ از مجموعه داده ها مجموعه آزمایشی ما باشد، 20٪ نمونه به طور تصادفی انتخاب می شوند و 80٪ بقیه به مجموعه آموزشی تبدیل می شوند. تکنیک این الگوریتم به صورت زیر است: k را انتخاب کنید - چند بار مدل آموزش داده می شودتعدادی نمونه را انتخاب کنید که مجموعه آزمایشی خواهد بود . مجموعه داده را تقسیم کنیدروی مجموعه آموزشی تمرین کنید. در هر تکرار اعتبارسنجی متقاطع، یک مدل جدید باید آموزش داده شود در مجموعه آزمایشی اعتبار سنجی کنید نتیجه اعتبارسنجی را ذخیره کنید این مراحل را هزار بار تکرار کنید برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در مرحله آخر به دست آوردید است. K دسته مکرر مزایای واضحی نسبت به استاندارد اعتبارسنجی kدسته دارد. اولا، نسبت تقسیم آموزش / آزمایش به تعداد تکرارها بستگی ندارد. ثانیا، ما حتی می توانیم نسبت های منحصر به فردی را برای هر تکرار تنظیم کنیم. ثالثاً، انتخاب تصادفی نمونه‌ها از مجموعه داده‌ها، K دسته مکرر را برای سوگیری انتخاب قوی‌تر می‌کند با این حال، برخی از معایب وجود دارد. اعتبارسنجی k دسته تضمین می‌کند که مدل روی همه نمونه‌ها آزمایش می‌شود، در حالی که K دسته تکراری بر اساس تصادفی‌سازی است به این معنی است که برخی از نمونه‌ها ممکن است هرگز برای قرار گرفتن در مجموعه آزمایش انتخاب نشوند. در همان زمان، برخی از نمونه ها ممکن است چندین بار انتخاب شوند.Sklearn به شما در پیاده سازی اعتبارسنجی K دسته مکرر کمک می کند. فقط از sklearn.model_selection.RepeatedKFoldاستفاده کنید. در اجرای sklearnاین تکنیک باید تعداد دسته هایی که می خواهید داشته باشید و تعداد دفعاتی که تقسیم انجام می شود را تنظیم کنید. این تضمین می کند که در هر تکرار دسته های مختلفی خواهید داشت.

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دسته تو در تو :

برخلاف سایر تکنیک‌های اعتبارسنجی، که برای ارزیابی کیفیت یک الگوریتم طراحی شده‌اند،اعتبار سنجی k دسته تو در تو محبوب‌ترین راه برای تنظیم پارامترهای یک الگوریتم است. تصور کنید که ما یک پارامتر p داریم که معمولاً به الگوریتم پایه ای که ما در حال تایید متقابل آن هستیم بستگی دارد. به عنوان مثال، برای رگرسیون لجستیک، ممکن است پارامتر جریمه باشد که برای تعیین هنجار مورد استفاده در جریمه استفاده می شود.الگوریتم این تکنیک به صورت زیر است: k را انتخاب کنید - تعدادی دسته، مثلا 10 تا , فرض کنیم که این عدد را انتخاب کرده ایم یک پارامتر p را انتخاب کنید. فرض کنید الگوریتم ما رگرسیون لجستیک است و pپارامتر جریمه p = {'l1', 'l2', 'elasticnet', 'none'} است. مجموعه داده را به 10 تا تقسیم کنید و یکی از آنها را برای آزمایش رزرو کنید یکی از kهای آموزشی را برای اعتبار سنجی رزرو کنید برای هر مقدار p، 8کای آموزشی باقیمانده را آموزش دهید و روی دسته اعتبارسنجی ارزیابی کنید. اکنون 4 اندازه گیری دارید.

این مراحل را 9 بار تکرار کنید. بچرخانید که کدام دسته آموزشی، دسته اعتبارسنجی است. اکنون اندازه گیری 9 * 4 دارید, p را انتخاب کنید که میانگین خطای تمرین را بیش از 9 برابر به حداقل برساند. از آن p برای ارزیابی روی مجموعه تست استفاده کنید این مرحله را10 بار تکرار کنید و از هر k به نوبت به عنوان تk تست استفاده کنید میانگین و انحراف معیار اندازه گیری ارزیابی را در 10 برابر تست ذخیره کنید. الگوریتمی که بهترین عملکرد را داشت، الگوریتمی بود که بهترین میانگین عملکرد خارج از نمونه را در 10 لایه آزمایشی داشت. این تکنیک از نظر محاسباتی گران است زیرا در طول این مراحل تعداد زیادی مدل باید آموزش و ارزیابی شوند. با این حال، اعتبارسنجی k دسته تو در تو معمولا استفاده می شود و ممکن است در چندین کار یادگیری ماشین واقعاً مؤثر باشد. متأسفانه، هیچ روش داخلی در sklearn وجود ندارد که بتواند اعتبارسنجی k دسته تو در تو را برای شما انجام دهد. این لحظه ای است که شما باید یا ازگوگل استفاده کنید و پیاده سازی شخصی را پیدا کنید یا خودتان آن را کدنویسی کنید.

اعتبار متقاطع کامل :

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

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

یک عدد k را انتخاب کنید - طول مجموعه آموزشی , مجموعه داده را تقسیم کنید , روی مجموعه آموزشی تمرین کنید , در مجموعه آزمایشی اعتبار سنجی کنید , نتیجه اعتبارسنجی را ذخیره کنیداین مراحل را cnk بار تکرار کنید , برای به دست آوردن امتیاز نهایی، میانگین نتایجی که در این مرحله به دست آوردید است.

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

بیشتر تکنیک های اعتبار سنجی متقابل ذکر شده در بالا به طور گسترده در یادگیری ماشینی استفاده می شود. مهم است که به خاطر داشته باشید که استفاده از تکنیک اعتبار سنجی مناسب ممکن است در زمان شما صرفه جویی کند و به انتخاب بهترین مدل برای کار کمک کند. این بدان معناست که اولاً بهتر است همیشه مدل را تأیید متقابل کنید و ثانیاً باید یک روش اعتبار سنجی مربوطه را انتخاب کنید. بنابراین، دانستن مزایا و معایب تکنیک‌های اعتبارسنجی متقابل حیاتی است. شایان ذکر است که اگر می‌خواهید مدل را اعتبار متقابل کنید، همیشه باید دفترچه راهنمای مدل را بررسی کنید زیرا برخی از الگوریتم‌های یادگیری ماشینی ، به عنوان مثال، CatBoost روش‌های اعتبارسنجی داخلی خود را دارند. ممکن است آنها را برای کار یادگیری ماشینی خود مرتبط بیابید و به جای روش های داخلی sklearnاز آنها استفاده کنید. به طور کلی، همانطور که ممکن است متوجه شده باشید، بسیاری از تکنیک‌های اعتبارسنجی دارای روش‌های داخلی sklearn هستند. من به شدت توصیه می کنم از آنها استفاده کنید زیرا این روش ها در زمان زیادی برای کارهای پیچیده تر صرفه جویی می کنند.

اعتبار متقابل در یادگیری عمیق :

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

شکافتن اعتبار :

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

داده اعتبار :

چند عدد از (x,y) که باید برای اعتبارسنجی استفاده شود. این پارامتر پارامتر شکافتن اعتبار را نادیده می گیرد، به این معنی که شما می توانید تنها یکی از این پارامترها را به طور همزمان استفاده کنید. همین رویکرد در آموزش های رسمی سایر چارچوب های یادگیری عمیق مانند PyTorch و MxNet استفاده می شود. آنها همچنین پیشنهاد می کنند مجموعه داده را به سه بخش تقسیم کنید: آموزش، اعتبار سنجی و آزمایش.

آموزش – بخشی از مجموعه داده برای آموزش اعتبار سنجی - بخشی از مجموعه داده برای اعتبارسنجی در حین آموزش تست - بخشی از مجموعه داده برای اعتبار سنجی نهایی مدل با این حال، اگر مجموعه داده کوچک است (شامل صدها نمونه) می توانید از اعتبارسنجی متقاطع در وظایف یادگیری عمیق استفاده کنید. در این مورد، یادگیری یک مدل پیچیده ممکن است یک کار بی ربط باشد، بنابراین مطمئن شوید که کار را بیشتر پیچیده نکنید بهترین روش ها و نکات : گاهی اوقات انجام اعتبارسنجی متقابل ممکن است کمی مشکل باشد. به عنوان مثال، انجام یک اشتباه منطقی در هنگام تقسیم مجموعه داده بسیار آسان است که ممکن است منجر به یک نتیجه اعتبارسنجی غیرقابل اعتماد شود. ممکن است نکاتی را بیابید که باید هنگام تایید متقابل یک مدل در زیر مد نظر داشته باشید: هنگام تقسیم داده ها منطقی باشید (آیا روش تقسیم منطقی است)

از روش اعتبارسنجی مناسب استفاده کنید (آیا این روش برای مورد استفاده من قابل اجرا است) هنگام کار با سری های زمانی، گذشته را تأیید نکنید (به اولین نکته مراجعه کنید) هنگام کار با داده های پزشکی یا مالی، به یاد داشته باشید که آن را بر اساس شخص تقسیم کنید. از داشتن داده برای یک نفر هم در آموزش و هم در مجموعه تست خودداری کنید زیرا ممکن است به عنوان نشت داده در نظر گرفته شود . هنگام برش تکه‌ها از تصاویر بزرگ‌تر، به یاد داشته باشید که با شناسه تصویر بزرگ تقسیم کنید . البته، نکات از کار به کار متفاوت است و پوشش همه آنها تقریبا غیرممکن است. به همین دلیل است که انجام یک تجزیه و تحلیل داده های اکتشافی جامد قبل از شروع اعتبارسنجی متقابل یک مدل همیشه بهترین روش است.

افکار نهایی :

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

منابع :

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

شاید از این پست‌ها خوشتان بیاید