使用JRI的R神经网络结果的问题

时间:2015-06-03 13:50:59

标签: java r jri

所以这是我的问题。

我在R中使用脚本创建一个神经网络来生成文件的缺失值,该文件如下:

Flag |     Date  | Time  | Value
V    |  20100901 | 00:00 | 23180
V    |  20100901 | 00:15 | 23280
V    |  20100901 | 00:30 |
V    |  20100901 | 00:45 | 
V    |  20100901 | 01:00 !
V    |  20100901 | 01:15 | 23050
(etc...)

我的java程序正在读取和存储这些数据,该文件的前一部分只是我正在使用的值的指示符。

然后我在Java中创建了RApp,在我读完一个文件之后,我会对它进行处理。  我的培训输入如下。 (注意:举例来说,我使用了一小部分数据,即9行,但我的文件通常包含35000行。 我还生成一些标签,其中包含年,月,星期几,日期等所读取的值,这就是为什么您看到上面的文件示例中没有值的原因。)。

培训输入(使用50%的完整数据)

[VECTOR ([INT* (2, 2, 2, 2)], [INT* (2010, 2010, 2010, 2010)], [INT* (9, 9, 9, 9)], [INT* (39, 39, 39, 39)], [INT* (3, 3, 3, 3)], [INT* (39, 39, 39, 39)], [INT* (0, 900, 4500, 5400)])]

使用代码创建:

re.assign("season_flag", p_file.getSeasonArray(ANNEnum.TRAINING));
re.assign("year_flag", p_file.getYearArray(ANNEnum.TRAINING));
re.assign("month_flag", p_file.getMonthArray(ANNEnum.TRAINING));
re.assign("week_flag", p_file.getWeekArray(ANNEnum.TRAINING));
re.assign("day_of_week_flag", p_file.getDayOfWeekArray(ANNEnum.TRAINING));
re.assign("weekend_flag", p_file.getWeekendArray(ANNEnum.TRAINING));
re.assign("datetime", p_file.getTimeArray(ANNEnum.TRAINING));
re.eval("trainingInput <- data.frame(season_flag,year_flag,month_flag,week_flag,day_of_week_flag,weekend_flag,datetime)");

培训输出

[INT* (23180, 23280, 23050, 23110)]

使用代码

创建
re.assign("trainingOutput", p_file.getValueArray(ANNEnum.TRAINING));

然后我的

测试数据

[VECTOR ([INT* (2, 2)], [INT* (2010, 2010)], [INT* (9, 9)], [INT* (39, 39)], [INT* (3, 3)], [INT* (0, 0)], [INT* (10800, 11700)])]

测试数据的创建方式与培训输入相同。

然后我调用R脚本:

re.eval("network <- runANN(trainingInput, inputColNames, trainingOutput, outputColNames, testData, " + layercount + ", " + threshold + ")");

所有值都是事先定义的。

R脚本如下

runANN <- function(trainingInput, inputColNames, trainingOutput, outputColNames, testData, hiddenLayers, threshold){
  library("neuralnet")

  #Column bind the data into one variable
  trainingdata <- cbind(trainingInput,trainingOutput)

  colnames(trainingdata) <- c(outputColNames,inputColNames)

  trainingdata <- as.data.frame(trainingdata)
  #construct formula
  formula <- as.formula(paste(paste(outputColNames, collapse= "+"), paste("~", paste(inputColNames, collapse= "+"))))

  #Train the neural network
  net.sqrt <- neuralnet(formula,trainingdata, hidden=hiddenLayers, threshold=threshold)

  colnames(testData) <- c(inputColNames)

  testData <- as.data.frame(testData)

  #Test the neural network on some training data
  net.results <- compute(net.sqrt, testData) #Run them through the neural network

  #Lets see the results
  #print(net.results$net.result)

  return(print(net.results$net.result))
}

这就是我的问题,这将给我的结果是:

          [,1]
[1,] 2.00002384
[2,] 2.00002384
[REAL* (2.000023839778315, 2.000023839778315)]

当我期待价值23000左右时。 显然我一路走错了。但是我无法弄明白,我赞成有人可能给予的任何帮助。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

最终成为R剧本中的错误

colnames(trainingdata) <- c(outputColNames,inputColNames)

这一行是为了使第一列是输出列而不是最后一列,因为第一列只有值2,结果是预期的。

我在两个选项中获得相同值的问题与在将输入和输出数据放入网络之前错误地不规范化输入和输出数据有关。

感谢所有试图帮助我解决问题的人