Problema
Árvores de decisão dividem os dados em grupos o mais puros possível. A impureza de Gini mede o quanto os rótulos de um grupo estão misturados:
Gini = 1 - Σ pₖ²
onde pₖ é a fração de rótulos da classe k. Um grupo com uma só classe tem impureza 0; uma mistura igual de duas classes tem impureza 0.5.
Implemente gini_impurity(labels).
Entrada
labels: Os rótulos de classe do grupo.
Saída
Retorne a impureza de Gini como número decimal.
Restrições
1 ≤ tamanho ≤ 10.000
Cada rótulo tem de 1 a 20 caracteres
Exemplos
Entrada:
labels = ["yes", "yes", "no", "no"]
Saída esperada:
expected = 0.5
Entrada:
std::vector<std::string> labels = {"yes", "yes", "no", "no"};
Saída esperada:
double expected = 0.5;
Entrada:
string[] labels = new string[] {"yes", "yes", "no", "no"};
Saída esperada:
double expected = 0.5;
Explicação
Metade é yes e metade é no: 1 - (0.5² + 0.5²) = 1 - 0.5 = 0.5, o máximo de mistura para um grupo de duas classes.
Entrada:
labels = ["cat", "cat", "cat"]
Saída esperada:
expected = 0.0
Entrada:
std::vector<std::string> labels = {"cat", "cat", "cat"};
Saída esperada:
double expected = 0.0;
Entrada:
string[] labels = new string[] {"cat", "cat", "cat"};
Saída esperada:
double expected = 0.0;
Explicação
Uma só classe: 1 - 1² = 0. O grupo é puro.
Referências
Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.