假设一个神经网络 (NN),其中每个训练示例都有一堆特征,其中一个特征是性别信息(男性或女性)。
由于它是分类数据,因此我不断看到以下内容:
If male, gender = 0
If female, gender = 1
当神经网络输入特征时,如果性别 = 男性,(gender x any_weight) 的结果将始终为 0。如果性别 = 女性,则 (gender x any_weight) 将等于体重值。
在我看来,反向传播更新权重的能力会受到某种程度的限制,因为无论你如何更改权重,如果性别 = 男性,(gender x any_weight) 都会继续给出 0。
从这个角度来看,这样说听起来更好:
If male, gender = 1
If female, gender = 2
这样我们就可以确保(gender x any_weight)的结果不会为0。
但我可能在这里遗漏了一些东西,因为我一直看到分类(在大多数情况下)似乎从 0 开始。 也许在这里有更多经验的人可以更好地澄清并解释我在这里误解的内容?
使用 0 和 1 与使用 1 和 2 相同吗?或者如果没有,我们应该选择哪一个?
最佳答案
分类数据通常使用 one-hot 编码进行编码。因此,在您的情况下 [1,0] ifmale else [0,1]
,您可以想到一个由 0 组成的向量,在给定索引处只有 1。由于这种不同的“路径”,权重将根据您拥有的功能而被激活,从而使网络相对更容易使用这些功能。另一种方法是使用 -1 和 1 对其进行编码,并且还有其他方法 standardising data .
为了回答你的问题,就多层感知器而言,这并不重要,当输入为0时,权重确实不会更新,但隐藏层将被调整以识别这一点,通过识别我的意思是你仍然有偏见来补偿 0 输入(感谢评论)。类似地,当输入为 1,2 时,权重将进行调整以区分它们。对于二进制数据,-1,1 效果很好,因为它就像任何权重的开关。我建议你尝试一下你的想法,看看会发生什么,有很好的demos online .
关于tensorflow - 神经网络中的分类特征值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50296252/