Python – اعتبارسنجی متقاطع (Cross Validation)

Cross Validation (CV) یک تکنیک اساسی در یادگیری ماشین است که به ما کمک می‌کند تا عملکرد مدل‌ها را به طور دقیق‌تری ارزیابی کنیم و از مشکلاتی مانند نشت اطلاعات جلوگیری کنیم. هدف از Cross Validation افزایش عملکرد کلی مدل بر روی داده‌های ندیده است. تنظیم پارامترها می‌تواند عملکرد مدل را بهبود بخشد، اما اگر پارامترها برای مجموعه تست تنظیم شوند، ممکن است باعث نشت اطلاعات شود و عملکرد مدل بر روی داده‌های ندیده کاهش یابد. برای تصحیح این موضوع، از Cross Validation استفاده می‌کنیم.

برای درک بهتر CV، ما روش‌های مختلف را بر روی دیتاست iris امتحان خواهیم کرد. ابتدا داده‌ها را بارگذاری و جدا می‌کنیم.

وارد کردن داده‌ها:

from sklearn import datasets

X, y = datasets.load_iris(return_X_y=True)

K-Fold Cross Validation

در K-Fold، داده‌های آموزشی به تعداد k زیرمجموعه تقسیم می‌شود. مدل بر روی k-1 زیرمجموعه آموزش داده می‌شود و زیرمجموعه باقی‌مانده برای ارزیابی مدل استفاده می‌شود.

وارد کردن ماژول‌های لازم:

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import KFold, cross_val_score

ایجاد و ارزیابی مدل:

clf = DecisionTreeClassifier(random_state=42)

k_folds = KFold(n_splits=5)

scores = cross_val_score(clf, X, y, cv=k_folds)

print("Cross Validation Scores: ", scores)
print("Average CV Score: ", scores.mean())
print("Number of CV Scores used in Average: ", len(scores))

نتیجه:

کد بالا عملکرد مدل را در هر یک از k-foldها ارزیابی کرده و میانگین نمرات CV را محاسبه می‌کند.

Stratified K-Fold

در مواردی که کلاس‌ها نامتعادل هستند، باید از StratifiedKFold استفاده کنیم که تضمین می‌کند که نسبت کلاس‌ها در هر دو مجموعه آموزشی و ارزیابی به صورت یکنواخت حفظ شود.

وارد کردن ماژول‌های لازم:

from sklearn.model_selection import StratifiedKFold, cross_val_score

ایجاد و ارزیابی مدل:

sk_folds = StratifiedKFold(n_splits=5)

scores = cross_val_score(clf, X, y, cv=sk_folds)

print("Cross Validation Scores: ", scores)
print("Average CV Score: ", scores.mean())
print("Number of CV Scores used in Average: ", len(scores))

نتیجه:

استفاده از StratifiedKFold معمولاً باعث بهبود نمرات CV می‌شود، به ویژه در مواقعی که کلاس‌ها نامتعادل هستند.

Leave-One-Out (LOO)

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

وارد کردن ماژول‌های لازم:

from sklearn.model_selection import LeaveOneOut, cross_val_score

ایجاد و ارزیابی مدل:

loo = LeaveOneOut()

scores = cross_val_score(clf, X, y, cv=loo)

print("Cross Validation Scores: ", scores)
print("Average CV Score: ", scores.mean())
print("Number of CV Scores used in Average: ", len(scores))

نتیجه:

در اینجا تعداد نمرات CV برابر با تعداد مشاهدات در دیتاست است. میانگین نمرات CV در این روش معمولاً بالا است.

Leave-P-Out (LPO)

در این روش، تعداد p مشاهده برای ارزیابی انتخاب می‌شود و بقیه داده‌ها برای آموزش استفاده می‌شود. این روش یک تفاوت ظریف از Leave-One-Out است.

وارد کردن ماژول‌های لازم:

from sklearn.model_selection import LeavePOut, cross_val_score

ایجاد و ارزیابی مدل:

lpo = LeavePOut(p=2)

scores = cross_val_score(clf, X, y, cv=lpo)

print("Cross Validation Scores: ", scores)
print("Average CV Score: ", scores.mean())
print("Number of CV Scores used in Average: ", len(scores))

نتیجه:

در این روش، تعداد نمرات CV بیشتر از Leave-One-Out است، حتی با p=2، ولی نمرات میانگین CV به طور کلی مشابه است.

Shuffle Split

در Shuffle Split، درصدی از داده‌ها برای آموزش و تست تعیین می‌شود و داده‌ها به طور تصادفی تقسیم می‌شوند. ما باید اندازه‌های آموزش و تست و همچنین تعداد تقسیمات را تعیین کنیم.

وارد کردن ماژول‌های لازم:

from sklearn.model_selection import ShuffleSplit, cross_val_score

ایجاد و ارزیابی مدل:

ss = ShuffleSplit(train_size=0.6, test_size=0.3, n_splits=5)

scores = cross_val_score(clf, X, y, cv=ss)

print("Cross Validation Scores: ", scores)
print("Average CV Score: ", scores.mean())
print("Number of CV Scores used in Average: ", len(scores))

نتیجه:

در اینجا، درصدی از داده‌ها به عنوان مجموعه آموزش و تست تعیین می‌شود و مدل بر روی این داده‌ها ارزیابی می‌شود.

پایان‌نامه

این‌ها تنها برخی از روش‌های Cross Validation هستند که می‌توانند بر روی مدل‌ها اعمال شوند. گزینه‌های بیشتری برای Cross Validation وجود دارد و اکثر مدل‌ها کلاس‌های خاص خود را دارند. برای بررسی گزینه‌های بیشتر Cross Validation، به مستندات sklearn مراجعه کنید.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
Python - محدود کردن داده (MongoDB Limit)

Python – محدود کردن داده (MongoDB Limit)

Python MongoDB محدود کردن نتایج برای محدود کردن نتایج در MongoDB، از متد limit() استفاده می‌کنیم. متد limit() یک...

بیشتر بخوانید
Python - بروزرسانی (MongoDB Update)

Python – بروزرسانی (MongoDB Update)

به‌روزرسانی یک رکورد برای به‌روزرسانی یک رکورد یا سند در MongoDB، از متد update_one() استفاده می‌کنیم. پارامتر اول متد...

بیشتر بخوانید
Python - حذف کالکشن (MongoDB Drop Collection)

Python – حذف کالکشن (MongoDB Drop Collection)

حذف کالکشن شما می‌توانید یک جدول یا کالکشن در MongoDB را با استفاده از متد drop() حذف کنید. مثالحذف...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.