آموزش رایگان صفر تا صد یادگیری ماشین (Machine Learning) به زبان ساده
-
خوش آمدید به یادگیری ماشین!
-
میانگین، میانه و مد در یادگیری ماشین
-
انحراف معیار (Standard Deviation) در یادگیری ماشین
-
صدک (Percentile) در یادگیری ماشین
-
توزیع دادهها در یادگیری ماشین
-
توزیع نرمال دادهها در یادگیری ماشین
-
نمودار پراکندگی (Scatter Plot) در یادگیری ماشین
-
رگرسیون خطی در یادگیری ماشینی
-
رگرسیون چندجملهای در یادگیری ماشین
-
رگرسیون چندگانه در یادگیری ماشین
-
روش Train/Test در یادگیری ماشین
-
درخت تصمیمگیری در یادگیری ماشین
-
ماتریس سردرگمی (Confusion Matrix) در یادگیری ماشین
-
خوشهبندی سلسلهمراتبی (Hierarchical Clustering) در یادگیری ماشین
-
رگرسیون لجستیک در یادگیری ماشین
-
Grid Search در یادگیری ماشین
-
پردازش دادههای دستهای (Categorical Data) در یادگیری ماشین
-
خوشهبندی K-Means در یادگیری ماشین
-
یادگیری Bootstrap Aggregation (Bagging) در یادگیری ماشین
-
کراس والیدیشن (Cross Validation) در یادگیری ماشین
-
منحنی AUC - ROC در یادگیری ماشین
-
الگوریتم K-Nearest Neighbors (KNN) در یادگیری ماشین
کراس والیدیشن (Cross Validation) در یادگیری ماشین
کراس ولیدیشن (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: انتخاب تصادفی دادهها برای آموزش و تست.
🔹 بسته به نوع داده و مسئله، باید روش مناسب را انتخاب کنیم تا مدل بهترین عملکرد را روی دادههای جدید داشته باشد.