分类模型训练:数据集拆分时ValueError错误的原因咨询
搞定这个分层抽样的 ValueError 错误
错误到底说的啥?
这个错误直白得很:你要拆分出来的测试集样本数是9,但你的数据集一共有11个类别。用stratify做分层抽样的时候,要求每个类别在测试集里至少得有1个样本对吧?那9个样本要分给11个类别,肯定有至少2个类别分不到样本,这分层抽样根本做不了,所以Python就直接给你报错了。
你的代码哪里出问题了?
看你拆分测试集的这行代码:
_, X_test, _, y_test = train_test_split(filtered_features_FM_T, y_T_Cat, stratify=y_T_Cat)
你没指定test_size,train_test_split默认会拿总样本的20%当测试集。问题就出在你的测试数据集filtered_features_FM_T总样本量太小了——20%算下来只有9个样本,可类别却有11个,这不就撞车了嘛。
怎么解决?
给你几个靠谱的方向:
- 调大测试集的大小:如果测试数据集总样本够的话,直接指定
test_size为至少11,比如:
要是总样本数够多,也可以用比例,比如_, X_test, _, y_test = train_test_split(filtered_features_FM_T, y_T_Cat, test_size=11, stratify=y_T_Cat)test_size=0.3,只要算出来的样本数≥11就行。 - 暂时去掉分层抽样:如果只是临时跑个测试,不在乎类别分布的话,可以删掉
stratify=y_T_Cat参数。但注意哈,这样测试集的类别分布可能和整体差很多,正式评估的时候别这么干。 - 检查测试数据集本身:如果你的测试集样本量本来就比类别数还少,那这个数据集可能根本不适合做测试——要么补点测试样本,要么把相似的类别合并一下,减少类别总数。
内容的提问来源于stack exchange,提问作者Momo
相关产品推荐
相关产品推荐

