R中预测后的非规范化值
我不确定我是否正确地反规范化了数据。我有一个输出变量和几个输入变量。我正在使用。假设R中预测后的非规范化值,r,denormalization,R,Denormalization,我不确定我是否正确地反规范化了数据。我有一个输出变量和几个输入变量。我正在使用。假设x是一个输入矩阵(NxM),其中N行中的每一行都是具有M特征的对象。而y是带有相应答案的向量(N) nx <- normalizeData(x, type='0_1') 这是正确的吗?它是如何工作的?很明显,对于一个输入,它可以使用以前用于标准化的最小值和最大值。但是,如果每个输入分别使用其自己的最小值和最大值进行规范化,那么它是如何工作的呢 更新 下面是一个玩具示例,“0_1”看起来比“norm”好“范
x
是一个输入矩阵(N
xM
),其中N
行中的每一行都是具有M
特征的对象。而y
是带有相应答案的向量(N
)
nx <- normalizeData(x, type='0_1')
这是正确的吗?它是如何工作的?很明显,对于一个输入,它可以使用以前用于标准化的最小值和最大值。但是,如果每个输入分别使用其自己的最小值和最大值进行规范化,那么它是如何工作的呢
更新
下面是一个玩具示例,“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))
x这里发生了两件事:
训练模型,即在神经网络中设置内部系数。为此,您使用输入和输出
使用该模型,即获得具有固定内部系数的预测
对于第1部分,您决定规范化数据。因此,神经网络对归一化数据起作用。所以你已经训练了神经网络
- 在输入fX(X)而不是X上,其中fX是用于原始输入矩阵的变换,以生成规范化输入
- 在输出fy(y)而不是y上,其中fy是应用于输出向量以获得规范化输出的变换
就原始输入和输出而言,经过培训的机器现在看起来如下:
- 将规格化函数fX应用于输入,以获得规格化输入fX(X)
- 使用归一化输入运行神经网络,以产生归一化输出fy(y)
- 将非规范化函数fy-1应用于规范化输出fy(y)以获得y
请注意,fX(X)和fy以及fy-1都是在训练集上定义的
因此,在R中,您可以编写类似这样的内容来获取训练数据并对其进行规范化,前100行
tx <- x[1:100,]
ntx <- normalizeData(tx, type='0_1')
ty <- y[1:100]
nty <- normalizeData(ty, type='0_1')
我不太明白。你不是在用由特征和输出组成的训练集训练你的神经网络吗?但是,您只在获取预测值的上下文中提到y
,而不是在培训的上下文中。我希望第一个r
行,比如x
,以及y
的第一个r
行将用于培训。剩下的部分,N-r
用于预测。是的,你是对的。我在用输入和输出变量训练神经网络。对不起,如果不清楚的话。我在变量名上做了一些修正。看来我明白问题的解决方法。我应该使用y来反规范化数据。我想这是个好办法<代码>pred.y很高兴我的评论帮了你的忙。我当时没有看到你的评论,因为我正忙着写答案:请看一看,尽管看起来你已经在那里了!再看一遍,一个微妙的点是,我认为您应该使用用于培训的y
的值来反规范化。在我看来,使用培训中用于X
的规范化参数对您预测的X
值进行规范化也可能更好。谢谢您的回答。您可能想说pred.y@luckyi谢谢,我在您的评论之前编辑了答案,将ny
替换为nty
。也许你在看我最初的答案,我期待着你的评论?我们似乎一直在互相牵线搭桥!:)
tx <- x[1:100,]
ntx <- normalizeData(tx, type='0_1')
ty <- y[1:100]
nty <- normalizeData(ty, type='0_1')
pred.y <- denormalizeData(pred.ny, getNormParameters(nty))
# nty (or ny) not nx here