R中的神经网络预测区间

时间:2016-04-21 08:50:16

标签: r neural-network tableau prediction

我正在尝试计算使用neuralnet包创建的神经网络的预测间隔。

我在Tableau Software中使用R,通过创建包含我的函数并在Tableau中加载的.RData文件。

这是一个简单的NN,其中一个隐藏层包含5个节点。我搜索并找到了这个包:nnetpredint

所以我尝试使用它们,使用他们的例子。 我也尝试改变我使用它的方式(在相同的数据帧中训练/测试,使用相同的列名称分隔数据帧等)。

我得到的最好结果是预测,但没有lowerBoundupperBound列。 事实上,我得到的结果与使用compute(myNN, etc.)的结果完全相同,但我没有第二列和第三列。

感谢您的帮助,

编辑: 我的数据来自画面,我的函数有五个参数: ValuesToExplain,TRAIN1,TRAIN2,为test1,test2的。 然后,我用3first创建并训练我的NN并尝试计算最后两个。 (test1 = k * train1和test2 = k2 * train2现在但它将来可能会移动)。

以下是我的全部代码:

NNetwork <- function(objectiveValues, knownValues1, knownValues2, newData, newData2){

  numberOfColumn = 3

  ##Create the training dataframe
  training <- data.frame(objectiveValues, knownValues1,knownValues2)
  training[which(is.na(training[,"objectiveValues"])),"objectiveValues"]<- mean(training[,"objectiveValues"], na.rm = TRUE)
  training[which(is.na(training[,"knownValues1"])),"knownValues1"]<- mean(training[,"knownValues1"], na.rm = TRUE)
  training[which(is.na(training[,"knownValues2"])),"knownValues2"]<- mean(training[,"knownValues2"], na.rm = TRUE)


  ## Create the testing dataframe

  testing <- data.frame(objectiveValues,newData,newData2)
  names(testing) <- c("objectiveValues", "knownValues1", "knownValues2")
  testing[which(is.na(testing[,"objectiveValues"])),"objectiveValues"]<- mean(testing[,"objectiveValues"], na.rm = TRUE)
  testing[which(is.na(testing[,"knownValues1"])),"knownValues1"]<- mean(testing[,"knownValues1"], na.rm = TRUE)
  testing[which(is.na(testing[,"knownValues2"])),"knownValues2"]<- mean(testing[,"knownValues2"], na.rm = TRUE)



  ## Scaling

  maxs <- apply(training, 2, max) 
  mins <- apply(training, 2, min)
  trainingScaled <- as.data.frame(scale(training, center = mins, scale = maxs - mins))



  testingScaled <- as.data.frame(scale(testing, center = mins, scale = maxs - mins))


  ### NeuralNetwork Part 

  library(neuralnet)
  n <- names(trainingScaled)

  f <- as.formula(paste("objectiveValues ~", paste(n[!n %in% "objectiveValues"], collapse = " + ")))


  # Training NN
  nn <- neuralnet(f, data=trainingScaled,hidden=5,linear.output=TRUE)


  # Using NN
  computedTrainingScaled <- compute(nn,trainingScaled[,2:numberOfColumn])
  computedFromNNScaled <- compute(nn,testingScaled[,2:numberOfColumn])


  # UnScaling 
  computedTraining <- computedTrainingScaled$net.result*(max(training$objectiveValues)-min(training$objectiveValues))+min(training$objectiveValues)
  computedFromNN <- computedFromNNScaled$net.result*(max(training$objectiveValues)-min(training$objectiveValues))+min(training$objectiveValues)


  RSquare = (1-( (sum((training$objectiveValues - computedTraining)^2))/(sum((training$objectiveValues - mean(training$objectiveValues))^2)) ))*100
  RSE = sum((training$objectiveValues - computedTraining)^2)/nrow(training)
  res <- (1:nrow(training))

  library(nnetpredint) # Getting prediction confidence interval
  x <- trainingScaled[,2:numberOfColumn]
  y <- trainingScaled[1]
  newData <- testingScaled[,2:numberOfColumn]
  # S3 generic method: Object of nn
  yPredInt <- nnetPredInt(nn, x, y, newData)


  for(i in 1:nrow(training)){
    res[i] <- paste(computedFromNN[i],RSquare,RSE, sep="#")
  }

  return(res)

}

save(NNetwork, file = "NNetwork.RData")

在这里,我使用nnetpredint pckage删除了部件,因为它不起作用,但它是这样的:

  library(nnetpredint) 
  y <- trainingScaled
  x <- trainingScaled[,2:3]
  newData <- testingScaled[,2:3]

  yPredInt <- nnetPredInt(nn, x, y, newData)

我的问题是,当我尝试访问yPredInt $ lowerBound或yPredInt $ upperBound时,它们不存在。

0 个答案:

没有答案