@Override public List<Feature> encodeFeatures(List<Feature> features, SkLearnEncoder encoder){ List<? extends Number> min = getMin(); List<? extends Number> scale = getScale(); ClassDictUtil.checkSize(features, min, scale); List<Feature> result = new ArrayList<>(); for(int i = 0; i < features.size(); i++){ Feature feature = features.get(i); Number minValue = min.get(i); Number scaleValue = scale.get(i); if(ValueUtil.isOne(scaleValue) && ValueUtil.isZero(minValue)){ result.add(feature); continue; } ContinuousFeature continuousFeature = feature.toContinuousFeature(); // "($name * scale) + min" Expression expression = continuousFeature.ref(); if(!ValueUtil.isOne(scaleValue)){ expression = PMMLUtil.createApply("*", expression, PMMLUtil.createConstant(scaleValue)); } // End if if(!ValueUtil.isZero(minValue)){ expression = PMMLUtil.createApply("+", expression, PMMLUtil.createConstant(minValue)); } DerivedField derivedField = encoder.createDerivedField(FeatureUtil.createName("mix_max_scaler", continuousFeature), expression); result.add(new ContinuousFeature(encoder, derivedField)); } return result; }
private Expression encodeExpression(FieldName name, Expression expression){ List<Double> ranges = this.ranges.get(name); if(ranges != null){ Double min = ranges.get(0); Double max = ranges.get(1); if(!ValueUtil.isZero(min)){ expression = PMMLUtil.createApply("-", expression, PMMLUtil.createConstant(min)); } // End if if(!ValueUtil.isOne(max - min)){ expression = PMMLUtil.createApply("/", expression, PMMLUtil.createConstant(max - min)); } } Double mean = this.mean.get(name); if(mean != null && !ValueUtil.isZero(mean)){ expression = PMMLUtil.createApply("-", expression, PMMLUtil.createConstant(mean)); } Double std = this.std.get(name); if(std != null && !ValueUtil.isOne(std)){ expression = PMMLUtil.createApply("/", expression, PMMLUtil.createConstant(std)); } Double median = this.median.get(name); if(median != null){ expression = PMMLUtil.createApply("if", PMMLUtil.createApply("isNotMissing", new FieldRef(name)), expression, PMMLUtil.createConstant(median)); } return expression; }
if(ValueUtil.isZero(negLabel) && ValueUtil.isOne(posLabel)){ result.add(new BinaryFeature(encoder, feature, category)); } else
if(!ValueUtil.isZero(rescaleConstant)){ expression = PMMLUtil.createApply("+", expression, PMMLUtil.createConstant(rescaleConstant));
double meanValue = mean.apply(i); if(!ValueUtil.isZero(meanValue)){ ContinuousFeature continuousFeature = feature.toContinuousFeature();