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

Bagging模型预测新样本后LabelEncoder.inverse_transform仅返回2个结果的原因排查求助

问题原因与解决方案

嘿,我一眼就发现了两个关键问题,其中一个直接导致了你得到的结果不符合预期:

1. 最直接的错误:误用了.all()方法

你在调用le.inverse_transform时,错误地在预测结果后添加了.all():

le.inverse_transform(bagging.predict(sample_images).all())

.all()是numpy数组的方法,它会对数组中所有元素进行逻辑与运算,最终返回一个单一的布尔值(比如数组里所有非零元素会被视为True,只有所有元素都为真时返回True,否则返回False)。

而le.inverse_transform需要接收的是编码后的标签数组(长度和你的样本数一致,这里是9个元素),不是单个布尔值。当你传入这个布尔值时,它会被当作整数1(True对应1,False对应0)去查找对应的类别,自然得不到你想要的9个结果。

修正代码

直接去掉.all(),传入完整的预测数组:

predicted_encoded = bagging.predict(sample_images)
predicted_labels = le.inverse_transform(predicted_encoded)
# 现在predicted_labels就是长度为9的数组,完全对应你预期的9个标签

2. 潜在的LabelEncoder使用错误:拟合顺序颠倒

你当前的标签编码逻辑存在不规范的地方:

le.fit(test_labels)
list(le.classes_)
test_labels_encoded = le.transform(test_labels)
le.fit(train_labels)
train_labels_encoded = le.transform(train_labels)

正确的做法应该是只在训练集标签上拟合LabelEncoder,然后用同一个编码器去转换训练集和测试集的标签。如果先拟合测试集再重新拟合训练集,会导致编码器的类别映射被覆盖,万一测试集和训练集的类别集合有差异,会直接导致标签编码不匹配——虽然你当前测试集准确率很高,但这可能是巧合,长期来看会埋下隐患。

修正后的标签编码代码

from sklearn import preprocessing
le = preprocessing.LabelEncoder()
# 只在训练集标签上拟合编码器
le.fit(train_labels)
# 用同一个编码器转换训练集和测试集标签
train_labels_encoded = le.transform(train_labels)
test_labels_encoded = le.transform(test_labels)
# 查看类别映射关系
list(le.classes_)

这样修改后,你的标签编码逻辑才是规范且可靠的,同时也能确保新样本预测时的标签转换完全匹配训练时的映射规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:32:51