调用train_test_split划分数据集触发空训练集ValueError报错如何解决?
报错原因
- 直接触发原因是传入
train_test_split的x_data或y_data样本总数为0,对应报错提示中的n_samples=0。按照你设置的test_size=0.1计算,划分后测试集、训练集的样本数均为0,不满足sklearn的划分规则,因此抛出ValueError。 - 空数据集一般是上游处理逻辑出错导致:比如数据读取时路径填错没加载到有效数据、数据清洗的过滤规则太严把所有样本都删了、特征处理操作不当清空了数据集等。
解决方法
- 先校验输入数据有效性:在调用划分函数前加校验代码,确认
x_data和y_data样本数匹配且不为0,示例如下:
print("特征样本数:", len(x_data), "标签样本数:", len(y_data)) assert len(x_data) == len(y_data), "特征和标签的样本数量不匹配" assert len(x_data) > 0, "输入数据集为空"
- 排查上游数据流程:检查数据读取的路径、查询参数是否正确,逐一验证数据清洗、特征工程的每一步输出,修正导致全量样本被删除的错误逻辑。
- 若本身数据集样本量很小:可以降低测试集占比,比如把
test_size改成0.05,或者直接用K折交叉验证来评估模型,不需要做固定比例的训练测试集划分。 - 特殊场景下也可以手动指定
train_size参数,保证训练集样本数至少大于0。
内容的提问来源于stack exchange,提问作者Tuba Umer
相关产品推荐
相关产品推荐

