标签编码对于输出标签是否足够?

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

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

sklearn.preprocessing.LabelEncoder

在这里他们说:

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

但我感到困惑,为什么这样做是可以的,因为在标签编码中,每个输出变量不会像使用独热编码那样获得相同的优先级。


回答:

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

不,这不是必要的,在你的情况下也不会有影响。另一方面,并不是所有算法都能以非独热编码的方式返回数据:

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

尽管如此,许多框架允许你将标签编码为有序的,因为这样更节省内存。你可以查看PyTorch的 torch.nn.CrossEntropyLoss,它接受以有序值保存的目标。

正如评论中指出的,这两种都是标签的编码方式,并且可以根据需要轻松转换。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注