@Override public Feature[] apply(Feature feature){ Feature[] features = new Feature[degree]; if(feature instanceof BinaryFeature){ BinaryFeature binaryFeature = (BinaryFeature)feature; Arrays.fill(features, binaryFeature); } else { features[0] = feature; ContinuousFeature continuousFeature = feature.toContinuousFeature(); for(int i = 2; i <= degree; i++){ features[i - 1] = new PowerFeature(encoder, continuousFeature, i); } } return features; } };
@Override public List<Feature> encodeFeatures(List<Feature> features, SkLearnEncoder encoder){ Integer power = getPower(); List<Feature> result = new ArrayList<>(); for(Feature feature : features){ if(feature instanceof BinaryFeature){ BinaryFeature binaryFeature = (BinaryFeature)feature; result.add(binaryFeature); } else { ContinuousFeature continuousFeature = feature.toContinuousFeature(); result.add(new PowerFeature(encoder, continuousFeature, power)); } } return result; }
public void addField(Field<?> field){ RExpEncoder encoder = getEncoder(); Feature feature = new ContinuousFeature(encoder, field); if(field instanceof DerivedField){ DerivedField derivedField = (DerivedField)field; Expression expression = derivedField.getExpression(); if(expression instanceof Apply){ Apply apply = (Apply)expression; if(checkApply(apply, "pow", FieldRef.class, Constant.class)){ List<Expression> expressions = apply.getExpressions(); FieldRef fieldRef = (FieldRef)expressions.get(0); Constant constant = (Constant)expressions.get(1); try { int power = Integer.parseInt(constant.getValue()); feature = new PowerFeature(encoder, fieldRef.getField(), DataType.DOUBLE, power); } catch(NumberFormatException nfe){ // Ignored } } } } putFeature(field.getName(), feature); this.fields.add(field); }