Все задачи
Легко Решено: 0 Процент решений: 0%

Неоднородность Джини

Измерьте, насколько перемешаны метки в группе, — по этой оценке деревья решений выбирают разбиения.

Чему вы научитесь

  • Измерять, насколько смешана группа меток
  • Считать доли классов
  • Понять, как деревья выбирают разбиения

Условие

Деревья решений делят данные на как можно более чистые группы. Неоднородность Джини показывает, насколько перемешаны метки группы:

Gini = 1 - Σ pₖ²

где pₖ — доля меток класса k. У группы с одним классом неоднородность 0; у равной смеси двух классов — 0.5.

Реализуйте gini_impurity(labels).

Входные данные

labels: метки классов в группе.

Выходные данные

Верните неоднородность Джини как дробное число.

Ограничения

1 ≤ длина ≤ 10 000

Каждая метка — от 1 до 20 символов

Примеры

Пример 1
Ввод:
labels = ["yes", "yes", "no", "no"]

Ожидаемый вывод:
expected = 0.5
Ввод:
std::vector<std::string> labels = {"yes", "yes", "no", "no"};

Ожидаемый вывод:
double expected = 0.5;
Ввод:
string[] labels = new string[] {"yes", "yes", "no", "no"};

Ожидаемый вывод:
double expected = 0.5;

Пояснение

Половина — yes, половина — no: 1 - (0.5² + 0.5²) = 1 - 0.5 = 0.5, максимальная смешанность для группы из двух классов.

Пример 2
Ввод:
labels = ["cat", "cat", "cat"]

Ожидаемый вывод:
expected = 0.0
Ввод:
std::vector<std::string> labels = {"cat", "cat", "cat"};

Ожидаемый вывод:
double expected = 0.0;
Ввод:
string[] labels = new string[] {"cat", "cat", "cat"};

Ожидаемый вывод:
double expected = 0.0;

Пояснение

Только один класс: 1 - 1² = 0. Группа чистая.

Ссылки

Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.

Учитесь у других

Решения сообщества

Пока нет опубликованных решений. Решите задание, чтобы поделиться первым.