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

平衡多分类数据集拆分后测试集失衡的原因及是否需平衡咨询

数据集拆分后测试集类别不平衡的原因及处理建议

问题原因

你使用的train_test_split默认采用纯随机抽样(stratify参数默认值为None),不会按照原始数据集的类别比例进行拆分。虽然你的原始数据集是8类各100个样本的平衡分布,但单类样本数(100个)不算特别多,按20%比例抽取测试集时,随机抽样的概率波动会导致部分类别在测试集中的数量偏离预期的20个(100*0.2),出现第二类仅10个样本的情况是概率上的正常现象。

如果想要拆分后训练集和测试集都严格保持原始类别比例,只需在train_test_split中指定stratify参数为标签列即可启用分层抽样,修正后的代码如下:

X_train, X_test, y_train, y_test = train_test_split(data.iloc[:, :-1], data.iloc[:, -1], test_size=0.2, random_state=42, stratify=data.iloc[:, -1])

是否需要平衡测试集?

绝对不需要人为调整测试集的类别分布。

测试集的核心作用是模拟模型在真实业务场景中的数据分布,强行平衡测试集会让模型评估结果脱离实际:比如真实场景中某类样本本来就稀缺,人为补全后,模型的准确率、召回率等指标会被高估,无法反映模型在真实环境下的表现。

如果你的任务关注少数类的识别效果,正确的做法是在训练阶段处理:比如对训练集的少数类做过采样、对多数类做欠采样,或者在模型训练时使用加权损失函数(给少数类样本更高的权重)。测试集需保持拆分后的原始状态,同时改用更适合不平衡数据的评估指标(比如F1分数、混淆矩阵、AUC-ROC,而非仅看整体准确率)来衡量模型性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:52:46