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

Java 使用JRI的R神经网络结果的问题,java,r,jri,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 | 0

这就是我的问题

我正在使用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%的完整数据)

使用以下代码创建:

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)");
用代码创建

re.assign("trainingOutput", p_file.getValueArray(ANNEnum.TRAINING));
然后我的

测试数据

[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)])]
[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 + ")");
当我期望值在23000左右时。 很明显,我在这过程中做错了什么。但是我不明白,我很感激有人能给我任何帮助


谢谢您的时间。

它最终成为R脚本中的一个错误

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

colnames(trainingdata)您好,尽管您使用JRI从Java运行流程,但我建议您尝试在Java之外重新生成测试(如果尚未完成),至少它允许检查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)]
colnames(trainingdata) <- c(outputColNames,inputColNames)