public void applyTo(Visitable visitable){ List<Class<? extends Visitor>> visitorClazzes = this; for(Class<? extends Visitor> visitorClazz : visitorClazzes){ Visitor visitor; try { visitor = visitorClazz.newInstance(); } catch(ReflectiveOperationException roe){ throw new RuntimeException(roe); } visitor.applyTo(visitable); } } }
public void applyTo(Visitable visitable){ List<Class<? extends Visitor>> visitorClazzes = this; for(Class<? extends Visitor> visitorClazz : visitorClazzes){ Visitor visitor; try { visitor = visitorClazz.newInstance(); } catch(ReflectiveOperationException roe){ throw new RuntimeException(roe); } visitor.applyTo(visitable); } } }
static protected void ensureValidity(PMMLObject object){ List<Visitor> visitors = Arrays.<Visitor>asList( new UnsupportedMarkupInspector(), new InvalidMarkupInspector(){ @Override public VisitorAction visit(Application application){ String name = application.getName(); if(name == null){ return VisitorAction.SKIP; } return super.visit(application); } @Override public VisitorAction visit(MiningSchema miningSchema){ if(!miningSchema.hasMiningFields()){ return VisitorAction.SKIP; } return super.visit(miningSchema); } } ); for(Visitor visitor : visitors){ visitor.applyTo(object); } }
public MiningModel encodeMiningModel(Map<String, ?> options, Schema schema){ Boolean compact = (Boolean)options.get(HasLightGBMOptions.OPTION_COMPACT); Integer numIterations = (Integer)options.get(HasLightGBMOptions.OPTION_NUM_ITERATION); MiningModel miningModel = this.object_function_.encodeMiningModel(Arrays.asList(this.models_), numIterations, schema) .setAlgorithmName("LightGBM"); if((Boolean.TRUE).equals(compact)){ Visitor visitor = new TreeModelCompactor(); visitor.applyTo(miningModel); } return miningModel; }
static protected void ensureValidity(PMMLObject object){ List<Visitor> visitors = Arrays.<Visitor>asList( new UnsupportedMarkupInspector(), new InvalidMarkupInspector(){ @Override public VisitorAction visit(Application application){ String name = application.getName(); if(name == null){ return VisitorAction.SKIP; } return super.visit(application); } @Override public VisitorAction visit(MiningSchema miningSchema){ if(!miningSchema.hasMiningFields()){ return VisitorAction.SKIP; } return super.visit(miningSchema); } } ); for(Visitor visitor : visitors){ visitor.applyTo(object); } }
@Override public PMML transform(PMML pmml) throws Exception { if(this.summary){ printSummary(pmml); } List<String> visitorClasses = this.visitorClasses; for(String visitorClass : visitorClasses){ Class<?> clazz = Class.forName(visitorClass); long begin = System.currentTimeMillis(); Visitor visitor = (Visitor)clazz.newInstance(); visitor.applyTo(pmml); long end = System.currentTimeMillis(); System.out.println("Applied " + clazz.getName() + " in " + (end - begin) + " ms."); if(this.summary){ printSummary(pmml); } } return pmml; }
/** * @see XGBoostUtil#toXGBoostSchema(Schema) */ public MiningModel encodeMiningModel(Map<String, ?> options, Schema schema){ Boolean compact = (Boolean)options.get(HasXGBoostOptions.OPTION_COMPACT); Integer ntreeLimit = (Integer)options.get(HasXGBoostOptions.OPTION_NTREE_LIMIT); MiningModel miningModel = this.gbtree.encodeMiningModel(this.obj, this.base_score, ntreeLimit, schema) .setAlgorithmName("XGBoost"); if((Boolean.TRUE).equals(compact)){ Visitor visitor = new TreeModelCompactor(); visitor.applyTo(miningModel); } return miningModel; }
/** * @see XGBoostUtil#toXGBoostSchema(Schema) */ public MiningModel encodeMiningModel(Map<String, ?> options, Schema schema){ Boolean compact = (Boolean)options.get(HasXGBoostOptions.OPTION_COMPACT); Integer ntreeLimit = (Integer)options.get(HasXGBoostOptions.OPTION_NTREE_LIMIT); MiningModel miningModel = this.gbtree.encodeMiningModel(this.obj, this.base_score, ntreeLimit, schema) .setAlgorithmName("XGBoost"); if((Boolean.TRUE).equals(compact)){ Visitor visitor = new TreeModelCompactor(); visitor.applyTo(miningModel); } return miningModel; }
PMML pmml = loadSasEmPMML() Visitor invalidSubstringCorrector = new AbstractVisitor(){ @Override public VisitorAction visit(Apply apply){ if(isInvalidSubstring(apply)){ List<Expression> expressions = apply.getExpressions(); expressions.set(2, new FieldRef(new FieldName("FMTWIDTH"))); } return super.visit(apply); } private boolean isInvalidSubstring(Apply apply){ if(("substring").equals(apply.getFunction())){ List<Expression> expressions = apply.getExpressions(); Expression lengthArgument = expressions.get(2); if(lengthArgument instanceof Constant){ Constant constant = (Constant)lengthArgument; return ("FMTWIDTH").equals(constant.getValue()); } } return false; } }; invalidSubstringCorrector.applyTo(pmml);
Visitor visitor = new TreeModelCompactor(); visitor.applyTo(treeModel);
@Test public void findChained() throws Exception { PMML pmml = ResourceUtil.unmarshal(ChainedSegmentationTest.class); Visitor visitor = new AbstractVisitor(){ @Override public VisitorAction visit(Segment segment){ Model model = segment.getModel(); String id = segment.getId(); if("first".equals(id)){ checkFields(FieldNameUtil.create("x1_squared"), model); } else if("second".equals(id)){ checkFields(FieldNameUtil.create("x2", "x2_squared"), model); } else if("third".equals(id)){ checkFields(FieldNameUtil.create("x3"), model); } else if("sum".equals(id)){ checkFields(FieldNameUtil.create("first_output", "second_output", "third_output"), model); } else { throw new AssertionError(); } return super.visit(segment); } }; visitor.applyTo(pmml); }
public LoadingModelEvaluatorBuilder load(InputStream is, String modelName) throws SAXException, JAXBException { Schema schema = getSchema(); ValidationEventHandler validationEventHandler = getValidationEventHandler(); List<? extends XMLFilter> filters = getFilters(); boolean locatable = getLocatable(); VisitorBattery visitors = getVisitors(); Unmarshaller unmarshaller = JAXBUtil.createUnmarshaller(); unmarshaller.setSchema(schema); unmarshaller.setEventHandler(validationEventHandler); if(filters == null){ filters = Collections.singletonList(new ImportFilter()); } Source source = SAXUtil.createFilteredSource(is, filters.toArray(new XMLFilter[filters.size()])); PMML pmml = (PMML)unmarshaller.unmarshal(source); Visitor locatorHandler = (locatable ? new LocatorTransformer() : new LocatorNullifier()); locatorHandler.applyTo(pmml); if(visitors != null && visitors.size() > 0){ visitors.applyTo(pmml); } Model model = PMMLUtil.findModel(pmml, modelName); setPMML(pmml); setModel(model); return this; }
private <P extends Number> TreeModel encodeTreeModel(MiningFunction miningFunction, ScoreEncoder<P> scoreEncoder, List<? extends Number> leftDaughter, List<? extends Number> rightDaughter, List<P> nodepred, List<? extends Number> bestvar, List<Double> xbestsplit, Schema schema){ RGenericVector randomForest = getObject(); Node root = encodeNode(new True(), 0, scoreEncoder, leftDaughter, rightDaughter, bestvar, xbestsplit, nodepred, new CategoryManager(), schema); TreeModel treeModel = new TreeModel(miningFunction, ModelUtil.createMiningSchema(schema.getLabel()), root) .setMissingValueStrategy(TreeModel.MissingValueStrategy.NULL_PREDICTION) .setSplitCharacteristic(TreeModel.SplitCharacteristic.BINARY_SPLIT); if(this.compact){ Visitor visitor = new RandomForestCompactor(); visitor.applyTo(treeModel); } return treeModel; }
@Test public void unmarshal() throws Exception { PMML pmml = ResourceUtil.unmarshal(InlineTableTest.class); Row row = getRow(pmml); List<?> content = row.getContent(); assertEquals(9, content.size()); Visitor visitor = new RowCleaner(); visitor.applyTo(pmml); assertEquals(4, content.size()); Object first = content.get(0); Object second = content.get(1); Object third = content.get(2); Object fourth = content.get(3); assertTrue(first instanceof Element); assertTrue(second instanceof InputCell); assertTrue(third instanceof OutputCell); assertTrue(fourth instanceof Element); assertEquals("0", ((InputCell)second).getValue()); assertEquals("zero", ((OutputCell)third).getValue()); }
visitor.applyTo(pmml);
visitor.applyTo(pmml);
visitor.applyTo(pmml);
visitor.applyTo(pmml);