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.

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

Count how often each label appears, because impurity depends only on the label distribution.

Hint 2

Convert counts to fractions of the whole group, then measure how far the group is from being pure.

Hint 3

A single-label group should give zero, while a balanced mix should give a larger value.

Expected complexity

O(n) time, O(k) extra space

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.