2

您好我正在构建一个简单的多层网络,该网络使用反向传播进行训练。我目前的问题是我的数据集中的某些属性是名义上的(非数字),我必须对它们进行规范化。我想知道最好的方法是什么。我正在考虑计算每个属性有多少不同的值,并为每个属性分配一个介于 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)?

4

2 回答 2

1

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

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

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

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

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

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

于 2013-03-14T13:09:25.680 回答
1

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

名义变量与有序变量

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

现在假设A, B, C, 等代表服装尺寸,例如small, medium,large等。即使我们不是在绝对尺度上测量这些尺寸(即我们不说small对应于 40 个胸围),很明显small< medium< large. 考虑到这一点,您是否设置small=1, medium=2, large=3, 或small=2, medium=4,仍然有些随意large=8

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

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

In reply to your comment on @Daan's post: if you have 5 inputs, one of which takes 20 possible discrete values, you will need 24 input nodes. You might want to normalise the values of your 4 continuous inputs to the range [0, 1], because they may end out dominating your discrete variable.

于 2013-03-14T13:37:08.083 回答