【发布时间】:2013-08-10 01:11:08
【问题描述】:
我不确定我是否正确地对数据进行了非规范化。我有一个输出变量和几个输入变量。我正在使用RSNNS package 对它们进行标准化。假设x 是一个输入矩阵(NxM),其中N 的每一行都是具有M 特征的对象。而y 是一个向量(N),有对应的答案。
nx <- normalizeData(x, type='0_1')
之后,一些数据用于制作模型,一些用于预测。假设pred.ny 是预测值。这些值是标准化的。
pred.y <- denormalizeData(pred.ny, getNormParameters(nx))
这是正确的吗?它是如何工作的?很明显,一个输入可以使用以前用于标准化的最小值和最大值。但是,如果每个输入都使用自己的最小值和最大值分别进行归一化,它会如何工作呢?
更新 这是一个玩具示例,其中“0_1”看起来比“规范”更好。 'norm' 会产生巨大的训练错误和几乎恒定的预测。
x <- runif(1020, 1, 5000)
y <- sqrt(x)
nx <- normalizeData(x, type='0_1')
ny <- normalizeData(y, type='0_1')
model <- mlp(nx[1:1000], ny[1:1000], size = 1)
plotIterativeError(model)
npy <- predict(model, matrix(nx[1001:1020], ncol=1))
py <- denormalizeData(npy, getNormParameters(ny))
print(cbind(y[1001:1020], py))
【问题讨论】:
-
我不太明白。你不是使用由特征和输出组成的训练集来训练你的神经网络吗?但是您只在获取预测值的上下文中提到
y,而不是在训练的上下文中。我希望x的第一行r和y的第一行r将用于训练。其余部分,N-r用于预测。 -
是的,你是对的。我正在使用输入和输出变量训练神经网络。抱歉,如果不清楚。我对变量名称做了一些修正。
-
看来我明白我的问题的解决方案了。我应该将 y 用于非规范化数据。我想这是一个很好的解决方案。
pred.y <- denormalizeData(pred.ny, getNormParameters(ny)) -
很高兴我的评论对您有所帮助。我当时正忙着写答案,所以没有看到您的评论:请看一下,尽管您似乎已经在那儿了!
-
再看一遍,一个微妙的点是我认为您应该使用您用于培训的
y的值进行非规范化。我认为可能在训练中使用用于X的归一化参数对您预测的X值进行归一化会更好。
标签: r denormalization