private Predicate buildPredicate(Split split, CategoricalValueEncodings categoricalValueEncodings) { if (split == null) { // Left child always applies, but is evaluated second return new True(); } int featureIndex = inputSchema.predictorToFeatureIndex(split.feature()); FieldName fieldName = FieldName.create(inputSchema.getFeatureNames().get(featureIndex)); if (split.featureType().equals(FeatureType.Categorical())) { // Note that categories in MLlib model select the *left* child but the // convention here will be that the predicate selects the *right* child // So the predicate will evaluate "not in" this set // More ugly casting @SuppressWarnings("unchecked") Collection<Double> javaCategories = (Collection<Double>) (Collection<?>) JavaConversions.seqAsJavaList(split.categories()); Set<Integer> negativeEncodings = javaCategories.stream().map(Double::intValue).collect(Collectors.toSet()); Map<Integer,String> encodingToValue = categoricalValueEncodings.getEncodingValueMap(featureIndex); List<String> negativeValues = negativeEncodings.stream().map(encodingToValue::get).collect(Collectors.toList()); String joinedValues = TextUtils.joinPMMLDelimited(negativeValues); return new SimpleSetPredicate(fieldName, SimpleSetPredicate.BooleanOperator.IS_NOT_IN, new Array(Array.Type.STRING, joinedValues)); } else { // For MLlib, left means <= threshold, so right means > return new SimplePredicate(fieldName, SimplePredicate.Operator.GREATER_THAN) .setValue(Double.toString(split.threshold())); } }
SimplePredicate.Operator operator = simplePredicate.getOperator(); Preconditions.checkArgument( operator == SimplePredicate.Operator.GREATER_OR_EQUAL || operator == SimplePredicate.Operator.GREATER_THAN); double threshold = Double.parseDouble(simplePredicate.getValue()); threshold += Math.ulp(threshold); int featureNumber = featureNames.indexOf(simplePredicate.getField().getValue()); decision = new NumericDecision(featureNumber, threshold, defaultDecision);
ColumnConfig columnConfig = this.columnConfigList.get(split.getColumnNum()); if(columnConfig.isNumerical()) { SimplePredicate p = new SimplePredicate(); p.setValue(String.valueOf(split.getThreshold())); p.setField(new FieldName(CommonUtils.getSimpleColumnName(columnConfig.getColumnName()))); if(isLeft) { p.setOperator(SimplePredicate.Operator.fromValue("lessThan")); } else { p.setOperator(SimplePredicate.Operator.fromValue("greaterOrEqual"));
static private SimplePredicate createSimplePredicate(FieldName field, SimplePredicate.Operator operator){ SimplePredicate simplePredicate = new SimplePredicate(field, operator); return simplePredicate; }
Predicate childPredicate = child.getPredicate(); if(!hasFieldReference(childPredicate, simplePredicate.getField()) || !hasOperator(childPredicate, simplePredicate.getOperator())){ break;
@Override public VisitorAction visit(SimplePredicate simplePredicate){ process(simplePredicate.getField()); return super.visit(simplePredicate); }
public Predicate optimize(Predicate predicate){ if(predicate instanceof SimplePredicate){ SimplePredicate simplePredicate = (SimplePredicate)predicate; SimplePredicate.Operator operator = simplePredicate.getOperator(); switch(operator){ case IS_MISSING: case IS_NOT_MISSING: return predicate; default: break; } return new RichSimplePredicate(simplePredicate); } else if(predicate instanceof SimpleSetPredicate){ SimpleSetPredicate simpleSetPredicate = (SimpleSetPredicate)predicate; return new RichSimpleSetPredicate(simpleSetPredicate); } return predicate; } }
@Test public void intern(){ SimplePredicate left = new CustomSimplePredicate(FieldName.create("x"), SimplePredicate.Operator.LESS_THAN, new String("0")); SimplePredicate right = new CustomSimplePredicate(FieldName.create("y"), SimplePredicate.Operator.LESS_THAN, new String("0")); assertNotSame(left.getValue(), right.getValue()); CompoundPredicate compoundPredicate = new CompoundPredicate(CompoundPredicate.BooleanOperator.OR) .addPredicates(left, right); StringInterner interner = new StringInterner(); interner.applyTo(compoundPredicate); assertSame(left.getValue(), right.getValue()); } }
SimplePredicate simplePredicate = new SimplePredicate() .setField(binaryFeature.getName()) .setOperator(SimplePredicate.Operator.EQUAL) .setValue(binaryFeature.getValue());
/** * Create an instance of {@link SimplePredicate } * */ public SimplePredicate createSimplePredicate() { return new SimplePredicate(); }
@Override public VisitorAction visit(SimplePredicate simplePredicate){ process(simplePredicate.getField()); return super.visit(simplePredicate); }
public Predicate optimize(Predicate predicate){ if(predicate instanceof SimplePredicate){ SimplePredicate simplePredicate = (SimplePredicate)predicate; SimplePredicate.Operator operator = simplePredicate.getOperator(); switch(operator){ case IS_MISSING: case IS_NOT_MISSING: return predicate; default: break; } return new RichSimplePredicate(simplePredicate); } else if(predicate instanceof SimpleSetPredicate){ SimpleSetPredicate simpleSetPredicate = (SimpleSetPredicate)predicate; return new RichSimpleSetPredicate(simpleSetPredicate); } return predicate; } }
.setScore("-2.0"); Node right = new Node().setId("r+").setRecordCount(halfCount) .setPredicate(new SimplePredicate(FieldName.create("foo"), SimplePredicate.Operator.GREATER_THAN).setValue("3.14")) .setScore("2.0");
@Override public ElementKey createKey(SimplePredicate simplePredicate){ Object[] content = {simplePredicate.getField(), simplePredicate.getOperator(), simplePredicate.getValue()}; return new ElementKey(content); } };
/** * Create an instance of {@link SimplePredicate } * */ public SimplePredicate createSimplePredicate() { return new SimplePredicate(); }
static private SimplePredicate createSimplePredicate(FieldName name, SimplePredicate.Operator operator, String value){ return new SimplePredicate(name, operator) .setValue(value); }
@Override public ElementKey createKey(SimplePredicate simplePredicate){ Object[] content = {simplePredicate.getField(), simplePredicate.getOperator(), simplePredicate.getValue()}; return new ElementKey(content); } };
.setPredicate(new SimplePredicate());
static private SimplePredicate createSimplePredicate(FieldName field, SimplePredicate.Operator operator, String value){ SimplePredicate simplePredicate = new SimplePredicate(field, operator) .setValue(value); return simplePredicate; } }
@Override public ElementKey createKey(SimplePredicate simplePredicate){ Object[] content = {simplePredicate.getField(), simplePredicate.getOperator(), simplePredicate.getValue()}; return new ElementKey(content); } };