如何将数据集拆分为5折交叉验证独立子集以替代传统80-20划分
5折交叉验证子集拆分实现
你可以直接使用scikit-learn中的KFold工具完成拆分,以下是完整可运行代码:
首先导入依赖库:
import pandas as pd from sklearn.model_selection import KFold
示例数据集定义(和你提供的一致):
X = pd.DataFrame({'a': [1, 3, 5, 7, 4, 5, 6, 4, 7, 9], 'b': [3, 5, 6, 2, 4, 6, 7, 8, 7, 8], 'c': [2, 3, 4, 5, 6, 7, 8, 9, 2, 1]} ) y = [2, 3, 1, 1, 3, 2, 1, 3, 2, 2]
执行5折拆分逻辑:
# 初始化5折拆分器,shuffle=True表示先打乱数据集再拆分,random_state固定保证结果可复现 kf = KFold(n_splits=5, shuffle=True, random_state=42) # 存储所有折的特征和标签子集 X_folds = [] y_folds = [] for _, test_idx in kf.split(X): X_folds.append(X.iloc[test_idx].reset_index(drop=True)) y_folds.append([y[i] for i in test_idx]) # 按需求赋值为X1~X5、y1~y5变量 X1, X2, X3, X4, X5 = X_folds y1, y2, y3, y4, y5 = y_folds
补充说明:
- 拆分得到的5个子集相互无重叠,示例数据集共10条样本,每折刚好包含2条样本
- 如果不需要打乱原始数据顺序,把
shuffle=True改为shuffle=False即可 - 如果是分类任务,希望每折的标签类别分布和原始数据集保持一致,可以将
KFold替换为StratifiedKFold,使用方法完全相同
内容的提问来源于stack exchange,提问作者user12587364
相关产品推荐
相关产品推荐

