Ary*_*ema 2 python scikit-learn keras
我在实现我在论文中看到的交叉验证设置时遇到了一些麻烦。基本上它在这张附图中进行了解释:

所以,它说他们使用 5 折,这意味着k = 5. 但是随后,作者说他们重复了 20 次交叉验证,总共产生了 100 次折叠。这是否意味着我可以只使用这段代码:
kfold = StratifiedKFold(n_splits=100, shuffle=True, random_state=seed)
Run Code Online (Sandbox Code Playgroud)
因为基本上我的代码也产生了 100 倍。有什么推荐吗?
我很确定他们在谈论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]
Run Code Online (Sandbox Code Playgroud)
方法二:
您可以通过循环实现相同的效果。注意
random_state不能是固定数字,否则20次你会得到同样的5折。Run Code Online (Sandbox Code Playgroud)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并使您能够以不同的方式(具有不同的训练验证比例)创建相同数量的折叠。除此之外,我不确定是否还有其他目标。
谢谢RepeatedStratifiedKFold。
| 归档时间: |
|
| 查看次数: |
5811 次 |
| 最近记录: |