为啥要用one-hot编码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥要用one-hot编码相关的知识,希望对你有一定的参考价值。
参考技术A 将离散型特征使用one-hot编码,确实会让特征之间的距离计算更加合理。比如,有一个离散型特征,代表工作类型,该离散型特征,共有三个取值,不使用one-hot编码,其表示分别是x_1 = (1), x_2 = (2), x_3 = (3)。两个工作之间的距离是,(x_1, x_2) = 1, d(x_2, x_3) = 1, d(x_1, x_3) = 2。那么x_1和x_3工作之间就越不相似吗?显然这样的表示,计算出来的特征的距离是不合理。那如果使用one-hot编码,则得到x_1 = (1, 0, 0), x_2 = (0, 1, 0), x_3 = (0, 0, 1),那么两个工作之间的距离就都是sqrt(2).即每两个工作之间的距离是一样的,显得更合理。机器学习多分类:为啥使用“one-hot”编码而不是数字
【中文标题】机器学习多分类:为啥使用“one-hot”编码而不是数字【英文标题】:Machine learning multi-classification: Why use 'one-hot' encoding instead of a number机器学习多分类:为什么使用“one-hot”编码而不是数字 【发布时间】:2017-11-29 07:32:14 【问题描述】:我目前正在研究 tensorflow 的分类问题,我是机器学习领域的新手,但我什么都不懂。
我已成功尝试训练输出y
张量的模型,如下所示:
y = [0,0,1,0]
但是看不懂背后的原理……
为什么不只训练相同的模型来输出诸如y = 3
或y = 4
之类的类
这似乎更灵活,因为我可以想象有 200 万个可能的类的多分类问题,输出 0-2,000,000 之间的数字比为每个输出 2,000,000 个项目的张量更有效结果。
我错过了什么?
【问题讨论】:
你只需要设置一个位来分类,如果你考虑你的输出层只有一个功能应该激活,其他的都是0。onehot经常用于fpga的状态编码更快速、更安全地标记内容 【参考方案1】:答案在于如何计算最终张量或单个值。在 NN 中,您的 y=3
将通过对前一层的值进行加权求和来构建。
尝试针对单个值进行训练将暗示类别 ID 之间存在线性关系,其中不存在类别 ID:对于真实值 y=4
,即使类别是随机的,输出 y=3
也会被认为优于 y=1
, 并且可能是1: dogs, 3: cars, 4: cats
【讨论】:
【参考方案2】:理想情况下,您可以训练模型对输入实例进行分类并生成单个输出。类似的东西
y=1
表示input=dog
,y=2
表示input=airplane
。然而,这样的方法会带来很多问题:
-
如何解释输出
y=1.5
?
为什么我尝试回归一个数字,就像我在处理连续数据一样,而实际上我在处理离散数据?
实际上,您正在做的是将多类分类问题视为回归问题。 这是局部错误的(除非您进行二元分类,在这种情况下,正负输出就是您所需要的一切)。
为避免这些(和其他)问题,我们使用最后一层神经元,并将高激活与正确的类相关联。
one-hot 编码表示您希望在存在特定输入时强制网络具有单个高激活输出。
这样,每个input=dog
都会有1, 0, 0
作为输出等等。
通过这种方式,您可以正确处理离散分类问题,产生离散输出并且可以很好地解释(事实上,您将始终使用tf.argmax
提取具有最高激活的输出神经元,即使您的网络没有' t 学会了生成完美的 one-hot 编码,您将能够毫无疑问地提取最有可能正确的输出)
【讨论】:
【参考方案3】:神经网络使用梯度下降来优化损失函数。反过来,这个损失函数需要是可微的。
离散输出将(确实是)分类网络的完全有效且有价值的输出。问题是,我们不知道如何有效地优化这个网络。
相反,我们依赖于连续损失函数。这种损失函数通常基于与每个标签的概率或多或少相关的东西——为此,您需要一个每个标签都有一个值的网络输出。
通常情况下,您描述的输出是通过这些伪概率的 argmax 从这个软的、连续的输出推导出来的。
【讨论】:
以上是关于为啥要用one-hot编码的主要内容,如果未能解决你的问题,请参考以下文章
如何用pandas将某列one-hot编码后,修改原dataframe
独热编码(one-hot)是什么?什么数据类型需要进行独热编码?pandas如何进行独热编码(one-hot)?
机器学习入门-数据预处理-数字映射和one-hot编码 1.LabelEncoder(进行数据自编码) 2.map(进行字典的数字编码映射) 3.OnehotEncoder(进行one-hot编码)