Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中预测后的非规范化值_R_Denormalization - Fatal编程技术网

R中预测后的非规范化值

R中预测后的非规范化值,r,denormalization,R,Denormalization,我不确定我是否正确地反规范化了数据。我有一个输出变量和几个输入变量。我正在使用。假设x是一个输入矩阵(NxM),其中N行中的每一行都是具有M特征的对象。而y是带有相应答案的向量(N) nx <- normalizeData(x, type='0_1') 这是正确的吗?它是如何工作的?很明显,对于一个输入,它可以使用以前用于标准化的最小值和最大值。但是,如果每个输入分别使用其自己的最小值和最大值进行规范化,那么它是如何工作的呢 更新 下面是一个玩具示例,“0_1”看起来比“norm”好“范

我不确定我是否正确地反规范化了数据。我有一个输出变量和几个输入变量。我正在使用。假设
x
是一个输入矩阵(
N
x
M
),其中
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