如何使用java中的R模型进行多模型预测?
我有一个构造器:如何使用java中的R模型进行多模型预测?,java,r,data-mining,predict,Java,R,Data Mining,Predict,我有一个构造器: public Revaluator(File model,PrintStream ps) { modelFile=model; rsession=Rsession.newInstanceTry(ps, null); rsession.eval("library(e1071)"); rsession.load(modelFile); } 我想加载一个模型并用它进行预测。 Rsession.newInstanceTry(ps,null)的问题始终
public Revaluator(File model,PrintStream ps) {
modelFile=model;
rsession=Rsession.newInstanceTry(ps, null);
rsession.eval("library(e1071)");
rsession.load(modelFile);
}
我想加载一个模型并用它进行预测。
Rsession.newInstanceTry(ps,null)的问题
始终是同一个会话,因此如果我加载另一个模型,如:
Revaluator re1=new Revaluator(new File("model1.RData"),System.out);
Revaluator re2=new Revaluator(new File("model2.RData"),System.out);
re1和re2都使用相同的模型,因为var名称是model
,所以只加载最后一个
评估功能:
public REXP evaluate(Object[] arr){
String expression=String.format("predict(model, c(%s))", J2Rarray(arr));
REXP ans=rsession.eval(expression);
return ans;
}
//J2Rarray just creates a string from the array like "1,2,true,'hello',false"
我需要加载大约250个预测器,有没有办法将Rsession的每个实例作为一个新的分离R会话 您尚未在问题中粘贴所有代码,因此在尝试以下(复杂)方法之前,请排除简单原因,并确保您的字段modelFile
和rsession
未声明为静态:-)
如果不是:
似乎R会话的创建方式取决于操作系统
在Unix上,它依赖于R本身的多会话能力,在Windows上,它从6311端口开始,检查它是否仍然空闲。如果不是,则端口将递增,并再次检查是否可用,依此类推
检查自由端口可能有问题(您正在使用哪个操作系统?)
您可以尝试手动配置端口,并显式启动不同的本地R服务器,如下所示:
Logger simpleLogger = new Logger() {
public void println(String string, Level level) {
if (level == Level.WARNING) {
p.print("! ");
} else if (level == Level.ERROR) {
p.print("!! ");
}
p.println(string);
}
public void close() {
p.close();
}
};
RserverConf serverConf = new RserverConf(null, staticPortCounter++, null, null, null);
Rdaemon server = new Rdaemon(serverConf, this);
server.start(null);
rsession = Rsession.newInstanceTry(serverConf);
如果这不起作用,请显示您的重估者
类的更多代码,并提供您正在运行的操作系统的详细信息。此外,应该有多个日志输出(至少在相应配置日志级别的情况下)。请同时粘贴已记录的消息
也许从中获取rsession的源代码并使用调试器在
rsession.begin()
中设置断点也会有所帮助。也许这有助于找出问题所在 在OSX上开发,生产是UBUNTU,不管怎样,它是有效的,thanx!