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

如何在Scikit-learn中使用train_test_split控制类别比例划分数据

解决Scikit-learn train_test_split类别比例不稳定的问题

这问题我太熟了!你遇到的是不平衡数据集划分时类别比例失控的典型情况——因为默认的train_test_split是完全随机抽样,对于像b这种只占10%的小样本类别,很容易出现抽不到或者比例严重偏离原数据的情况。

核心解决方案:使用stratify参数

Scikit-learn的train_test_split专门提供了stratify参数,它会严格按照原始数据的类别比例来划分训练集和测试集,确保两边的类别分布和原数据保持一致。

修改你的代码如下:

from sklearn.model_selection import train_test_split
from collections import Counter
x_coords = range(100)
labels = ['a']*90 + ['b']*10
# 新增stratify参数,传入标签列表
x_train, x_test, label_train, label_test = train_test_split(x_coords, labels, test_size=20, stratify=labels)
print(Counter(label_test))

效果说明

修改后每次运行,测试集的类别比例都会严格遵循原数据的9:1,也就是稳定输出Counter({'a': 18, 'b': 2}),再也不会出现全是a类的情况。

另外这个参数对多分类问题同样适用,不管你有多少个类别,它都会保证每个类别的划分比例和原数据一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:27:25