在实现交叉验证设置方面,我遇到了一些麻烦,我在一篇论文中看到了这一点。在这张附图中基本上说明了这一点:
因此,它说,他们使用5倍,这意味着k = 5
。但随后,作者说,他们重复了20次交叉验证,总共创造了100倍。这是否意味着我可以使用这段代码:
kfold = StratifiedKFold(n_splits=100, shuffle=True, random_state=seed)
因为基本上我的代码也能产生100倍。有什么建议吗?
发布于 2018-02-28 13:39:49
我很肯定他们在谈论RepeatedStratifiedKFold
。你有两个简单的方法来创建5倍的20倍.
方法1:
为了你的案子,n_splits=5, n_repeats=20
。下面的代码只是来自scikit学习网站的示例。
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]
方法2:
你可以通过循环达到同样的效果。请注意,
random_state
不能是一个固定的数字,否则您将得到相同的5倍,20次。 I在范围内(20):kfold = StratifiedKFold(n_splits=5,shuffle=True,random_state=i)
为什么它与您的代码不同?
假设你有10000个数据点,你创造了100倍。1倍大小= 100倍。您的培训set=9900与验证set=100。
RepeatedStratifiedKFold
为您的模型创建5倍,每个折叠是2000。然后,它重复5倍,一次又一次,20次。这意味着您可以实现100倍,但有一个大得多的验证集。根据您的目标,您可能需要一个更大的验证集,例如。要有足够的数据进行正确的验证,而RepeatedStratifiedKFold
使您能够以不同的方式创建相同数量的折叠(具有不同的培训-验证比例)。除此之外,我不确定是否还有其他目标。
selection.RepeatedStratifiedKFold.html
谢谢你RepeatedStratifiedKFold
。
发布于 2017-04-25 14:52:18
关于
for i in range(100):
kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=i)
https://stackoverflow.com/questions/43613726
复制相似问题