Признак для корня дерева выдач

тема: Энтропия, Gini и сплит · уровень: продвинутый

Условие

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

Требуется выбрать признак для корня решающего дерева. Рассматриваются три категориальных признака: genre, audience, format. Качество разбиения измеряется уменьшением неоднородности Джини.

Для набора строк D с долями классов p_0 и p_1 неоднородность Джини равна G(D) = 1 - p_0^2 - p_1^2. Для признака A набор разбивается на группы D_v по всем значениям v, которые встретились в данных. Уменьшение неоднородности равно Gain(A) = G(D) - sum(|D_v| / |D| * G(D_v)). Следует вывести имя признака с наибольшим значением Gain.

Значение - означает, что соответствующее поле каталога не заполнено. Оно считается обычным отдельным категориальным значением признака. Пустые группы не создаются и в формуле не участвуют.

Если наибольшее значение Gain достигается у нескольких признаков, выводится лексикографически меньшее имя признака.

Формат ввода

В первой строке дано целое число n — количество записей о выдачах.

В следующих n строках даны четыре значения через пробел: genre, audience, format, issued.

Значение issued равно 0, если книга не была выдана, и 1, если книга была выдана.

Формат вывода

Выведите одно имя признака: audience, format или genre.

Округление не применяется, так как выводится точное имя признака.

Ограничения

1 <= n <= 4000.

Каждое из полей genre, audience, format является строкой из строчных латинских букв или символа - длиной от 1 до 12.

Значение issued равно 0 или 1.

Во входе нет пропусков строк и дополнительных полей.

Решить задачу с автопроверкой на Python →

Куда дальше