如何在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
相关产品推荐
相关产品推荐

