机器学习多分类:为什么使用’one-hot’编码而不是数字

我目前正在使用TensorFlow处理一个分类问题,我对机器学习领域还比较陌生,但有些事情我还不太明白。

我已经成功尝试过训练模型,使其输出y张量如下:

y = [0,0,1,0]

但我不理解背后的原理……

为什么不直接训练同一模型输出诸如y = 3y = 4这样的类别呢?

这样似乎更加灵活,因为我可以想象一个有200万种可能类别的多分类问题,用0到2,000,000之间的数字输出会比每次结果输出一个包含2,000,000项的张量更加高效。

我错过了什么?


回答:

理想情况下,你可以训练模型对输入实例进行分类,并产生一个单一输出。比如

y=1表示input=dogy=2表示input=airplane。然而,这种方法会带来很多问题:

  1. 如何解释y=1.5这样的输出?
  2. 为什么我要像处理连续数据一样尝试回归一个数字,而实际上我在处理离散数据?

事实上,你正在将一个多类别分类问题当作回归问题来处理。这在局部上是错误的(除非你在做二分类,在那种情况下,正输出和负输出是你所需的全部)。

为了避免这些(以及其他)问题,我们使用一个最终的神经元层,并将高激活与正确的类别相关联。

one-hot编码表示你希望强制你的网络在某个输入存在时产生单一的高激活输出。

这样,每个input=dog的输出将是1, 0, 0,依此类推。

通过这种方式,你正确地处理了一个离散分类问题,产生了离散且易于解释的输出(实际上,你总是会使用tf.argmax提取激活最高的输出神经元,即使你的网络没有学会产生完美的one-hot编码,你也能无疑地提取出最可能正确的输出)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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