gpt4 book ai didi

r - 在 R 中预测后对值进行非规范化

转载 作者:行者123 更新时间:2023-12-04 14:36:28 26 4
gpt4 key购买 nike

我不确定我是否正确地对数据进行了反规范化。我有一个输出变量和几个输入变量。我正在使用 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”好。 '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))

最佳答案

这里有两件事:

  1. 训练您的模型,即在神经网络中设置内部系数。为此,您同时使用输入和输出。
  2. 使用模型,即使用固定的内部系数进行预测。

对于第 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')

和类似的东西去规范化预测结果

pred.y <- denormalizeData(pred.ny, getNormParameters(nty))
# nty (or ny) not nx here

我有点担心的是,我更愿意使用我用于训练的相同变换 fX 来规范化预测中使用的特征,但查看 RSNNS documentation该设施似乎不存在(但是,您自己编写它很容易)。使用整个 X 矩阵(即包括训练数据)对预测特征进行归一化可能没问题。 (我还可以看到,使用 RSNNS 提供的默认 z 分数标准化可能比您使用的“0_1”选择更可取。)

关于r - 在 R 中预测后对值进行非规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18124051/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com