我很确定他们正在谈论RepeatedStratifiedKFold
。您有 2 种简单的方法可以折叠 5 次 20 次。
方法一:
对于你的情况,n_splits=5, n_repeats=20
。下面的代码只是 scikit-learn 网站的示例。
from sklearn.model_selection import RepeatedStratifiedKFold
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([0, 0, 1, 1])
rskf = RepeatedStratifiedKFold(n_splits=2, n_repeats=2,
... random_state=42)
>>> for train_index, test_index in rskf.split(X, y):
... print("TRAIN:", train_index, "TEST:", test_index)
... X_train, X_test = X[train_index], X[test_index]
... y_train, y_test = y[train_index], y[test_index]
...
TRAIN: [1 2] TEST: [0 3] # n_repeats==1: the folds are [1 2] and [0 3]
TRAIN: [0 3] TEST: [1 2]
TRAIN: [1 3] TEST: [0 2] # n_repeats==2: the folds are [1 3] and [0 2]
TRAIN: [0 2] TEST: [1 3]
方法二:
您可以通过循环实现相同的效果。请注意,random_state
不能是固定的数字,否则20次都会得到同样的5折。
for i in range(20):
kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=i)
为什么和你的代码不一样?
假设您有 10000 个数据点并创建 100 个折叠。 1 倍的大小 = 100。您的训练集 = 9900 与验证集 = 100。
RepeatedStratifiedKFold
为您的模型创建 5 次折叠,每次折叠 2000 次。然后重复进行 5 次折叠,如此反复,共 20 次。这意味着您实现了 100 倍,但验证集却很大。根据您的目标,您可能需要更大的验证集,例如。有足够的数据来正确验证,并且RepeatedStratifiedKFold
使您能够以不同的方式(使用不同的训练验证比例)创建相同数量的折叠。除此之外,我不确定是否还有其他目标。
http://scikit-learn.org/stable/modules/ generated/sklearn.model_selection.RepeatedStratifiedKFold.html http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RepeatedStratifiedKFold.html
谢谢RepeatedStratifiedKFold
.