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

如何将模型预测的独热编码结果转换为原始类别向量?

如何将Keras模型输出的独热编码预测结果转换为原始类别向量?

这个问题很常见,尤其是在使用独热编码做分类任务后,需要把模型输出的概率结果转回原始类别标签。结合你的代码,我给你两种简单的解决方法:


方法一:直接利用np.argmax映射(适用于二分类且类别为0/1的场景)

你的任务是二分类(最后一层输出2个单元+softmax),而且原始target是0和1的整数类别。因为pd.get_dummies(y)生成的独热编码列是按类别升序排列的(即第一列对应0,第二列对应1),所以用np.argmax取概率最大的索引,直接就是原始类别值:

# 获取每个样本概率最大的类别索引,结果就是原始类别向量
predicted_classes = np.argmax(predictions, axis=1)

这样得到的predicted_classes就是和独热编码前的原始y完全一致的格式,比如array([0, 1, 0, 1, ...])。


方法二:基于pd.get_dummies的列映射(通用所有类别场景)

如果你的原始类别不是0/1,或者后续可能扩展为多分类,这个方法更通用。因为pd.get_dummies生成的DataFrame的列名就是原始的类别标签,我们可以通过索引映射回去:

# 1. 获取每个样本概率最大的类别索引
pred_indices = np.argmax(predictions, axis=1)

# 2. 获取独热编码对应的原始类别标签(从之前的y中提取)
# 这里y是pd.get_dummies生成的DataFrame,columns就是原始类别
original_class_labels = y.columns.astype(int)  # 如果原始类别是字符串则去掉astype(int)

# 3. 将索引转换为原始类别向量
predicted_classes = original_class_labels[pred_indices]

为什么这个方法可靠?

pd.get_dummies会自动按类别值的升序排列列,只要你的原始类别集合不变,列的顺序就固定,所以索引和原始类别是一一对应的。


验证方法

你可以用测试集的y_test来验证转换是否正确:

# 把独热编码的y_test转回原始类别
y_test_original = y_test.columns[np.argmax(y_test.values, axis=1)]

# 模型预测X_test
test_predictions = model.predict(X_test)
test_pred_classes = np.argmax(test_predictions, axis=1)

# 对比准确率(结果应该和模型训练时输出的accuracy一致)
print(np.mean(test_pred_classes == y_test_original.astype(int)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:35:25