使用RapidMiner 9.7在Java中加载模型
philipp_ginsel
成员职位:2贡献我
在帮助
你好,
我们在java项目中使用RapidMiner (https://github.com/igorvatolkin/AMUSE).我们目前使用的是5.3版本,正在尝试更新到最新版本(9.7)。
在项目的某一点上,我们加载一个以前训练过的”。Mod "-model-file,以便用它对新数据进行分类。为此,我们使用类“com.rapidminer.operator.io.ModelLoader”。当我下载新的Rapidminer版本时,我注意到这个类已经不存在了。是否有一种方法可以使用Rapidminer 9.7中的另一个类来做同样的事情?不幸的是,我无法找到任何关于这个问题,我希望你能帮助我。
我们的代码看起来是这样的(我排除了与问题无关的部分,是特定于我们的项目):
进口com.rapidminer.Process;
进口com.rapidminer.example.ExampleSet;
进口com.rapidminer.operator.IOContainer;
进口com.rapidminer.operator.ModelApplier;
进口com.rapidminer.operator.Operator;
进口com.rapidminer.operator.io.ModelLoader;
进口com.rapidminer.operator.ports.InputPort;
进口com.rapidminer.operator.ports.OutputPort;
进口com.rapidminer.tools.OperatorService;
.
.
.
Process Process = new Process();
//(1)创建示例集
.
.//创建需要分类的示例集的代码
.
//(2)加载模型
Operator modelLoader = OperatorService.createOperator(modelLoader .class);
modelLoader.setParameter (ModelLoader。PARAMETER_MODEL_FILE pathToModelFile);
process.getRootOperator () .getSubprocess (0) .addOperator (modelLoader);
//(3)应用模型
Operator modelApplier = OperatorService.createOperator(modelApplier .class);
process.getRootOperator () .getSubprocess (0) .addOperator (modelApplier);
//(4)连接端口
InputPort modelApplierModelInputPort = modelappliergetinputports ().getPortByName("model");
InputPort modelApplierUnlabelledDataInputPort = modelappliergetinputports()。getPortByName(“未标记的数据”);
OutputPort modelLoaderOutputPort = modelLoader.getOutputPorts().getPortByName("output");
OutputPort processOutputPort = process.getRootOperator().getSubprocess(0).getInnerSources().getPortByIndex(0);
modelLoaderOutputPort.connectTo (modelApplierModelInputPort);
processOutputPort.connectTo (modelApplierUnlabelledDataInputPort);
//(5)运行进程
process.run(新IOContainer (exampleSet));
非常感谢你的帮助。
菲利普
我们在java项目中使用RapidMiner (https://github.com/igorvatolkin/AMUSE).我们目前使用的是5.3版本,正在尝试更新到最新版本(9.7)。
在项目的某一点上,我们加载一个以前训练过的”。Mod "-model-file,以便用它对新数据进行分类。为此,我们使用类“com.rapidminer.operator.io.ModelLoader”。当我下载新的Rapidminer版本时,我注意到这个类已经不存在了。是否有一种方法可以使用Rapidminer 9.7中的另一个类来做同样的事情?不幸的是,我无法找到任何关于这个问题,我希望你能帮助我。
我们的代码看起来是这样的(我排除了与问题无关的部分,是特定于我们的项目):
进口com.rapidminer.example.ExampleSet;
进口com.rapidminer.operator.IOContainer;
进口com.rapidminer.operator.ModelApplier;
进口com.rapidminer.operator.Operator;
进口com.rapidminer.operator.io.ModelLoader;
进口com.rapidminer.operator.ports.InputPort;
进口com.rapidminer.operator.ports.OutputPort;
进口com.rapidminer.tools.OperatorService;
.
.
.
Process Process = new Process();
//(1)创建示例集
.
.//创建需要分类的示例集的代码
.
//(2)加载模型
Operator modelLoader = OperatorService.createOperator(modelLoader .class);
modelLoader.setParameter (ModelLoader。PARAMETER_MODEL_FILE pathToModelFile);
process.getRootOperator () .getSubprocess (0) .addOperator (modelLoader);
//(3)应用模型
Operator modelApplier = OperatorService.createOperator(modelApplier .class);
process.getRootOperator () .getSubprocess (0) .addOperator (modelApplier);
//(4)连接端口
InputPort modelApplierModelInputPort = modelappliergetinputports ().getPortByName("model");
InputPort modelApplierUnlabelledDataInputPort = modelappliergetinputports()。getPortByName(“未标记的数据”);
OutputPort modelLoaderOutputPort = modelLoader.getOutputPorts().getPortByName("output");
OutputPort processOutputPort = process.getRootOperator().getSubprocess(0).getInnerSources().getPortByIndex(0);
modelLoaderOutputPort.connectTo (modelApplierModelInputPort);
processOutputPort.connectTo (modelApplierUnlabelledDataInputPort);
//(5)运行进程
process.run(新IOContainer (exampleSet));
菲利普
标记:
0
最佳答案
-
jczogalla 员工,成员职位:141RM工程嗨,菲利普!
ModelLoader在9.2中已弃用,在遗留扩展中仍然可用,遗留扩展与RapidMiner安装捆绑在一起,但不是开源核心的一部分。即使在5.3中,该操作符也相当老了。
通常您会使用Retrieve操作符(java类:RepositorySource),但顾名思义,这需要一个存储库位置来读取模型。
另一件改变的事情是,存储库中模型的文件结尾通常是“.ioo”。在9.7中,我们更新了存储库,以更好地支持更多的文件类型和它们的存储方式。
所以我想“简单”的方法是遵循以下步骤:
1)复制“。修改“文件”并将其重命名为“。ooo”结尾
2)在代码中创建并注册一个存储库,并使用检索操作符
<?xml version = " 1.0 " encoding = " utf - 8 " ?>
// create repository to load data repository repo = new LocalRepository("modelRepo", pathToModelFolder);< / span > RepositoryManager.getInstance (null) .addRepository(回购< span >);//创建检索操作符而不是ModelLoader RepositorySource retrieveModel = OperatorService.createOperator(RepositorySource.class);< / span > retrieveModel.setParameter (RepositorySource。PARAMETER_REPOSITORY_ENTRY, nameOfModelWithoutFileEnding < span >);或者,你可以在RapidMiner Studio中创建repo和进程,看起来像这样:
xml:
然后可以将流程存储在某个地方,并从xml创建process实例。您可能仍然需要以编程方式设置回购,但不需要以编程方式构建流程。
我希望这能有所帮助!
干杯
1月
6
答案
很高兴听到这已经有所帮助。祝你在接下来的项目中好运!
干杯
1月