Keras多分类模型预测标签映射错误,LabelEncoder使用问题排查
问题排查与解决方案
1. 输入预处理不一致(核心大概率原因)
你当前预测阶段调用prepare_free_text_inputs(data, data),如果该函数内部实现逻辑是对第一个输入参数拟合文本预处理器(如Tokenizer、TF-IDF转换器等),再对两个参数做转换,那么预测阶段仅用当前单样本拟合预处理器,得到的词表、转换规则和训练阶段用全量训练集拟合的结果完全不同,输入给模型的数据分布完全错误,自然会出现预测结果和预期不符的问题。
正确做法:训练阶段提前保存拟合完成的文本预处理器,预测阶段直接调用该预处理器的transform方法处理输入数据,不要重新做拟合操作。
2. 标签映射方式不规范
你现在使用np.unique(y_train)[class_index]做预测索引到标签的映射,虽然np.unique默认升序排序的逻辑和LabelEncoder的默认编码逻辑一致,但这种实现非常不严谨,一旦后续标签输入顺序、去重逻辑发生变化,就会出现索引和标签的映射错位。
正确做法:训练阶段保存拟合完成的LabelEncoder实例,预测阶段直接调用inverse_transform方法得到对应标签,不需要手动做映射。示例代码如下:
# 训练阶段保存LabelEncoder实例 le = LabelEncoder() le.fit(y_train) y_train_enc = le.transform(y_train) y_test_enc = le.transform(y_test) # 预测阶段直接反向转换 classes = np.argmax(res, axis=1) pred_label = le.inverse_transform(classes)
3. 其他可排查点
- 确认训练时输入数据的列顺序、所有特征处理逻辑和预测阶段完全一致,比如如果有数值特征的归一化/标准化操作,预测阶段要使用训练集统计得到的均值、标准差做转换,不能用单样本自身的统计值计算。
- 你的模型测试准确率达到92%,说明模型本身的拟合效果是符合预期的,问题100%出在单样本预测的预处理流程和训练/测试阶段的预处理逻辑不一致。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

