如何在Java中设置RapidMiner Apply Model的unlabelled data参数并模拟数据示例?
用Java调用RapidMiner流程并设置Apply Model的unlabelled data参数
嘿,我来帮你搞定这个问题!你已经成功加载了RapidMiner流程并拿到模型,接下来要做的就是模拟无标签数据,然后给Apply Model算子正确传入数据对吧?我给你一步步拆解:
第一步:模拟无标签数据示例
首先你得构造和训练模型时结构完全一致的无标签数据集——属性名称、类型、顺序都得对应上,不然Apply Model会报错。这里用RapidMiner的MemoryExampleSet来手动构建数据:
import com.rapidminer.example.Attribute; import com.rapidminer.example.AttributeFactory; import com.rapidminer.example.MemoryExampleSet; import com.rapidminer.example.table.DataRow; import com.rapidminer.example.table.DoubleArrayDataRow; import com.rapidminer.operator.io.MemoryExampleSource; import com.rapidminer.tools.Ontology; // 1. 定义属性:和训练模型的输入属性一致,注意无标签数据不需要包含label列 Attribute attr1 = AttributeFactory.createAttribute("age", Ontology.NUMERICAL); Attribute attr2 = AttributeFactory.createAttribute("gender", Ontology.NOMINAL); Attribute attr3 = AttributeFactory.createAttribute("income", Ontology.NUMERICAL); // 2. 给标称属性添加可选值(比如gender的取值) attr2.getMapping().mapString("male"); attr2.getMapping().mapString("female"); // 3. 创建无标签数据集 MemoryExampleSet unlabelledData = new MemoryExampleSet(); unlabelledData.getAttributes().addAll(attr1, attr2, attr3); // 4. 添加数据行:数值型直接填数值,标称型填对应索引 DataRow row1 = new DoubleArrayDataRow(new double[]{28, attr2.getMapping().getIndex("male"), 55000}); DataRow row2 = new DoubleArrayDataRow(new double[]{35, attr2.getMapping().getIndex("female"), 72000}); unlabelledData.addDataRow(row1); unlabelledData.addDataRow(row2);
第二步:给Apply Model传入无标签数据
敲黑板!别用op.setParameter()来传数据——unlabelled data是算子的输入端口,不是字符串参数,得通过输入端口来传递数据:
// 1. 获取Apply Model算子的"unlabelled data"输入端口 InputPort unlabelledInputPort = op.getInputPort("unlabelled data"); // 2. 将模拟好的无标签数据传入这个端口 unlabelledInputPort.setSource(new MemoryExampleSource(unlabelledData)); // 3. 运行流程(如果你的流程里已经正确连接了Model输入的话) pr.run(); // 如果你需要获取预测结果,可以从Apply Model的输出端口拿 ExampleSet predictedResults = (ExampleSet) op.getOutputPort("labelled data").getData();
注意事项
- 一定要保证无标签数据的属性和训练模型时的输入属性完全匹配,包括名称、类型、顺序,否则会触发属性不匹配的错误。
- 如果你的流程里已经有其他数据源连接到Apply Model的unlabelled data端口,记得先断开或者替换掉,不然会冲突。
内容的提问来源于stack exchange,提问作者Ameer Abdullah
相关产品推荐
相关产品推荐

