/** * @param miningSchema {@link MiningSchema} from a model * @return names of features in order */ public static List<String> getFeatureNames(MiningSchema miningSchema) { return miningSchema.getMiningFields().stream().map(field -> field.getName().getValue()) .collect(Collectors.toList()); }
@Test public void testBuildMiningSchema() { MiningSchema miningSchema = AppPMMLUtils.buildMiningSchema(buildTestSchema()); List<MiningField> miningFields = miningSchema.getMiningFields(); assertEquals(4, miningFields.size()); String[] fieldNames = { "foo", "bar", "baz", "bing" }; for (int i = 0; i < fieldNames.length; i++) { assertEquals(fieldNames[i], miningFields.get(i).getName().getValue()); } assertEquals(MiningField.UsageType.SUPPLEMENTARY, miningFields.get(0).getUsageType()); assertEquals(MiningField.UsageType.PREDICTED, miningFields.get(1).getUsageType()); assertEquals(MiningField.UsageType.SUPPLEMENTARY, miningFields.get(2).getUsageType()); assertEquals(MiningField.UsageType.ACTIVE, miningFields.get(3).getUsageType()); assertEquals(OpType.CATEGORICAL, miningFields.get(1).getOpType()); assertEquals(OpType.CONTINUOUS, miningFields.get(3).getOpType()); }
MiningField miningField = miningFields.get(i); String expectedFeature = expectedFeatureNames.get(i); String featureName = miningField.getName().getValue(); assertEquals("Wrong feature at position " + i, expectedFeature, featureName); if (schema.isNumeric(expectedFeature) || schema.isCategorical(expectedFeature)) {
@Override public org.dmg.pmml.FieldName getKey() { return getName(); }
@Override public org.dmg.pmml.FieldName getKey() { return getName(); }
@Override public ElementKey createKey(MiningField miningField){ Object[] content = {miningField.getName()}; return new ElementKey(content); } };
@Override public ElementKey createKey(MiningField miningField){ Object[] content = {miningField.getName()}; return new ElementKey(content); } };
public static Map<FieldName, MiningField> getMiningFieldMap(MiningSchema miningSchema) { Map<FieldName, MiningField> miningFieldMap = new HashMap<FieldName, MiningField>(); for(MiningField miningField: miningSchema.getMiningFields()) { miningFieldMap.put(miningField.getName(), miningField); } return miningFieldMap; }
public static Map<FieldName, MiningField> getMiningFieldMap(MiningSchema miningSchema) { Map<FieldName, MiningField> miningFieldMap = new HashMap<FieldName, MiningField>(); for(MiningField miningField: miningSchema.getMiningFields()) { miningFieldMap.put(miningField.getName(), miningField); } return miningFieldMap; }
@Override public ElementKey createKey(MiningField miningField){ Object[] content = {miningField.getName()}; return new ElementKey(content); } };
/** * @param miningSchema {@link MiningSchema} from a model * @return names of features in order */ public static List<String> getFeatureNames(MiningSchema miningSchema) { return miningSchema.getMiningFields().stream().map(field -> field.getName().getValue()) .collect(Collectors.toList()); }
public InputField(Field<?> field, MiningField miningField){ super(field); setMiningField(Objects.requireNonNull(miningField)); if(!Objects.equals(field.getName(), miningField.getName())){ throw new IllegalArgumentException(); } }
private boolean isRootInMiningList(FieldName root, List<MiningField> miningList) { for(int i = 0; i < miningList.size(); i++) { MiningField mField = miningList.get(i); if(mField.getUsageType() != FieldUsageType.ACTIVE) continue; FieldName mFieldName = mField.getName(); if(root.equals(mFieldName)) { return true; } } return false; }
private static List<String> getSchemaFieldViaUsageType(final MiningSchema schema, final FieldUsageType type) { List<String> targetFields = new ArrayList<String>(); for(MiningField f: schema.getMiningFields()) { FieldUsageType uType = f.getUsageType(); if(uType == type) targetFields.add(f.getName().getValue()); } return targetFields; }
/** * This function returns all used field names based on the given mining * schema * * @param schema * the schema * @return field names */ public static List<String> getSchemaSelectedFields(final MiningSchema schema) { List<String> targetFields = new ArrayList<String>(); for(MiningField f: schema.getMiningFields()) { FieldUsageType uType = f.getUsageType(); if(uType == FieldUsageType.TARGET || uType == FieldUsageType.ACTIVE) targetFields.add(f.getName().getValue()); } return targetFields; }
MiningField miningField = it.next(); FieldName name = miningField.getName();
static private Set<FieldName> getFieldNames(MiningSchema miningSchema){ Set<FieldName> result = new LinkedHashSet<>(); List<MiningField> miningFields = miningSchema.getMiningFields(); for(MiningField miningField : miningFields){ result.add(miningField.getName()); } 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)); } } }
/** * 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); }