2

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

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

sklearn.preprocessing.LabelEncoder

他们在这里说:

...“这个转换器应该用于编码目标值,即 y,而不是输入 X。”

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

4

1 回答 1

1

但是对于输出变量,如果输出标签是分类的,是否有必要使用一种热编码?

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

  • RandomForest可以使用标签编码进行分类,因为它“只是”根据内部类似 if 的条件(简化)返回 N 个目标值之一。
  • ResNet50,因为它是一个神经网络,将返回[samples, labels]带有 logits(非归一化概率)或计算损失的概率的矩阵。它不能返回像[0, 2, 18, 25](对于 4 个样本)这样的值,因为像argmax破坏梯度这样的操作(在计算精度等内容时,它沿着列获取标签的索引,但我不认为它是网络的一部分)。

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

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

于 2020-05-11T17:49:02.023 回答