tensorflow - 神经网络中的分类特征值
问题描述
假设一个神经网络 (NN),其中每个训练示例都有一堆特征,其中一个特征是性别信息(男性或女性)。
由于它是分类数据,因此我不断看到以下内容:
If male, gender = 0
If female, gender = 1
当 NN 由输入特征馈送时,如果性别 = 男性,则 (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] if male else [0,1]
,您可以考虑在给定索引处只有 1 的零向量。由于这些不同的“路径”,权重将根据您拥有的功能被激活,从而使网络相对更容易使用这些功能。另一种方法是使用 -1 和 1 对其进行编码,还有其他标准化数据的方法。
要回答您的问题,就多层感知器而言,这无关紧要,当输入为 0 时,权重确实不会更新,但隐藏层将被调整以识别,通过识别我的意思是你仍然有可以补偿 0 输入的偏差(感谢评论)。同样,当输入为 1,2 时,权重会调整以区分它们。对于二进制数据,-1,1 可以很好地工作,因为它就像任何权重的开关一样。我建议你尝试一下你的想法,看看会发生什么,网上有很好的演示。
推荐阅读
- excel - 从excel单元格中获取几个标签
- javascript - 在AngularJS中设置范围之前如何等待图像加载?
- canvas - 是否可以在 Cesium 上放置 HTML 元素(项目)?
- vue.js - 如何在Vue中直接从flask返回JSON格式
- angular - 如何在ngFor内部的表中传递数组值?
- javascript - 当某个 div 存在时如何隐藏元素?
- bash - 括在括号中的 awk 字符串
- php - 使用 php 从嵌套数组创建数组
- model-view-controller - 如何将数据列表到模型和模型的数据通过一个后处理从视图发送到控制器?
- r - R 单元格合并和居中内容中的 Openxlsx