org.dmg.pmml.mining.Segment Java Examples
The following examples show how to use
org.dmg.pmml.mining.Segment.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: MiningModelEvaluator.java From jpmml-evaluator with GNU Affero General Public License v3.0 | 6 votes |
private List<OutputField> createNestedOutputFields(){ MiningModel miningModel = getModel(); Segmentation segmentation = miningModel.getSegmentation(); List<Segment> segments = segmentation.getSegments(); Segmentation.MultipleModelMethod multipleModelMethod = segmentation.getMultipleModelMethod(); switch(multipleModelMethod){ case SELECT_FIRST: return createNestedOutputFields(getActiveHead(segments)); case SELECT_ALL: // Ignored break; case MODEL_CHAIN: return createNestedOutputFields(getActiveTail(segments)); default: break; } return Collections.emptyList(); }
Example #2
Source File: MiningModelUtil.java From pyramid with Apache License 2.0 | 5 votes |
static public Segmentation createSegmentation(Segmentation.MultipleModelMethod multipleModelMethod, List<? extends Model> models, List<? extends Number> weights){ if((weights != null) && (models.size() != weights.size())){ throw new IllegalArgumentException(); } List<Segment> segments = new ArrayList<>(); for(int i = 0; i < models.size(); i++){ Model model = models.get(i); Number weight = (weights != null ? weights.get(i) : null); Segment segment = new Segment() .setId(String.valueOf(i + 1)) .setPredicate(new True()) .setModel(model); if(weight != null && !ValueUtil.isOne(weight)){ segment.setWeight(ValueUtil.asDouble(weight)); } segments.add(segment); } return new Segmentation(multipleModelMethod, segments); }
Example #3
Source File: MiningModelEvaluator.java From jpmml-evaluator with GNU Affero General Public License v3.0 | 5 votes |
private List<OutputField> createNestedOutputFields(List<Segment> segments){ List<OutputField> result = new ArrayList<>(); BiMap<String, Segment> entityRegistry = getEntityRegistry(); for(int i = 0, max = segments.size(); i < max; i++){ Segment segment = segments.get(i); Model model = segment.getModel(); if(model == null){ throw new MissingElementException(MissingElementException.formatMessage(XPathUtil.formatElement(segment.getClass()) + "/<Model>"), segment); } String segmentId = EntityUtil.getId(segment, entityRegistry); ModelEvaluator<?> segmentModelEvaluator = ensureSegmentModelEvaluator(segmentId, model); List<OutputField> outputFields = segmentModelEvaluator.getOutputFields(); for(OutputField outputField : outputFields){ OutputField nestedOutputField = new OutputField(outputField.getField(), outputField.getDepth() + 1); result.add(nestedOutputField); } } return ImmutableList.copyOf(result); }
Example #4
Source File: MiningModelEvaluator.java From jpmml-evaluator with GNU Affero General Public License v3.0 | 5 votes |
private List<Segment> getActiveHead(List<Segment> segments){ for(int i = 0, max = segments.size(); i < max; i++){ Segment segment = segments.get(i); Predicate predicate = PredicateUtil.ensurePredicate(segment); if(predicate instanceof True){ return segments.subList(0, i + 1); } } return segments; }
Example #5
Source File: MiningModelEvaluator.java From jpmml-evaluator with GNU Affero General Public License v3.0 | 5 votes |
@Override public BiMap<String, Segment> getEntityRegistry(){ if(this.entityRegistry == null){ this.entityRegistry = getValue(MiningModelEvaluator.entityCache); } return this.entityRegistry; }
Example #6
Source File: FieldResolver.java From jpmml-model with BSD 3-Clause "New" or "Revised" License | 5 votes |
static private List<Output> getEarlierOutputs(Segmentation segmentation, Segment targetSegment){ List<Output> result = new ArrayList<>(); Segmentation.MultipleModelMethod multipleModelMethod = segmentation.getMultipleModelMethod(); switch(multipleModelMethod){ case MODEL_CHAIN: break; default: return Collections.emptyList(); } List<Segment> segments = segmentation.getSegments(); for(Segment segment : segments){ Model model = segment.getModel(); if(targetSegment != null && (targetSegment).equals(segment)){ break; } Output output = model.getOutput(); if(output != null){ result.add(output); } } return result; }
Example #7
Source File: SelectFirstUtil.java From jpmml-sklearn with GNU Affero General Public License v3.0 | 5 votes |
static private MiningModel encodeModel(MiningFunction miningFunction, List<Object[]> steps, Schema schema){ if(steps.size() < 1){ throw new IllegalArgumentException(); } Label label = schema.getLabel(); List<? extends Feature> features = schema.getFeatures(); Segmentation segmentation = new Segmentation(Segmentation.MultipleModelMethod.SELECT_FIRST, null); Scope scope = new DataFrameScope(FieldName.create("X"), features); for(Object[] step : steps){ String name = TupleUtil.extractElement(step, 0, String.class); Estimator estimator = TupleUtil.extractElement(step, 1, Estimator.class); String predicate = TupleUtil.extractElement(step, 2, String.class); if(!(miningFunction).equals(estimator.getMiningFunction())){ throw new IllegalArgumentException(); } Predicate pmmlPredicate = PredicateTranslator.translate(predicate, scope); Model model = estimator.encodeModel(schema); Segment segment = new Segment(pmmlPredicate, model) .setId(name); segmentation.addSegments(segment); } MiningModel miningModel = new MiningModel(miningFunction, ModelUtil.createMiningSchema(label)) .setSegmentation(segmentation); return miningModel; }
Example #8
Source File: MiningModelEvaluator.java From jpmml-evaluator with GNU Affero General Public License v3.0 | 4 votes |
public MiningModelEvaluator(PMML pmml, MiningModel miningModel){ super(pmml, miningModel); if(miningModel.hasEmbeddedModels()){ List<EmbeddedModel> embeddedModels = miningModel.getEmbeddedModels(); EmbeddedModel embeddedModel = Iterables.getFirst(embeddedModels, null); throw new UnsupportedElementException(embeddedModel); } Segmentation segmentation = miningModel.getSegmentation(); if(segmentation == null){ throw new MissingElementException(miningModel, PMMLElements.MININGMODEL_SEGMENTATION); } Segmentation.MultipleModelMethod multipleModelMethod = segmentation.getMultipleModelMethod(); if(multipleModelMethod == null){ throw new MissingAttributeException(segmentation, PMMLAttributes.SEGMENTATION_MULTIPLEMODELMETHOD); } // End if if(!segmentation.hasSegments()){ throw new MissingElementException(segmentation, PMMLElements.SEGMENTATION_SEGMENTS); } List<Segment> segments = segmentation.getSegments(); for(Segment segment : segments){ VariableWeight variableWeight = segment.getVariableWeight(); if(variableWeight != null){ throw new UnsupportedElementException(variableWeight); } } LocalTransformations localTransformations = segmentation.getLocalTransformations(); if(localTransformations != null){ throw new UnsupportedElementException(localTransformations); } Output output = miningModel.getOutput(); if(output != null && output.hasOutputFields()){ this.segmentResultFeatures = CacheUtil.getValue(output, MiningModelEvaluator.segmentResultFeaturesCache); } }
Example #9
Source File: RDFUpdate.java From oryx with Apache License 2.0 | 4 votes |
private PMML rdfModelToPMML(RandomForestModel rfModel, CategoricalValueEncodings categoricalValueEncodings, int maxDepth, int maxSplitCandidates, String impurity, List<? extends IntLongMap> nodeIDCounts, IntLongMap predictorIndexCounts) { boolean classificationTask = rfModel.algo().equals(Algo.Classification()); Preconditions.checkState(classificationTask == inputSchema.isClassification()); DecisionTreeModel[] trees = rfModel.trees(); Model model; if (trees.length == 1) { model = toTreeModel(trees[0], categoricalValueEncodings, nodeIDCounts.get(0)); } else { MiningModel miningModel = new MiningModel(); model = miningModel; Segmentation.MultipleModelMethod multipleModelMethodType = classificationTask ? Segmentation.MultipleModelMethod.WEIGHTED_MAJORITY_VOTE : Segmentation.MultipleModelMethod.WEIGHTED_AVERAGE; List<Segment> segments = new ArrayList<>(trees.length); for (int treeID = 0; treeID < trees.length; treeID++) { TreeModel treeModel = toTreeModel(trees[treeID], categoricalValueEncodings, nodeIDCounts.get(treeID)); segments.add(new Segment() .setId(Integer.toString(treeID)) .setPredicate(new True()) .setModel(treeModel) .setWeight(1.0)); // No weights in MLlib impl now } miningModel.setSegmentation(new Segmentation(multipleModelMethodType, segments)); } model.setMiningFunction(classificationTask ? MiningFunction.CLASSIFICATION : MiningFunction.REGRESSION); double[] importances = countsToImportances(predictorIndexCounts); model.setMiningSchema(AppPMMLUtils.buildMiningSchema(inputSchema, importances)); DataDictionary dictionary = AppPMMLUtils.buildDataDictionary(inputSchema, categoricalValueEncodings); PMML pmml = PMMLUtils.buildSkeletonPMML(); pmml.setDataDictionary(dictionary); pmml.addModels(model); AppPMMLUtils.addExtension(pmml, "maxDepth", maxDepth); AppPMMLUtils.addExtension(pmml, "maxSplitCandidates", maxSplitCandidates); AppPMMLUtils.addExtension(pmml, "impurity", impurity); return pmml; }
Example #10
Source File: MiningModelEvaluator.java From jpmml-evaluator with GNU Affero General Public License v3.0 | 4 votes |
private List<Segment> getActiveTail(List<Segment> segments){ return Lists.reverse(getActiveHead(Lists.reverse(segments))); }
Example #11
Source File: RDFPMMLUtilsTest.java From oryx with Apache License 2.0 | 4 votes |
private static PMML buildDummyClassificationModel(int numTrees) { PMML pmml = PMMLUtils.buildSkeletonPMML(); List<DataField> dataFields = new ArrayList<>(); DataField predictor = new DataField(FieldName.create("color"), OpType.CATEGORICAL, DataType.STRING); predictor.addValues(new Value("yellow"), new Value("red")); dataFields.add(predictor); DataField target = new DataField(FieldName.create("fruit"), OpType.CATEGORICAL, DataType.STRING); target.addValues(new Value("banana"), new Value("apple")); dataFields.add(target); DataDictionary dataDictionary = new DataDictionary(dataFields).setNumberOfFields(dataFields.size()); pmml.setDataDictionary(dataDictionary); List<MiningField> miningFields = new ArrayList<>(); MiningField predictorMF = new MiningField(FieldName.create("color")) .setOpType(OpType.CATEGORICAL) .setUsageType(MiningField.UsageType.ACTIVE) .setImportance(0.5); miningFields.add(predictorMF); MiningField targetMF = new MiningField(FieldName.create("fruit")) .setOpType(OpType.CATEGORICAL) .setUsageType(MiningField.UsageType.PREDICTED); miningFields.add(targetMF); MiningSchema miningSchema = new MiningSchema(miningFields); double dummyCount = 2.0; Node rootNode = new ComplexNode().setId("r").setRecordCount(dummyCount).setPredicate(new True()); double halfCount = dummyCount / 2; Node left = new ComplexNode().setId("r-").setRecordCount(halfCount).setPredicate(new True()); left.addScoreDistributions(new ScoreDistribution("apple", halfCount)); Node right = new ComplexNode().setId("r+").setRecordCount(halfCount) .setPredicate(new SimpleSetPredicate(FieldName.create("color"), SimpleSetPredicate.BooleanOperator.IS_NOT_IN, new Array(Array.Type.STRING, "red"))); right.addScoreDistributions(new ScoreDistribution("banana", halfCount)); rootNode.addNodes(right, left); TreeModel treeModel = new TreeModel(MiningFunction.CLASSIFICATION, miningSchema, rootNode) .setSplitCharacteristic(TreeModel.SplitCharacteristic.BINARY_SPLIT) .setMissingValueStrategy(TreeModel.MissingValueStrategy.DEFAULT_CHILD); if (numTrees > 1) { MiningModel miningModel = new MiningModel(MiningFunction.CLASSIFICATION, miningSchema); List<Segment> segments = new ArrayList<>(); for (int i = 0; i < numTrees; i++) { segments.add(new Segment() .setId(Integer.toString(i)) .setPredicate(new True()) .setModel(treeModel) .setWeight(1.0)); } miningModel.setSegmentation( new Segmentation(Segmentation.MultipleModelMethod.WEIGHTED_MAJORITY_VOTE, segments)); pmml.addModels(miningModel); } else { pmml.addModels(treeModel); } return pmml; }
Example #12
Source File: MiningModelEvaluator.java From jpmml-evaluator with GNU Affero General Public License v3.0 | 4 votes |
@Override public BiMap<String, Segment> load(MiningModel miningModel){ Segmentation segmentation = miningModel.getSegmentation(); return EntityUtil.buildBiMap(segmentation.getSegments()); }
Example #13
Source File: SegmentResult.java From jpmml-evaluator with GNU Affero General Public License v3.0 | 4 votes |
SegmentResult(Segment segment, Map<FieldName, ?> results){ setSegment(segment); setResults(results); }
Example #14
Source File: SegmentResult.java From jpmml-evaluator with GNU Affero General Public License v3.0 | 4 votes |
public Number getWeight(){ Segment segment = getSegment(); return segment.getWeight(); }
Example #15
Source File: SegmentResult.java From jpmml-evaluator with GNU Affero General Public License v3.0 | 4 votes |
public Segment getSegment(){ return this.segment; }
Example #16
Source File: SegmentResult.java From jpmml-evaluator with GNU Affero General Public License v3.0 | 4 votes |
private void setSegment(Segment segment){ this.segment = segment; }
Example #17
Source File: MissingPredictionTest.java From jpmml-evaluator with GNU Affero General Public License v3.0 | 4 votes |
@Test public void evaluate() throws Exception { MiningModelEvaluator evaluator = (MiningModelEvaluator)createModelEvaluator(); MiningModel miningModel = evaluator.getModel(); Segmentation segmentation = miningModel.getSegmentation(); assertEquals(null, evaluate(evaluator, null)); segmentation.setMissingThreshold(0.25); assertEquals(null, evaluate(evaluator, 0d)); assertEquals(null, evaluate(evaluator, 1d)); assertEquals(null, evaluate(evaluator, 2d)); assertEquals((Integer)1, evaluate(evaluator, 3d)); assertEquals((Integer)1, evaluate(evaluator, 4d)); segmentation.setMissingThreshold(0.5d); assertEquals(null, evaluate(evaluator, 1d)); assertEquals((Integer)1, evaluate(evaluator, 2d)); assertEquals((Integer)1, evaluate(evaluator, 3d)); segmentation.setMissingThreshold(0.75d); // Two votes for the missing pseudo-category vs. one vote for the "1" category assertEquals(null, evaluate(evaluator, 1d)); assertEquals((Integer)1, evaluate(evaluator, 2d)); assertEquals((Integer)1, evaluate(evaluator, 3d)); List<Segment> segments = segmentation.getSegments(); for(Segment segment : segments){ TreeModel treeModel = (TreeModel)segment.getModel(); treeModel.setNoTrueChildStrategy(TreeModel.NoTrueChildStrategy.RETURN_LAST_PREDICTION); } assertEquals(null, evaluate(evaluator, null)); assertEquals((Integer)0, evaluate(evaluator, 1d)); assertEquals((Integer)1, evaluate(evaluator, 2d)); assertEquals((Integer)1, evaluate(evaluator, 3d)); }
Example #18
Source File: MiningModelEvaluationContext.java From jpmml-evaluator with GNU Affero General Public License v3.0 | 3 votes |
public MiningModelEvaluationContext(MiningModelEvaluator miningModelEvaluator){ super(miningModelEvaluator); BiMap<String, Segment> entityRegistry = miningModelEvaluator.getEntityRegistry(); this.results = new HashMap<>(2 * entityRegistry.size()); }