标签编码是否足以输出标签?

Is label encoding enough for output labels?

对于序数特征,使用标签编码是有意义的。但是对于分类特征,我们使用一种热编码。但这些是输入特征的约定。但是对于输出变量,如果输出标签是分类的,是否有必要使用一种热编码?或者我也可以使用标签编码?哪个更好?

我正在训练一个有 120 个 类 的水果分类器。我正在使用在 ImageNet 上预训练的 ResNet50 模型作为特征提取器,并使用这些特征来训练逻辑回归分类器(迁移学习)。由于有 120 类,对于标签编码,标签的范围从 0 到 119。训练模型保持标签编码可以吗?我问这个是因为在以下 sklearn 文档中,他们允许我这样做:

sklearn.preprocessing.LabelEncoder

他们说:

..."This transformer should be used to encode target values, i.e. y, and not the input X."

但我很困惑为什么这样做是可以的,因为在标签编码中,每个输出变量都没有获得与使用一种热编码时它们获得的优先级相同的优先级。

But for output variable is it necessary to use one hot encoding if the output labels are categorical?

不,这不是必需的,对您的情况也无关紧要。另一方面,并​​非所有算法都可以 return 非单热编码方式的数据:

  • RandomForest 可以使用标签编码进行分类,因为它是 "just" return 基于内部 if-like 条件(简化)的 N 个目标值之一。
  • ResNet50,因为它是一个神经网络,将 return 矩阵 [samples, labels] 与 logits(非标准化概率)或计算损失的概率。它不能 return 像 [0, 2, 18, 25] 这样的值(对于 4 个样本),因为像 argmax 这样的操作会破坏梯度(在计算准确度之类的东西时,它沿着列获取标签的索引但是我不认为它是网络的一部分)。

仍然有许多框架允许您将标签编码为序号,因为它的内存效率更高。你可以看到 PyTorch 的 torch.nn.CrossEntropyLoss,它接受保存为序数值的目标。

正如评论中所指出的,两者都是标签的编码,可以根据需要轻松传输。