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

如何在5折K-Fold拆分迭代中打印当前拆分序号?

解决KFold迭代时打印拆分编号的问题

嘿,这个问题很容易搞定!你只需要用Python的enumerate()函数来同时迭代拆分的索引和对应的训练/测试集索引就行。因为KFold.split()返回的是训练集和测试集的索引对,用enumerate可以给每一组拆分加上序号,注意默认序号从0开始,所以我们可以通过设置start=1直接得到从1到5的拆分编号。

另外要提醒你:原代码里一开始定义的kf_train和kf_test空列表,在循环里被同名变量覆盖了,这会导致你后续如果想保存所有拆分的索引时出问题,建议把循环里的变量名改成train_idx和test_idx这类更清晰的名字,避免变量冲突。

修改后的完整代码如下:

import numpy as np
from sklearn.model_selection import KFold

kf = KFold(n_splits=5) # Define the split - into 5 folds
# 定义空列表保存所有拆分的索引(变量名和循环内区分开)
all_train_indices = []
all_test_indices = []

# 使用enumerate获取拆分编号,start=1让序号从1开始
for split_num, (train_idx, test_idx) in enumerate(kf.split(df), start=1):
    print(f'Split #{split_num}')
    # 保存当前拆分的索引(如果需要的话)
    all_train_indices.append(train_idx)
    all_test_indices.append(test_idx)
    
    for col_name, col_data in df.iteritems():
        print('Feature: ', col_name)
        print('Mean: ', np.mean(col_data))
        print('Standard Deviation: ', np.std(col_data))
        print('\n')

关键细节说明:

  • enumerate(kf.split(df), start=1):start=1参数让枚举的起始值设为1,这样直接就能输出Split #1到Split #5,不用再手动做split_num + 1的计算。
  • 变量重命名:把循环内的kf_train/kf_test改成train_idx/test_idx,既避免了和全局列表变量的冲突,也让代码逻辑更易懂——一眼就能看出这是索引值,而不是数据集本身。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:02:51