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

Problems with R neural network results using 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 左右时。 显然我一路上做错了什么。但是我无法弄清楚,我很感激有人可能提供的任何帮助。

感谢您的宝贵时间。

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

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

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

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

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