2016-09-26 3 views
1

간단히 설명하면 코드가 설명됩니다. 하루에 24 시간의 모델을 만들고 데이터 프레임에서 결과를 대조하여 예측하려고합니다. 기본 문제는 seed를 설정 한 후에도 출력을 재현 할 수 없습니다. 아무도 도와주세요. 사용자 정의 함수 # 및 객체 i 만들어졌으며 무작위 추출이 없습니다. (다만 FYI).neuralnet : 종자 설정 후 ANN 결과가 재현되지 않음

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) 
      } 
     } 
+0

테스트 데이터를 제공 할 수 있습니까? – sebastianmm

+0

@sebastianmm 나는 그저 멈출 수없는 무작위 화를 멈추고 싶을뿐입니다. – Akshay

+0

nn 개체가 같은지 확인 했습니까? neuralnet 함수에서 무작위로 추출한 유일한 것은, 내가 아는 한, 가중치의 초기화입니다. – sebastianmm

답변

0

열게 내가 'dplyr'패키지를 호출 실패한 몇몇 반복에 대한 solved.Actually이고, 그래서 지연하여 생성 된 지연 변수 (함수 '지연'은 dplyr 패키지뿐만 아니라베이스 모두 임) 함수는 오류가 무시할 수있는 예의를 예측하려고 시도했던 변수와 동일한 시리즈를 반환했습니다. dplyr 패키지를 호출하면 결과를 재현 할 수 있습니다.

감사합니다.