我按照以下方式将训练集划分为分层 k 折:
n_folds = 5skf = list(StratifiedKFold(y, n_folds, random_state=SEED))for k, (train, test) in enumerate(skf): X_train = X[train] y_train = y[train] X_val = X[test] y_val = y[test] clf.fit(X_train, y_train) preds = clf.predict_proba(X_val)
前四个折的分类准确率符合预期。最后一个折的准确率显著变差。
我尝试了改变 SEED 和 n_folds 的值,在所有情况下,最后一个折总是最差的(对于 5 折,大约差 3%)。这是为什么呢?
谢谢你。
回答:
原来,StratifiedKFold 默认情况下不会打乱数据。因此,我需要将 shuffle 参数设置为 True:
n_folds = 10skf = list(StratifiedKFold(y, n_folds, shuffle=True, random_state=SEED))