/** * Validates that the encoded PMML model received matches expected schema. * * @param pmml {@link PMML} encoding of KMeans Clustering * @param schema expected schema attributes of KMeans Clustering */ public static void validatePMMLVsSchema(PMML pmml, InputSchema schema) { List<Model> models = pmml.getModels(); Preconditions.checkArgument(models.size() == 1, "Should have exactly one model, but had %s", models.size()); Model model = models.get(0); Preconditions.checkArgument(model instanceof ClusteringModel); Preconditions.checkArgument(model.getMiningFunction() == MiningFunction.CLUSTERING); DataDictionary dictionary = pmml.getDataDictionary(); Preconditions.checkArgument( schema.getFeatureNames().equals(AppPMMLUtils.getFeatureNames(dictionary)), "Feature names in schema don't match names in PMML"); MiningSchema miningSchema = model.getMiningSchema(); Preconditions.checkArgument(schema.getFeatureNames().equals( AppPMMLUtils.getFeatureNames(miningSchema))); }
"Feature names in schema don't match names in PMML"); MiningSchema miningSchema = model.getMiningSchema(); Preconditions.checkArgument(schema.getFeatureNames().equals( AppPMMLUtils.getFeatureNames(miningSchema)));
MiningSchema miningSchema = model.getMiningSchema(); int targetIndex = Objects.requireNonNull(AppPMMLUtils.findTargetIndex(miningSchema));
checkMiningSchema(schema, rootModel.getMiningSchema());
protected EvaluationException createMiningSchemaException(String message){ M model = getModel(); MiningSchema miningSchema = model.getMiningSchema(); return new EvaluationException(message, miningSchema); }
/** * Validates that the encoded PMML model received matches expected schema. * * @param pmml {@link PMML} encoding of KMeans Clustering * @param schema expected schema attributes of KMeans Clustering */ public static void validatePMMLVsSchema(PMML pmml, InputSchema schema) { List<Model> models = pmml.getModels(); Preconditions.checkArgument(models.size() == 1, "Should have exactly one model, but had %s", models.size()); Model model = models.get(0); Preconditions.checkArgument(model instanceof ClusteringModel); Preconditions.checkArgument(model.getMiningFunction() == MiningFunction.CLUSTERING); DataDictionary dictionary = pmml.getDataDictionary(); Preconditions.checkArgument( schema.getFeatureNames().equals(AppPMMLUtils.getFeatureNames(dictionary)), "Feature names in schema don't match names in PMML"); MiningSchema miningSchema = model.getMiningSchema(); Preconditions.checkArgument(schema.getFeatureNames().equals( AppPMMLUtils.getFeatureNames(miningSchema))); }
private void clean(Model model, Set<FieldName> activeFieldNames){ MiningSchema miningSchema = model.getMiningSchema();
private void clean(Model model, Set<FieldName> activeFieldNames){ MiningSchema miningSchema = model.getMiningSchema();
protected void checkSchema(ModelEvaluator<?> modelEvaluator){ Model model = modelEvaluator.getModel(); MiningSchema miningSchema = model.getMiningSchema(); List<InputField> inputFields = modelEvaluator.getInputFields(); List<InputField> groupFields = Collections.emptyList(); if(modelEvaluator instanceof HasGroupFields){ HasGroupFields hasGroupFields = (HasGroupFields)modelEvaluator; groupFields = hasGroupFields.getGroupFields(); } // End if if((inputFields.size() + groupFields.size()) > 1000){ throw new InvalidElementException("Model has too many input fields", miningSchema); } List<TargetField> targetFields = modelEvaluator.getTargetFields(); List<OutputField> outputFields = modelEvaluator.getOutputFields(); if((targetFields.size() + outputFields.size()) < 1){ throw new InvalidElementException("Model does not have any target or output fields", miningSchema); } }
static private MiningField getTargetField(Model model){ MiningSchema miningSchema = model.getMiningSchema(); MiningField result = null; List<MiningField> miningFields = miningSchema.getMiningFields(); for(MiningField miningField : miningFields){ MiningField.UsageType usageType = miningField.getUsageType(); switch(usageType){ case TARGET: case PREDICTED: if(result != null){ throw new UnsupportedElementException(miningSchema); } result = miningField; break; default: break; } } return result; } }
private void processModel(Model model){ Set<Field<?>> targetFields = getTargetFields(); MiningSchema miningSchema = model.getMiningSchema(); if(miningSchema != null && miningSchema.hasMiningFields()){ Set<FieldName> targetFieldNames = new LinkedHashSet<>(); List<MiningField> miningFields = miningSchema.getMiningFields(); for(MiningField miningField : miningFields){ FieldName name = miningField.getName(); MiningField.UsageType usageType = miningField.getUsageType(); switch(usageType){ case TARGET: case PREDICTED: targetFieldNames.add(name); break; default: break; } } if(targetFieldNames.size() > 0){ Set<Field<?>> modelFields = getFields(model); targetFields.addAll(FieldUtil.selectAll(modelFields, targetFieldNames)); } } }
"Feature names in schema don't match names in PMML"); MiningSchema miningSchema = model.getMiningSchema(); Preconditions.checkArgument(schema.getFeatureNames().equals( AppPMMLUtils.getFeatureNames(miningSchema)));
private void processModel(Model model){ Set<Field<?>> targetFields = getTargetFields(); MiningSchema miningSchema = model.getMiningSchema(); if(miningSchema != null && miningSchema.hasMiningFields()){ Set<FieldName> targetFieldNames = new LinkedHashSet<>(); List<MiningField> miningFields = miningSchema.getMiningFields(); for(MiningField miningField : miningFields){ FieldName name = miningField.getName(); MiningField.UsageType usageType = miningField.getUsageType(); switch(usageType){ case TARGET: case PREDICTED: targetFieldNames.add(name); break; default: break; } } if(targetFieldNames.size() > 0){ Set<Field<?>> modelFields = getFields(model); targetFields.addAll(FieldUtil.selectAll(modelFields, targetFieldNames)); } } }
/** * Based on the usage type, get the column indexes for corresponding fields * in the input data set * * @param pmml * the pmml model * @param type * the type * @return dic fields */ public static int[] getDicFieldIDViaType(PMML pmml, FieldUsageType type) { List<Integer> activeFields = new ArrayList<Integer>(); HashMap<String, Integer> dMap = new HashMap<String, Integer>(); int index = 0; for(DataField dField: pmml.getDataDictionary().getDataFields()) dMap.put(dField.getName().getValue(), index++); for(MiningField mField: pmml.getModels().get(0).getMiningSchema().getMiningFields()) { if(mField.getUsageType() == type) activeFields.add(dMap.get(mField.getName().getValue())); } return Ints.toArray(activeFields); }
protected List<InputField> createInputFields(MiningField.UsageType usageType){ M model = getModel(); MiningSchema miningSchema = model.getMiningSchema(); List<InputField> inputFields = new ArrayList<>(); if(miningSchema.hasMiningFields()){ List<MiningField> miningFields = miningSchema.getMiningFields(); for(MiningField miningField : miningFields){ FieldName name = miningField.getName(); if(!(miningField.getUsageType()).equals(usageType)){ continue; } Field<?> field = getDataField(name); if(field == null){ field = new VariableField(name); } InputField inputField = new InputField(field, miningField); inputFields.add(inputField); } } return ImmutableList.copyOf(inputFields); }
protected List<TargetField> createTargetFields(){ M model = getModel(); MiningSchema miningSchema = model.getMiningSchema();
private Set<FieldName> processMiningModel(MiningModel miningModel){ Set<Field<?>> activeFields = DeepFieldResolverUtil.getActiveFields(this, miningModel); Set<FieldName> activeFieldNames = new HashSet<>(); Segmentation segmentation = miningModel.getSegmentation(); List<Segment> segments = segmentation.getSegments(); for(Segment segment : segments){ Model model = segment.getModel(); if(model == null){ continue; } MiningSchema miningSchema = model.getMiningSchema(); List<MiningField> miningFields = miningSchema.getMiningFields(); for(MiningField miningField : miningFields){ FieldName name = miningField.getName(); MiningField.UsageType usageType = miningField.getUsageType(); switch(usageType){ case ACTIVE: activeFieldNames.add(name); break; default: break; } } } Set<Field<?>> modelFields = getFields(miningModel); Set<Field<?>> activeModelFields = FieldUtil.selectAll(modelFields, activeFieldNames, true); activeFields.addAll(activeModelFields); expandDerivedFields(miningModel, activeFields); return FieldUtil.nameSet(activeFields); }
private Set<FieldName> processMiningModel(MiningModel miningModel){ Set<Field<?>> activeFields = DeepFieldResolverUtil.getActiveFields(this, miningModel); Set<FieldName> activeFieldNames = new HashSet<>(); Segmentation segmentation = miningModel.getSegmentation(); List<Segment> segments = segmentation.getSegments(); for(Segment segment : segments){ Model model = segment.getModel(); if(model == null){ continue; } MiningSchema miningSchema = model.getMiningSchema(); List<MiningField> miningFields = miningSchema.getMiningFields(); for(MiningField miningField : miningFields){ FieldName name = miningField.getName(); MiningField.UsageType usageType = miningField.getUsageType(); switch(usageType){ case ACTIVE: activeFieldNames.add(name); break; default: break; } } } Set<Field<?>> modelFields = getFields(miningModel); Set<Field<?>> activeModelFields = FieldUtil.selectAll(modelFields, activeFieldNames, true); activeFields.addAll(activeModelFields); expandDerivedFields(miningModel, activeFields); return FieldUtil.nameSet(activeFields); }
MiningSchema miningSchema = model.getMiningSchema(); if(miningSchema == null){ throw new MissingElementException(MissingElementException.formatMessage(XPathUtil.formatElement(model.getClass()) + "/" + XPathUtil.formatElement(MiningSchema.class)), model);
public JavaModel(Model model){ setModelName(model.getModelName()); setMiningFunction(model.getMiningFunction()); setAlgorithmName(model.getAlgorithmName()); setScorable(model.isScorable()); setMathContext(model.getMathContext()); setMiningSchema(model.getMiningSchema()); setOutput(model.getOutput()); setModelStats(model.getModelStats()); setModelExplanation(model.getModelExplanation()); setTargets(model.getTargets()); setLocalTransformations(model.getLocalTransformations()); setModelVerification(model.getModelVerification()); }