StratifiedKFold每次运行循环时拆分结果是否一致?
关于StratifiedKFold划分索引一致性的问题
问题内容
在Logistic Regression任务中使用StratifiedKFold配合网格搜索,初始化代码如下:
skf = StratifiedKFold(n_splits=6, shuffle=True, random_state=SEED)
针对每组参数执行以下循环:
for fold, (trn_idx, test_idx) in enumerate(skf.split(X, y)):
疑问:每次运行该循环时,每个fold对应的trn_idx和test_idx是否完全相同?例如第一次运行时fold0的trn_idx为[1,2,5,7,8]、test_idx为[3,4,6],后续多次运行循环时,fold0的这两个索引是否仍保持一致?
回答
是的,每次运行循环时,每个fold对应的训练/测试索引都会完全一致。
核心原因在于你初始化StratifiedKFold时指定了固定的random_state=SEED:
- 开启
shuffle=True时,数据会先被随机洗牌再划分,而random_state固定了洗牌的随机种子 - 只要
SEED的值不变,每次调用skf.split(X, y)生成的划分逻辑就完全相同,每个fold对应的trn_idx和test_idx自然不会变化
如果没有指定random_state,或者每次运行时SEED的取值不同,那每次生成的索引才会出现差异。
内容的提问来源于stack exchange,提问作者Yana
相关产品推荐
相关产品推荐

