class LabelEncoder extends AbstractDatasetFeatureVectorTransformer {

	public LabelEncoder(Dataset dataset) {
		LOGGER.info("Start initializing LabelEncoder");
		StopWatch stopWatch = new StopWatch();
		Set<String> nominalValueNames = dataset.getFeatureInformation().getFeatureNamesOfType(NominalValue.class);
		DatasetStatistics statistics = new DatasetStatistics(dataset.filterFeatures(equal(nominalValueNames)));

		Map<String, Map<String, Integer>> mappings = new HashMap<>();
		for (String nominalValueName : nominalValueNames) {
			NominalValueStatistics valueStatistics = (NominalValueStatistics) statistics.getValueStatistics(nominalValueName);
			List<String> list = new ArrayList<>(valueStatistics.getValues());
			Collections.sort(list);
			Map<String, Integer> indexMap = CollectionHelper.createIndexMap(list);
			LOGGER.debug("# unique values for {}: {}", nominalValueName, list.size());
			mappings.put(nominalValueName, indexMap);
		}

		LOGGER.info("Initialized LabelEncoder in {}", stopWatch);
		this.mappings = mappings;
	}

	public  LabelEncoder(Dataset dataset);

}