private double informationGain(String attribute, Map<String, String> specifiedAttributes) { double sum = entropy(specifiedAttributes); double examplesCount = records.count(specifiedAttributes); if (examplesCount == 0) return sum; Map<String, Set<String>> decisions = records.extractDecisions(); for (String decision : decisions.get(attribute)) { double entropyPart = entropy(attribute, decision, specifiedAttributes); // logger.info("entropyPart is --> {}.", entropyPart); double decisionCount = records.countDecisions(attribute, decision); sum += -(decisionCount / examplesCount) * entropyPart; } return sum; }