Problème
Les arbres de décision divisent les données en groupes aussi purs que possible. L'impureté de Gini mesure à quel point les étiquettes d'un groupe sont mélangées :
Gini = 1 - Σ pₖ²
où pₖ est la proportion d'étiquettes de la classe k. Un groupe d'une seule classe a une impureté de 0 ; un mélange égal de deux classes a une impureté de 0.5.
Implémentez gini_impurity(labels).
Entrée
labels : les étiquettes de classe du groupe.
Sortie
Renvoyez l'impureté de Gini sous forme de nombre décimal.
Contraintes
1 ≤ longueur ≤ 10 000
Chaque étiquette compte de 1 à 20 caractères
Exemples
Entrée :
labels = ["yes", "yes", "no", "no"]
Sortie attendue :
expected = 0.5
Entrée :
std::vector<std::string> labels = {"yes", "yes", "no", "no"};
Sortie attendue :
double expected = 0.5;
Entrée :
string[] labels = new string[] {"yes", "yes", "no", "no"};
Sortie attendue :
double expected = 0.5;
Explication
La moitié sont yes et l'autre moitié no : 1 - (0.5² + 0.5²) = 1 - 0.5 = 0.5, le mélange maximal pour un groupe à deux classes.
Entrée :
labels = ["cat", "cat", "cat"]
Sortie attendue :
expected = 0.0
Entrée :
std::vector<std::string> labels = {"cat", "cat", "cat"};
Sortie attendue :
double expected = 0.0;
Entrée :
string[] labels = new string[] {"cat", "cat", "cat"};
Sortie attendue :
double expected = 0.0;
Explication
Une seule classe : 1 - 1² = 0. Le groupe est pur.
Références
Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.