Easy 0 solved 0% acceptance

Gini Impurity

Measure how mixed the labels in a group are, the score decision trees use to choose splits.

What you'll learn

  • Measure how mixed a group of labels is
  • Count class proportions
  • Understand how trees choose splits

Problem

Decision trees split data into groups that are as pure as possible. Gini impurity measures how mixed a group's labels are:

Gini = 1 - Σ pₖ²

where pₖ is the fraction of labels equal to class k. A group with a single class has impurity 0; an even mix of two classes has impurity 0.5.

Implement gini_impurity(labels).

Input

labels: The class labels in the group.

Output

Return the Gini impurity as a decimal number.

Constraints

1 ≤ length ≤ 10,000

Each label is 1 to 20 characters

Examples

Example 1
Input:
labels = ["yes", "yes", "no", "no"]

Expected output:
expected = 0.5
Input:
std::vector<std::string> labels = {"yes", "yes", "no", "no"};

Expected output:
double expected = 0.5;
Input:
string[] labels = new string[] {"yes", "yes", "no", "no"};

Expected output:
double expected = 0.5;

Explanation

Half are yes and half are no: 1 - (0.5² + 0.5²) = 1 - 0.5 = 0.5, the most mixed a two-class group can be.

Example 2
Input:
labels = ["cat", "cat", "cat"]

Expected output:
expected = 0.0
Input:
std::vector<std::string> labels = {"cat", "cat", "cat"};

Expected output:
double expected = 0.0;
Input:
string[] labels = new string[] {"cat", "cat", "cat"};

Expected output:
double expected = 0.0;

Explanation

Only one class: 1 - 1² = 0. The group is pure.

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.