You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

机器学习场景下循环遍历分层索引时.loc()赋值逻辑疑问

问题解答
  • 你认知里“循环每次赋值会覆盖变量,最终仅保留最后一次结果”的逻辑本身完全正确,运行结果和推测不符的核心原因出在拆分类的n_splits参数配置上:
    1. 机器学习入门场景做分层训练集/测试集拆分时,最常用的是StratifiedShuffleSplit类,且默认会把参数n_splits设为1,这时候split.split()方法只会生成1组训练、测试索引,整个for循环仅执行1次,不存在赋值覆盖的情况,最终strat_train_set和strat_test_set就是拆分好的唯一一份数据集,和你实际运行的结果一致。
    2. 如果你把n_splits设置为大于1的数值(比如交叉验证场景常用的5、10),运行你贴的代码最终确实只会保留最后一轮的拆分结果,不可能存储多份数据集。你误以为“两个变量存储了数据集集合”,大概率是把单份数据集的多行结构、或是拆分生成器返回的多组索引和变量实际存储的内容搞混了。
  • 如果你确实需要存储所有折的拆分结果,需要手动做追加操作,参考代码如下:
# 先初始化空列表存储所有拆分结果
strat_train_all = []
strat_test_all = []
for train_index, test_index in split.split(housing, housing["income_cat"]):
    strat_train_all.append(housing.loc[train_index])
    strat_test_all.append(housing.loc[test_index])

内容的提问来源于stack exchange,提问作者Chanaka Perera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 04:18:02