Java 使用JRI的R神经网络结果的问题
这就是我的问题 我正在使用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
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)