【问题标题】:Java - normalize and denormalize nominal attributes in neural networksJava - 规范化和非规范化神经网络中的名义属性
【发布时间】:2013-03-02 18:08:12
【问题描述】:

您好,我正在构建一个简单的多层网络,该网络使用反向传播进行训练。我目前的问题是我的数据集中的某些属性是名义上的(非数字),我必须对它们进行规范化。我想知道最好的方法是什么。我正在考虑计算每个属性有多少不同的值,并为每个属性分配一个介于 0 和 1 之间的相等数字。例如,假设我的一个属性具有值 A 到 E,那么以下是否合适?:

A = 0
B = 0.25
C = 0.5
D = 0.75
E = 1

我的问题的第二部分是对输出进行非规范化以使其恢复到标称值。为了获得数字表示,我是否首先对数据集中的每个不同的输出属性值执行与上述相同的操作?此外,在我从网络获得输出后,我是否只看到它更接近哪个数字?例如,如果我得到 0.435 作为输出并且我的输出属性值是这样分配的:

x = 0
y = 0.5
z = 1

我是否只找到最接近输出 (0.435) 的值,即 y (0.5)?

【问题讨论】:

  • 另外,顺序是否重要,例如 A 被分配 0 而不是 B 等重要吗?

标签: java arrays neural-network backpropagation


【解决方案1】:

这实际上取决于您尝试规范化的属性的含义,以及您的 NN 中使用的函数。例如,如果您的属性是非线性的,或者您使用的是非线性激活函数,那么线性归一化可能最终不会达到您想要的效果。

如果属性值的范围相对较小,将输入和输出分成一组二进制输入和输出可能会更简单和更准确。

编辑: 如果 NN 能够准确地执行其功能,则其中一个输出将显着高于其他输出。如果没有,您可能会遇到问题,具体取决于您何时看到不准确的结果。

预计在早期训练期间会出现不准确的结果。随着您执行更多的训练迭代,它们应该变得越来越不常见。如果他们不这样做,您的 NN 可能不适合您尝试执行的任务。这可能只是增加隐藏层的大小和/或数量的问题。或者它可能是一个更根本的问题,需要了解您正在尝试做什么。

如果您已成功训练您的 NN,但在处理真实数据集时发现不准确,那么您的训练集可能不够有代表性。

在所有这些情况下,很有可能您的 NN 所做的事情与您希望它做的事情完全不同。所以在这一点上,简单地选择最高的输出是一个很好的猜测。但绝对不能保证它会是一个更好的猜测。

【讨论】:

  • 所以假设我有 5 个输入属性,其中一个属性是标称的(可能有 20 个值),这是否意味着我必须有 4 个输入节点加上 20 个输入节点用于标称属性?那么输入层总共有 24 个节点?
  • 这是最简单的方法,是的。任何更智能的东西都可能需要了解您的名义属性究竟代表什么。
  • 那么这是否意味着只有一个输出节点将包含 1 和其余的 0?答案将是带有 1 的节点?
  • 没错。根据您要解决的问题,检查其他输出也可能有用或有必要。如果多个输出处于活动状态,则 NN 无法产生准确的答案(类似于单输出 NN 产生 ~0.5 时)。
  • 关于我的网络的问题是它在分类时只能产生一个输出,所以我只关心一个输出 1 的节点。如果有多个节点为 1,那么最终的答案是什么?
【解决方案2】:

只有当变量是有序非名义时,你才能做你提议的事情,即便如此,这也是一个有点武断的决定。在我提出解决方案之前,先说明一下术语:

名义变量与有序变量

假设AB等代表颜色。这些是名义变量的值,不能以有意义的方式排序。你不能说红色大于黄色。因此,您不应将数字分配给名义变量。

现在假设 ABC 等代表服装尺寸,例如smallmediumlarge 等。即使我们不是在绝对尺度上测量这些尺寸(即我们没有说small 对应于 40 个胸围),但很明显@ 987654330@ medium large。考虑到这一点,是否设置small=1medium=2large=3small=2medium=4large=8 仍然有些武断。

One-of-N 编码 解决此问题的更好方法是使用所谓的 N 中取一编码。如果您有 5 个不同的值,则需要 5 个输入单元,每个输入单元可以取值 10。继续我的服装示例,尺寸extra small 可以编码为10000small 编码为01000,中号编码为00100,等等。

类似的原则适用于网络的输出。如果我们将服装尺寸视为输出而不是输入,当网络输出向量 [0.01 -0.01 0.5 0.0001 -.0002] 时,您会将其解释为尺寸 medium

回复您对@Daan 帖子的评论:如果您有 5 个输入,其中一个需要 20 个可能的离散值,您将需要 24 个输入节点。您可能希望将 4 个连续输入的值标准化为范围 [0, 1],因为它们最终可能会主导您的离散变量。

【讨论】:

  • 数值被标准化为介于 0 和 1 之间。我面临的问题与名义属性有关。继续我的具有 20 个额外输入节点的示例,每个节点的值是否为 0,但测试数据中出现的节点除外,其值为 1?
  • 更正
  • 正如我在另一个答案中提到的那样,如果我的输出是 01100,那么有两个 1,因此即使我的系统需要以一种或另一种方式进行分类,无论准确性如何,也无法进行分类。还是我考虑哪个 1 更接近 1 并选择那个
  • 这意味着您的网络“不确定”正确的输出是什么。这会不时发生。你最好的选择是参加最接近 1 的课程
猜你喜欢
  • 2020-05-01
  • 2015-12-29
  • 2017-12-31
  • 2019-08-19
  • 2017-02-24
  • 2015-11-26
  • 2021-06-13
  • 2013-08-21
  • 2016-05-13
相关资源
最近更新 更多