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

如何在Sklearn的LabelBinarizer中查找独热编码后的类别标签

如何将CIFAR数据集的独热编码标签映射回原始类别?

我在处理CIFAR数据集做图像分类时,用Sklearn的LabelBinarizer对类别标签做了独热编码,代码如下:

lists = ['frog', 'truck', 'deer', 'automobile', 'bird', 'horse', 'ship', 'cat', 'dog', 'airplane']
from sklearn.preprocessing import LabelBinarizer
label_binarizer = LabelBinarizer()
label_binarizer.fit(lists)
def one_hot_encode(x):
    return label_binarizer.transform(x)

# y_train为训练标签列表
y_train = one_hot_encode(y_train)
print(y_train[0]) # 输出为[0 0...

现在想知道怎么把这些独热编码结果转回对应的原始类别标签?


刚好碰到过类似的需求,LabelBinarizer其实已经内置了对应的工具,两种方式都能轻松实现:

方法1:使用inverse_transform()方法

这是最直接的方式,LabelBinarizer的inverse_transform()方法可以直接把独热编码数组转换回原始标签。注意传入的参数需要是二维数组(哪怕只有一个样本):

# 针对单个独热编码样本
original_label = label_binarizer.inverse_transform([y_train[0]])
print(original_label)  # 输出类似 ['frog'] 这样的原始类别

# 如果要批量转换整个y_train数组
original_labels = label_binarizer.inverse_transform(y_train)

方法2:利用classes_属性

LabelBinarizer在fit()之后会生成一个classes_属性,它保存了你传入的原始类别列表的顺序,独热编码中1的位置对应的索引就是classes_中的下标。我们可以通过argmax()找到1的位置,再映射回原始标签:

# 找到独热编码中值为1的索引位置
label_index = y_train[0].argmax()
# 根据索引从classes_中获取原始标签
original_label = label_binarizer.classes_[label_index]
print(original_label)  # 输出对应的类别字符串,比如 'frog'

补充说明:你定义的lists顺序就是classes_的顺序,比如lists[0]是'frog',那么独热编码中第一个位置为1的样本对应的类别就是'frog',两者是严格对应的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:31:27