Nested CV: تخمین عملکرد بعد از tuning
امتیاز GridSearchCV خوشبینانهست چون hyperparameterها روی همون foldها انتخاب شدن. حلقه بیرونی nested CV یک تخمین بیسوگیری از کل رویه بهت میده.
کاربرد
وقتی روی hyperparameterها tuning کردی، یک عدد عملکرد قابل دفاع اعلام کنی.
پیشنیازها
scikit-learn
Python
from sklearn.model_selection import GridSearchCV, cross_val_score, KFold
from sklearn.ensemble import RandomForestClassifier
inner = KFold(n_splits=3, shuffle=True, random_state=1) # tuning
outer = KFold(n_splits=5, shuffle=True, random_state=2) # évaluation
search = GridSearchCV(
RandomForestClassifier(random_state=42),
{"max_depth": [4, 8, None], "min_samples_leaf": [1, 5, 20]},
cv=inner, scoring="roc_auc", n_jobs=-1,
)
# La boucle externe ne sert QU'À évaluer la procédure (tuning inclus)
scores = cross_val_score(search, X, y, cv=outer, scoring="roc_auc")
print(f"AUC nested (non biaisée) : {scores.mean():.3f} +/- {scores.std():.3f}")
# Le score interne, lui, est typiquement plus haut (optimiste) :
search.fit(X, y)
print(f"AUC interne du tuning : {search.best_score_:.3f}")نتیجه
AUC nested (non biaisée) : 0.842 +/- 0.018
AUC interne du tuning : 0.871
>>> search.best_params_
{'max_depth': 8, 'min_samples_leaf': 5}Nested CVGridSearchCVBiaisÉvaluation