R 神经网络训练结果负输出

R 神经网络训练结果负输出,r,neural-network,normalization,training-data,R,Neural Network,Normalization,Training Data,我正在使用r中的neuralnet软件包,用五个输入变量预测河流的流量 “df”是包含六列原始数据的数据帧,前五列作为输入,最后一列作为输出。 使用RSNNS包在0到1范围内对数据进行规范化 library(RSNNS) norm_data <- data.frame(normalizeData(df, type = "0_1")) 我尝试用不同的测试数据集测试模型(测试和训练数据都是使用相同模式规范化的数据集的子集,75%的训练和25%的测试),但模型的性能并不令人满意(Nash小于4

我正在使用r中的neuralnet软件包,用五个输入变量预测河流的流量

“df”是包含六列原始数据的数据帧,前五列作为输入,最后一列作为输出。 使用RSNNS包在0到1范围内对数据进行规范化

library(RSNNS)
norm_data <- data.frame(normalizeData(df, type = "0_1"))
我尝试用不同的测试数据集测试模型(测试和训练数据都是使用相同模式规范化的数据集的子集,75%的训练和25%的测试),但模型的性能并不令人满意(Nash小于40%)。测试输出包含更大的负值


我的问题是:虽然训练数据在0到1之间,但为什么训练结果是负数?测试时,这会如何影响模型的性能?这是怎么解决的?Thanx提前。

我没有使用此软件包的经验,但看看
neuralnet
函数中的公式,我相信您的
出院
变量是一个连续变量。理论上,一个连续变量可以在实线的任何地方(从负无穷大到正无穷大)变化。没有任何东西可以告诉神经网络限制对
[0,1]
的响应。为了解决这个问题,如果你真的希望你的预测在
[0,1]
中,你可以手动将你的预测限制在
[0,1]
中,或者在将响应放入神经网络之前对其应用一个转换。例如,转换可以是logit转换
log(放电)/(1-exp))
(这将为您提供一个介于0和1之间的预测值)。然后,一旦获得预测值,您就可以通过对注释执行
exp(pred)/(1+exp(pred))
.thanx@jav来反转转换。neuralnet函数使用一个sigmoid函数'f(x)=1/(1+exp(-x)'要在0到1之间的隐藏节点和输出节点中传输输入信号。@H.Paudel,您找到问题的解决方案了吗?我也有同样的问题。如果您能分享解决方案,我将非常高兴。我没有使用此软件包的经验,但查看
neuralnet
函数中的公式,我相信您的<代码>排放量变量是一个连续变量。理论上,连续变量可以在实线上的任何位置(从负无穷大到正无穷大)变化。没有任何东西可以告诉神经网络限制对
[0,1]
的响应。要解决这个问题,如果你真的希望你的预测在
[0,1]中
,您可以手动将预测限制为
[0,1]
,或者在将响应放入神经网络之前对其应用转换。例如,转换可以是logit转换
日志(放电/(1-放电))
(这将为您提供介于0和1之间的预测)。然后,一旦获得预测值,就可以通过执行
exp(pred)/(1+exp(pred))
.thanx@jav来反转转换。neuralnet函数使用sigmoid函数'f(x)=1/(1+exp(-x)'要在0到1之间的隐藏节点和输出节点中传输输入信号。@H.Paudel,您找到问题的解决方案了吗?我也有同样的问题。如果您能分享解决方案,我将非常高兴。
trn_data <- norm_data[1:2557,]
library(neuralnet)
trn <- neuralnet(discharge~rain+temp+humid+sun+d_disch,trn_data,hidden = 10, threshold = 0.01)
Min.         1st Qu.          Median            Mean         3rd Qu. 
-0.008131191000 -0.002250917000 -0.001022112000 -0.001596980000 -0.000471144100 
           Max. 
-0.000000928481