اعتبارسنجی متقابل و تنظیم هایپرپارامتر
آموزش K-Fold Cross Validation و GridSearchCV: ارزیابی قابل اعتماد و بهینهسازی هایپرپارامترها
مشکل تقسیم ساده Train/Test
نتیجه ارزیابی به «شانس» تقسیم بستگی دارد! شاید داده تست آسان (یا سخت) باشد. راهحل: اعتبارسنجی متقابل.
K-Fold Cross Validation
داده را به K قسمت میشکنیم؛ هر بار یک قسمت تست و بقیه آموزش میشوند. K بار تکرار و میانگین میگیریم:
- داده به ۵ قسمت مساوی تقسیم میشود
- دور ۱: قسمت ۱ تست، بقیه آموزش
- دور ۲: قسمت ۲ تست، بقیه آموزش
- ... تا دور ۵
- میانگین و انحراف معیار ۵ نتیجه = برآورد قابل اعتماد
پیادهسازی
from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X, y, cv=5)
print(f"میانگین: {scores.mean():.3f}")
print(f"انحراف: {scores.std():.3f}")
انحراف معیار کم = مدل پایدار. انحراف بالا = مدل به داده حساس (مشکل!)
تنظیم هایپرپارامتر با GridSearchCV
هایپرپارامترها را قبل از آموزش تنظیم میکنیم (K در KNN، عمق درخت و...). GridSearch همه ترکیبها را با اعتبارسنجی متقابل میآزماید:
from sklearn.model_selection import GridSearchCV
param_grid = {
"n_neighbors": [3, 5, 7, 9],
"weights": ["uniform", "distance"],
}
grid = GridSearchCV(KNeighborsClassifier(), param_grid, cv=5)
grid.fit(X_train, y_train)
print(grid.best_params_) # بهترین ترکیب
print(grid.best_score_) # بهترین دقت
best_model = grid.best_estimator_
هایپرپارامتر در مقابل پارامتر
| پارامتر | هایپرپارامتر | |
|---|---|---|
| چه کسی تعیین میکند؟ | مدل (در fit) | شما (قبل از fit) |
| مثال | ضرایب رگرسیون | K در KNN، عمق درخت |
GridSearch را روی داده آموزش اجرا کنید نه کل داده! و بعد از انتخاب، مدل نهایی را روی تست ارزیابی کنید.
جمعبندی
- K-Fold ارزیابی قابل اعتماد با میانگین چند تقسیم میدهد
- GridSearchCV بهترین هایپرپارامترها را مییابد
- انحراف معیار کم = مدل پایدار و قابل اعتماد
این مبحث بخشی از دوره آموزش کامل ماشین لرنینگ است.