@Override
public List<Feature> encodeFeatures(List<Feature> features, SkLearnEncoder encoder){
List<?> classes = getClasses();
ClassDictUtil.checkSize(1, features);
Feature feature = features.get(0);
List<String> inputCategories = new ArrayList<>();
List<String> outputCategories = new ArrayList<>();
for(int i = 0; i < classes.size(); i++){
inputCategories.add(ValueUtil.formatValue(classes.get(i)));
outputCategories.add(ValueUtil.formatValue(i));
}
Supplier<MapValues> mapValuesSupplier = () -> {
encoder.toCategorical(feature.getName(), inputCategories);
return PMMLUtil.createMapValues(feature.getName(), inputCategories, outputCategories);
};
DerivedField derivedField = encoder.ensureDerivedField(FeatureUtil.createName("label_encoder", feature), OpType.CATEGORICAL, DataType.INTEGER, mapValuesSupplier);
Feature encodedFeature = new CategoricalFeature(encoder, derivedField, outputCategories);
Feature result = new CategoricalFeature(encoder, feature, inputCategories){
@Override
public ContinuousFeature toContinuousFeature(){
return encodedFeature.toContinuousFeature();
}
};
return Collections.singletonList(result);
}