Antes de iniciarmos o estudo do Ganho de Informação, vamos ver a implementação de um método mais genérico que calcula a entropia de um conjunto de valores, vamos ao código:
public class Entropy { /** * Metodo que dado um conjunto de valores calcula e entropia deste * conjunto. * * @param values - Lista de valores que se quer calcular a entropia * @return - A entropia do conjunto */ public static Double calculateEntropy(Listvalues) { Map map = new HashMap (); // Somatório para calcular a ocorrencia de cada valor for (String sequence : values) { // Preenche o mapa com a key sendo o valor e o value a quantidade if (!map.containsKey(sequence)) { map.put(sequence, 0); } // Adiciona um a quantidade map.put(sequence, map.get(sequence) + 1); } // Calcula a entropia Double result = 0.0; // Itera pelo conjunto de possíveis valores for (String sequence : map.keySet()) { // Calcula a frequencia que o registro aparece, a probabilidade do valor // aparecer na base de dados informada Double frequency = (double) map.get(sequence) / values.size(); // Faz o calculo da entropia result -= frequency * (Math.log(frequency) / Math.log(2)); } // Retorna o valor return result; }
}
Podemos ver através do código acima que a implementação do calculo de entropia é bastante simples quando se entende o funcionamento da equação e consegue ver além das notações matemáticas.