neuralnet:ANN结果即使在设定种子后也不可复制

neuralnet:ANN结果即使在设定种子后也不可复制,r,R,简而言之,我们将解释代码; 我试图通过在一天内创建24小时模型并在数据框中整理结果来进行预测。基本问题无法再现#即使在设定种子后的输出。请任何人帮助我。我制作了一些自定义函数和对象,其中没有随机化(仅供参考) f是的。这就解决了。实际上,对于一些迭代,我没有调用'dplyr'包,因此我使用lag(函数'lag'既在base中,也在dplyr包中)函数创建的滞后变量返回的序列与我试图预测的变量相同,误差可以忽略不计。 一旦调用dplyr包,结果是可复制的 谢谢。你能提供测试数据吗?@sebasti

简而言之,我们将解释代码; 我试图通过在一天内创建24小时模型并在数据框中整理结果来进行预测。基本问题无法再现#即使在设定种子后的输出。请任何人帮助我。我制作了一些自定义函数和对象,其中没有随机化(仅供参考)


f是的。这就解决了。实际上,对于一些迭代,我没有调用'dplyr'包,因此我使用lag(函数'lag'既在base中,也在dplyr包中)函数创建的滞后变量返回的序列与我试图预测的变量相同,误差可以忽略不计。
一旦调用dplyr包,结果是可复制的


谢谢。

你能提供测试数据吗?@sebastianmm我不能,但我只想冻结随机分组,不知何故我无法冻结。你检查过nn对象是否相同吗?据我所知,neuralnet函数中唯一随机的是权重的初始化。是的,我没有检查nn对象,但它们会有所不同,因为它们给出的预测是不同的。即使对于使用随机林进行预测的同一类代码,输出也是不可复制的。
f <- as.formula("actual~ lag.1 + last3.avg+monsoon+mon.thurs+wdaySaturday+wdaySunday+holiday
      ")    #Defining the formula for neural network
    require(dplyr);require(neuralnet)
        set.seed(123456)
        nnet.hour=data.frame()#Initializing a dataframe
        #k=0
        #x=list()
        for(i in 1:24){#Running it for 24 hours in a day
          sub<-new.day.ahead[new.day.ahead$hour==i,]
          sub$lag.1<-lag(sub$actual,1)
          for(i in 1:nrow(sub)){
            sub$last3.avg[i]=sum(lag(sub$actual,1)[i],lag(sub$actual,2)[i],lag(sub$actual,3)[i],na.rm=TRUE)/3
          }

          ind=which(sub$mod.date==ymd(t[1]));ind#t[1] is basically a date #initialisation,getting the index
          monsoon=as.factor(sub$Monsoon.Dummy)
          wday=as.factor(sub$wday.dummy)
          holiday=as.factor(sub$holiday)
          sub=as.data.frame(cbind(sub[,c(4,16,17)],cbind(
            monsoon=model.matrix(~monsoon)[,-1],
            wday=model.matrix(~wday)[,-1],
            holiday=model.matrix(~holiday)[,-1]
          )))
          names(sub)[5]<-"mon.thurs"
          ##Normalising the data for training in a neural net 
          sub[,2][1]=0
          maxs <- apply(sub, 2, max) 
          mins <- apply(sub, 2, min)

          scaled <- as.data.frame(scale(sub, center = mins, scale = maxs - mins))
          train<- scaled[1:I(ind-1),]
          test<- scaled[ind,]

          set.seed(123456)
          nn <- neuralnet(f,data=train,hidden =7,linear.output = TRUE)
          pr.nn<-neuralnet::compute(nn,test[,-1])
          #Normalising back
          pr.nn.<- pr.nn$net.result*(max(sub$actual)-min(sub$actual))+min(sub$actual)
          test.r <- (test$actual)*(max(sub$actual)-min(sub$actual))+min(sub$actual)


          u=mape(as.numeric(test.r),as.numeric(pr.nn.));u#Calculating Mean Absolute Percentage Error
          if(i==1){

            nnet.hour=data.frame(actual=as.numeric(test.r),forecast1=as.numeric(pr.nn.),mape=u)
          }else{

            nnet.hour=rbind(nnet.hour,data.frame(data.frame(actual=as.numeric(test.r),forecast1=as.numeric(pr.nn.),mape=u)))
            nnet.hour=data.frame(nnet.hour)
          }
        }