我不确定我是否正确地对数据进行了非规范化。我有一个输出变量和几个输入变量。我正在使用RSNNS 包对它们进行规范化。假设x
是一个输入矩阵 ( N
x M
),其中每一N
行都是具有M
特征的对象。Andy
是一个向量 ( 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))