بازگشت به دوره

آموزش رایگان صفر تا صد یادگیری ماشین (Machine Learning) به زبان ساده

0% تکمیل‌شده
0/0 مرحله

کراس ولیدیشن (Cross Validation) یک روش برای ارزیابی عملکرد مدل‌های یادگیری ماشین است تا مطمئن شویم روی داده‌های جدید هم به‌خوبی کار می‌کند. این روش کمک می‌کند که مدل بیش از حد روی داده‌های آموزشی تنظیم نشود (Overfitting) و عملکرد واقعی آن را بسنجیم.


📌 فهرست مطالب

کراس ولیدیشن چیست؟
روش K-Fold Cross Validation
روش Stratified K-Fold
روش Leave-One-Out (LOO)
روش Leave-P-Out (LPO)
روش Shuffle Split
جمع‌بندی

1. کراس ولیدیشن چیست؟

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

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

برای درک بهتر، از دیتاست معروف Iris استفاده می‌کنیم. ابتدا داده‌ها را بارگذاری و جدا می‌کنیم:

from sklearn import datasets
X, y = datasets.load_iris(return_X_y=True)

2. روش K-Fold Cross Validation

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

مثال

در این مثال، از K=5 استفاده کرده‌ایم:

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())

📌 نکته: این روش باعث می‌شود که مدل روی تمام داده‌ها آموزش ببیند و تست شود.

3. روش Stratified K-Fold

اگر داده‌های ما نامتوازن باشند (یعنی تعداد نمونه‌های کلاس‌های مختلف یکسان نباشد)، روش Stratified K-Fold به کمک ما می‌آید. در این روش، نسبت کلاس‌ها در تمام بخش‌ها برابر نگه داشته می‌شود.

مثال

from sklearn.model_selection import StratifiedKFold

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())

📌 نکته: این روش در مسائل دسته‌بندی نامتوازن مثل تشخیص بیماری‌ها بسیار مفید است.

4. روش Leave-One-Out (LOO)

در این روش، هر بار فقط یک نمونه برای تست انتخاب می‌شود و باقی داده‌ها برای آموزش استفاده می‌شوند. این کار n بار تکرار می‌شود (n برابر تعداد نمونه‌هاست). این روش بسیار دقیق ولی زمان‌بر است.

مثال

from sklearn.model_selection import LeaveOneOut

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

print("Cross Validation Scores:", scores)
print("Average CV Score:", scores.mean())

📌 نکته: اگر تعداد داده‌ها زیاد باشد، این روش بسیار کند خواهد بود.

5. روش Leave-P-Out (LPO)

در این روش، به جای یک نمونه، هر بار P نمونه برای تست کنار گذاشته می‌شود و بقیه داده‌ها برای آموزش استفاده می‌شوند.

مثال

from sklearn.model_selection import LeavePOut

lpo = LeavePOut(p=2)
scores = cross_val_score(clf, X, y, cv=lpo)

print("Cross Validation Scores:", scores)
print("Average CV Score:", scores.mean())

📌 نکته: این روش مشابه LOO است اما انعطاف‌پذیرتر است.

6. روش Shuffle Split

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

مثال

from sklearn.model_selection import ShuffleSplit

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())

📌 نکته: این روش انعطاف بالایی دارد و در مسائل مختلف استفاده می‌شود.


📌 جمع‌بندی

کراس ولیدیشن یک روش ضروری برای ارزیابی مدل‌های یادگیری ماشین است. روش‌های مختلف آن شامل:
K-Fold Cross Validation: تقسیم داده به K بخش و تست روی هر بخش.
Stratified K-Fold: حفظ نسبت کلاس‌ها در تمام بخش‌ها.
Leave-One-Out (LOO): تست روی یک نمونه در هر مرحله.
Leave-P-Out (LPO): تست روی P نمونه در هر مرحله.
Shuffle Split: انتخاب تصادفی داده‌ها برای آموزش و تست.

🔹 بسته به نوع داده و مسئله، باید روش مناسب را انتخاب کنیم تا مدل بهترین عملکرد را روی داده‌های جدید داشته باشد.