如何将完整数据集按50:50比例拆分为训练集和测试集
全量DATASET按50:50拆分为训练集、测试集操作方法
你找到的仅拆分X变量的方案,大多是默认用户已经提前把数据集拆成了特征矩阵X和标签向量y的场景,直接对完整数据集做拆分不需要提前切分X、y,以下是两种最常用环境下可直接运行的操作步骤:
Python 环境(机器学习场景最常用)
- 前置依赖安装:打开终端执行命令安装需要的库,已经装过可以跳过
pip install pandas scikit-learn - 如果你已经把全量数据读取到变量名为
DATASET的DataFrame中,直接运行以下代码即可完成拆分:
from sklearn.model_selection import train_test_split # test_size=0.5 代表测试集占比50%,random_state设固定值保证每次拆分结果可复现 train_set, test_set = train_test_split( DATASET, test_size=0.5, random_state=42 ) # 运行后打印结果验证拆分比例 print(f"训练集样本量:{len(train_set)},测试集样本量:{len(test_set)}")
- 关键说明:直接传入完整
DATASET时,函数会按行做随机抽样拆分,所有列(包括特征列、标签列、其他附属列)都会完整保留在两个子集中,不会出现只拆分X变量的情况。
R 语言环境(统计分析场景常用)
- 不需要安装额外第三方包,直接使用基础R函数即可完成拆分,代码如下:
# 固定随机种子保证结果可复现 set.seed(42) # 生成占比50%的随机抽样行索引 sample_idx <- sample(1:nrow(DATASET), size = floor(0.5 * nrow(DATASET))) # 按索引拆分全量数据集 train_set <- DATASET[sample_idx, ] test_set <- DATASET[-sample_idx, ] # 打印结果验证拆分比例 cat(sprintf("训练集样本量:%d,测试集样本量:%d", nrow(train_set), nrow(test_set)))
新手避坑提示:如果后续建模需要单独取X、y变量,在拆分完成后再从
train_set和test_set里分别提取即可,不要在拆分前就把全量数据切成X和y单独拆分,避免出现行对应错位的问题。
内容的提问来源于stack exchange,提问作者L00rdAjduk
相关产品推荐
相关产品推荐

