static public Segmentation createSegmentation(Segmentation.MultipleModelMethod multipleModelMethod, List<? extends Model> models, List<? extends Number> weights){ if((weights != null) && (models.size() != weights.size())){ throw new IllegalArgumentException(); } List<Segment> segments = new ArrayList<>(); for(int i = 0; i < models.size(); i++){ Model model = models.get(i); Number weight = (weights != null ? weights.get(i) : null); Segment segment = new Segment() .setId(String.valueOf(i + 1)) .setPredicate(new True()) .setModel(model); if(weight != null && !ValueUtil.isOne(weight)){ segment.setWeight(ValueUtil.asDouble(weight)); } segments.add(segment); } return new Segmentation(multipleModelMethod, segments); }
@Override public List<Feature> encodeFeatures(List<Feature> features, SkLearnEncoder encoder){ List<? extends Number> scale = getScale(); ClassDictUtil.checkSize(features, scale); List<Feature> result = new ArrayList<>(); for(int i = 0; i < features.size(); i++){ Feature feature = features.get(i); Number value = scale.get(i); if(ValueUtil.isOne(value)){ result.add(feature); continue; } ContinuousFeature continuousFeature = feature.toContinuousFeature(); // "$name / scale" Apply apply = PMMLUtil.createApply("/", continuousFeature.ref(), PMMLUtil.createConstant(value)); DerivedField derivedField = encoder.createDerivedField(FeatureUtil.createName("max_abs_scaler", continuousFeature), apply); result.add(new ContinuousFeature(encoder, derivedField)); } return result; }
@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; }
Double factor = scale.getValue(i); if(ValueUtil.isOne(factor)){ continue;
if(!ValueUtil.isOne(maxAbsUnzero)){ ContinuousFeature continuousFeature = feature.toContinuousFeature();
if(ValueUtil.isZero(negLabel) && ValueUtil.isOne(posLabel)){ result.add(new BinaryFeature(encoder, feature, category)); } else
Number componentValue = component.get(j); if(ValueUtil.isZero(meanValue) && ValueUtil.isOne(componentValue)){ apply.addExpressions(feature.ref()); if(!ValueUtil.isOne(componentValue)){ expression = PMMLUtil.createApply("*", expression, PMMLUtil.createConstant(componentValue)); Number explainedVarianceValue = explainedVariance.get(i); if(!ValueUtil.isOne(explainedVarianceValue)){ apply = PMMLUtil.createApply("/", apply, PMMLUtil.createConstant(Math.sqrt(ValueUtil.asDouble(explainedVarianceValue))));
if(!ValueUtil.isOne(coefficient)){ expression = PMMLUtil.createApply("*", expression, PMMLUtil.createConstant(coefficient));
if(!ValueUtil.isOne(rescaleFactor)){ expression = PMMLUtil.createApply("*", expression, PMMLUtil.createConstant(rescaleFactor));
double stdValue = std.apply(i); if(!ValueUtil.isOne(stdValue)){ Double factor = (1d / stdValue);