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(List values) {
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.