@Override public List<Feature> encodeFeatures(List<Feature> features, SkLearnEncoder encoder){ List<? extends Number> values = getValues(); ClassDictUtil.checkSize(1, features); Feature feature = features.get(0); List<Feature> result = new ArrayList<>(); if(feature instanceof CategoricalFeature){ CategoricalFeature categoricalFeature = (CategoricalFeature)feature; ClassDictUtil.checkSize(values, categoricalFeature.getValues()); for(int i = 0; i < values.size(); i++){ result.add(new BinaryFeature(encoder, categoricalFeature, categoricalFeature.getValue(i))); } } else if(feature instanceof WildcardFeature){ WildcardFeature wildcardFeature = (WildcardFeature)feature; List<String> categories = new ArrayList<>(); for(int i = 0; i < values.size(); i++){ int value = ValueUtil.asInt(values.get(i)); String category = ValueUtil.formatValue(value); categories.add(category); result.add(new BinaryFeature(encoder, wildcardFeature, category)); } wildcardFeature.toCategoricalFeature(categories); } else { throw new IllegalArgumentException(); } return result; }
wildcardFeature.toCategoricalFeature(Arrays.asList("0", "1"));
@Override public List<Feature> encodeFeatures(List<Feature> features, SkLearnEncoder encoder){ Boolean withData = getWithData(); Boolean withStatistics = getWithStatistics(); ClassDictUtil.checkSize(1, features); Feature feature = features.get(0); WildcardFeature wildcardFeature = (WildcardFeature)feature; if(withData){ List<?> data = getData(); Function<Object, String> function = new Function<Object, String>(){ @Override public String apply(Object object){ return ValueUtil.formatValue(object); } }; List<String> categories = Lists.transform(data, function); feature = wildcardFeature.toCategoricalFeature(categories); } // End if if(withStatistics){ Map<String, ?> counts = extractMap(getCounts(), 0); Object[] discrStats = getDiscrStats(); UnivariateStats univariateStats = new UnivariateStats() .setField(wildcardFeature.getName()) .setCounts(createCounts(counts)) .setDiscrStats(createDiscrStats(discrStats)); encoder.putUnivariateStats(univariateStats); } return super.encodeFeatures(Collections.singletonList(feature), encoder); }