对于序数特征,使用标签编码是有意义的。但是对于分类特征,我们使用一种热编码。但是这些是输入功能的约定。但是对于输出变量,如果输出标签是分类的,是否有必要使用一种热编码?或者我也可以使用标签编码?哪一个更好?
我正在训练一个有120个班级的水果分类器。我使用在ImageNet上经过预训练的ResNet50模型作为特征提取器,并使用这些特征来训练Logistic回归分类器。由于有120个类别,对于标签编码,标签的范围为0到119。训练模型以使其保持标签编码是否可以?我之所以这样问是因为在sklearn的以下文档中,他们允许我这样做:
sklearn.preprocessing.LabelEncoder
他们在说:
...“此转换器应用于编码目标值,即y,而不是输入X。”
但是我很困惑为什么可以这样做,因为在此标签编码中,每个输出变量的优先级都没有使用热编码时的优先级。
但是对于输出变量,如果输出标签是分类的吗?
不,这对您而言没有必要,也没有关系。另一方面,并非所有的算法都可以非热编码的方式返回数据:
RandomForest
可以使用标签编码进行分类,因为它是根据内部if样条件(简化)返回N个目标值之一”(简化)。RandomForest
。它无法返回[samples, labels]
之类的值(用于4个样本),因为[0, 2, 18, 25]
之类的操作破坏了梯度(在计算准确性之类的东西时,它沿着列获取标签的索引,但是我不认为它是其中的一部分网络)。仍然有许多框架允许您将标签编码为序数,因为这样可以提高内存效率。您可以看到PyTorch的argmax
,其中包含保存为序数值的目标。
正如注释中所指出的,它们都是标签的编码,可以根据需要轻松地进行传输。