حسن نظری
حسن نظری
خواندن ۱۸ دقیقه·۳ سال پیش

ارزیابی-متقابل در یادگیری ماشین: انواع؟ روش کار؟ کدنویسی؟

ارزیابی-متقابل در یادگیری ماشین: انواع؟ روش کار؟ کدنویسی؟

نویسنده: ولادیمیر لیاشنکو، مترجم: حسن نظری

در یادگیری ماشین[1]، معمولا تعمیم به قابلیت یک الگوریتم در موثر بودن در برابر ورودی های مختلف اشاره دارد. این یعنی مدل ML در مواجهه با ورودی جدید از همان نوع توزیع داده آموزشی، دچار کاهش عملکرد نمی شود.

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

برای انجام کار، ما از ارزیابی-متقابل[2]استفاده می کنیم.

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

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

-تکنیک های مختلف CV: کنار گذاشتن، k-بخش ، رهاکردن یکی، رها کردن p، k-بخش همگن، k-بخش تکرار شده، K-بخش تو در تو، CV کامل.

چطور باید از این روش ها استفاده کرد: sklearn

ارزیابی-متقابل در یادگیری ماشین: sklearn، CatBoost،

ارزیابی-متقابل در یادگیری عمیق: Keras، PyTorch، MxNet.

بهترین تمرین ها و راهنمایی ها: سری های زمانی، داده های اقتصادی و دارویی، تصاویر

ارزیابی-متقابل چیست؟

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

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

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

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

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

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

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

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

- کنار گذاشتن

- k-بخش

- رهاکردن یکی

- رها کردن p

- k-بخش همگن

- k-بخش تکرار شده

- k-بخش تو در تو

- CV کامل

کنار گذاشتن

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

الگوریتم تکنیک کنار گذاشتن:

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-بخش

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

الگوریتم روش k-بخش:

1- kشماره بخش ها را انتخاب کنید. معمولا k 5 یا 10 است اما شما می توانید هر عدد دیگری که کمتر از طول مجموعه داده است انتخاب کنید.

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

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

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

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

6-نتایج ارزیابی را ذخیره کنید.

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

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

ارزیابی متقابل k-بخش

شما می توانید برای اجرای ارزیابی متقابل 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 سبب افزایش مدل ها در آموزش دادن می شود و فرآیند آموزش ممکن است واقعا گران و زمانبر شود.

رهاکردن یکی

ارزیابی متقابل رها کردن یکی[3]، یک مورد شدت یافته CV k-بخش است. فرض کنید اگر k برابر n باشد که n تعداد نمونه ها در مجموعه داده است. بدین ترتیب مورد k-بخش برابر روش رهاکردن یکی است.

الگوریتم روش LOOCV:

1-یک نمونه از مجموعه داده که مجموعه تست خواهد بود انتخاب کنید.

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

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

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

5-نتایج ارزیابی را ذخیره کنید.

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

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

ارزیابی متقابل رهاکردن تکی

برای LOOCV نیز sklearn یک روش داخلی دارد. این روش می تواند در اینجا یافت شود: model_selection library – 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]

بزرگترین مزیت ارزیابی متقابل رهاکردن یکی اینست که این روش هیچ داده ای را هدر نمی دهد. ما فقط یک نمونه از تمام مجموعه داده را به عنوان مجموعه تست استفاده می کنیم، اگرچه بقیه مجموعه آموزش هستند. اما وقتی با CV k-بخش مقایسه شود، LOOCV نیازمند است n مدل را به جای k مدل بسازد، از طرفی ما می دانیم که n که معرف تعداد نمونه ها است در مجموعه داده خیلی بیشتر از k است. این یعنی LOOCV از نظر محاسباتی پرهزینه تر از k-بخش است، با استفاده از LOOCV ممکن است زمان زیادی صرف ارزیابی متقابل مدل شود.

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

رها کردن p

روش ارزیابی متقابل رهاکردن [4]p، مشابه CV رهاکردن یکی است زیرا این روش تمام مجموعه های آموزش و تست را با استفاده از p نمونه به عنوان مجموعه تست می سازد. تمام مطالب گفته شده درباره LOOCV برای LpOC هم برقرار است.

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

الگوریتم روش LpOC:

1-p نمونه از مجموعه داده که مجموعه تست خواهد بود انتخاب کنید.

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

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

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

5-نتایج ارزیابی را ذخیره کنید.

6-گام های 2-5 را C(n,p) (ترکیب p از n) بار تکرار کنید.

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

شما می توانید CV رهاکردن 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]

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

k-بخش همگن

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

k-بخش همگن، نوع متفاوت روش CV k-بخش است که طراحی شده تا در برخی موارد عدم توازن هدف موثر باشد.

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

الگوریتم روش k-بخش همگن:

1-تعداد بخش ها را انتخاب کنید.

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

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

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

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

6-نتایج ارزیابی را ذخیره کنید.

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

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

همانطور که احتمالا متوجه شدید، الگوریتم برای روش k-بخش همگن مشابه روش k-بخش استاندارد است. شما نیاز به کدنویسی چیزهای اضافه ندارید زیرا این روش هر چیز ضروری را برای شما انجام خواهد داد.

k-بخش همگن همچنین یک روش داخلی در اینجا دارد 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]

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

k-بخش تکرار شده

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

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

الگوریتم روش k-بخش تکرار شده:

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

2-تعداد نمونه هایی را که مجموعه تست خواهند بود را انتخاب کنید.

3-مجموعه داده را جداسازی کنید.

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

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

6-نتایج ارزیابی را ذخیره کنید.

7-گام های 3-6 را k بار تکرار کنید.

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

k-بخش تکرار شده

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

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

Sklearn برای پیاده سازی CV k-بخش تکرار شده به شما کمک خواهد کرد. فقط از این استفاده کنید: 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-بخش تو در تو

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

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

الگوریتم روش k-بخش تو در تو:

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 را طوری انتخاب کنید که متوسط خطای آموزش روی 8 بخش کمینه شود. از این p برای ارزیابی مجموعه تست استفاده کنید.

8- از گام 2، 10بار تکرار کنید، با استفاده از هر بخش، از آن به صورت چرخشی به عنوان بخش تست استفاده کنید.

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

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

این تکنیک از نظر محاسباتی پر هزینه است زیرا در تمام گام های 1-10 مدل های زیادی باید آموزش داده شوند و ارزیابی شوند. تا اینجا، CV k-بخش تو در تو به صورت رایج استفاده می گردد و شاید برای چندین ماموریت ML واقعا موثر باشد.

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

ارزیابی متقابل کامل

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

مقدار آن جداسازی ها می تواند با C(n,k) محاسبه شود که n طول مجموعه داده است. اگر k بزرگتر از 2 باشد، ما می خواهیم مدل خود را بارها آموزش دهیم که این قطعا یعنی فهم و درک یک زمان و محاسبات روال پرهزینه.

این دلیل اینست که چرا CV کامل گاها در روش های تئوری استفاده می گردد یا شاید یک فرمول موثر است که به کمینه کردن محاسبات کمک می کند.

الگوریتم ارزیابی متقابل کامل:

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

2-مجموعه داده را جداسازی کنید.

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

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

5-نتایج ارزیابی را ذخیره کنید.

6-گام های 3-6 را C(n,k) بار تکرار کنید.

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

ارزیابی متقابل در یادگیری ماشین

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

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

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

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

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

ارزیابی متقابل در یادگیری عمیق[5] شاید کمی دشوار باشد زیرا بیشتر روش های CV نیازمند آموزش دادن مدل حداقل در یک تعداد دفعات هستند.

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

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

1. validation_split: درصدی از داده که باید برای ارزیابی کنار گذاشته شود.

2.validation_data: یک تاپل از (X, y) که باید برای ارزیابی استفاده شود. این پارامتر روی پارامتر validation_split بازنویسی می کند که این یعنی شما هر بار فقط از یکی از این پارامترها می توانید استفاده کنید.

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

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

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

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

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

بهترین تمرینات و راهنمایی ها

توجه به این نکته مهم است که بعضی چیز ها سبب شده است که اجرا کردن ارزیابی متقابل کمی سخت باشد.

برای مثال، این خیلی ساده است که زمان جداسازی مجموعه داده یک اشتباه منطقی رخ دهد که این شاید سبب پاسخ CV غیرمطمئن خواهد شد.

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

1-زمان جداسازی داده منطقی باشید (آیا روش تقسیم منطقی است؟)

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

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

4-وقتی با داده پزشکی یا مالی کار می کنید جداسازی به وسیله شخص را به یاد داشته باشید. از اینکه هم داده آموزش و هم داده تست را برای یک شخص داشته باشید بپرهیزید چون این مثل نشت داده می ماند.

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

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

سخنان پایانی

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

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

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

امیدوارم، با این اطلاعات، شما در اجرای پروژه بعدی یادگیری ماشین خودتان هیچ مشکلی برای تنظیم CV نداشته باشید!

مراجع

1. https://www.geeksforgeeks.org/cross-validation-machine-learning/

2. https://machinelearningmastery.com/k-fold-cross-validation/

3. https://towardsdatascience.com/cross-validation-in-machine-learning-72924a69872f

4. https://towardsdatascience.com/why-and-how-to-do-cross-validation-for-machine-learning-d5bd7e60c189

5. https://scikit-learn.org/stable/modules/cross_validation.html

سایت منبع:

https://neptune.ai/blog/cross-validation-in-machine-learning-how-to-do-it-right


  • [1] Machine Learning (ML)
  • [2] Cross-Validation (CV)
  • [3] Leave-one-out сross-validation (LOOCV)
  • [4] Leave-p-out cross-validation (LpOC)
  • [5] Deep Learning (DL)


یادگیری ماشینcross validation
شاید از این پست‌ها خوشتان بیاید