Вступление

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

Давайте подумаем о решении, с которым столкнулись многие из нас: Идем на работу. Не осознавая этого, мы склонны задавать себе последовательные вопросы, которые приводят нас к нашему решению. Будет ли сегодня занято? Мне пойти на работу? Достаточно ли у меня больничного? и т. д. Один вопрос приводит к другому, образуя нечто похожее на дерево, пока мы не придем к окончательному решению.

Деревья решений - это простой, но мощный инструмент прогнозного моделирования.

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

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

В этом чтении мы уделим время классификационным деревьям и простой реализации кода.

Архитектура

Корневой узел:

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

Листовой узел:

На основе функции, выбранной для создания разделения в корне, набор данных будет разделен на два листовых узла. Например, предположим, что корневой узел разделен по полу, тогда без потери общности левый узел будет содержать набор с мужчинами, а правый узел будет содержать женщин.

Узел решения:

После того, как мы сделали все возможные разделения (либо по всем функциям, либо на основе некоторых критериев остановки), необходимо принять решение относительно целевой переменной. Мы обсудим способ выбора «прогноза», сделанного для этого узла позже.

Данные

Начнем с просмотра набора данных:

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

В корневом узле мы разделим набор данных на основе уникальных значений данной функции. Например, если бы мы использовали функцию «Эмоции», мы бы разделили данные на «болен» и «не болен».

Если бы мы использовали функцию «Температура», мы бы разделили ее на «меньше» и «больше». В этом примере ниже и выше подразумевается температура 100 градусов.

Разделение данных по функциям

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

Затем мы создадим копию набора данных и соберем уникальные значения в функции:

Используя приведенный выше код, мы еще не разделили фрейм данных. У нас есть только уникальные значения функции и счетчик разделения (который пригодится позже). Для разделения данных мы будем использовать индекс col_ls и уникальные значения имена.

Критерии разделения

Но как нам выбрать, какую функцию разделить в первую очередь?

Мы уже обсуждали два метода для выбора наилучшего разделения: Мера Джини и Получение информации за счет энтропии. Мы будем использовать первое до конца обсуждения.

Мера Джини

Напомним наше определение:

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

Математическое определение:

Чтобы сгенерировать показатель примеси джини для всего разделения, нам нужно будет соответствующим образом взвесить их.

Чтобы получить меру примесей для каждого разбиения, вам необходимо передать набор данных разбиения через код. Затем он оценит степень загрязнения каждого узла листа. Ниже приведен пример одного набора разбиений, но это нужно сделать для всех возможных разбиений и затем взвесить.

Используйте приведенную выше формулу, чтобы подтвердить, что примесь на этом расщеплении действительно равна (0,5). Формула для оценки:

Джини = (1/2) * (1–1 / 2) + (1/2) * (1–1 / 2)

Обратите внимание, что разделение на «не болен» точно такое же.

Чтобы получить взвешенную меру примеси джини, нам нужно будет взвесить каждое разбиение в соответствии с его пропорцией к данным до разбиения. Например, до разделения было 8 наблюдений, затем, когда мы разделили на «больной» и «не больной», по 4 пошли в каждую сторону соответственно.

Следовательно, взвешенный показатель Джини равен Weighted_Gini = (4/8) * (0,5) + (4/8) * (0,5).

Мы объединим весь приведенный выше код, чтобы перебрать каждое разделение функции. Пустой список «w_gini» отслеживает взвешенный джини, затем он вернет имя функции с наименьшим взвешенным джини.

Последующие разделения

До этого момента мы успешно решили, как инициировать разделение от корневого узла. Наша следующая задача - использовать этот фрейм данных после разделения и выполнять те же задачи. Другими словами, как только разделение происходит по температуре, мы не хотим снова разделять по температуре, вместо этого алгоритм будет использовать другие функции и выбирать оптимальное разделение. Ниже мы возьмем набор разделенных данных для лучшего разделенного столбца, а затем удалим этот столбец.

Код дерева решений:

Соберем все вместе.

Мы дошли до конца кода. Теперь, когда все разбиения выполнены, на узле принятия решения должен быть сделан прогноз. В частности, если бы мы поместили некоторые данные тестирования в эту модель дерева решений, и она добралась бы до этого узла принятия решений, какой бы узел предсказал конечную переменную «StayHome»?

Заключение

Мы завершили решение. Или, по крайней мере, мы разработали 4 разных пути, которые приводят к вероятностному решению.

Мы показали архитектуру, которая ведет дерево решений к прогнозированию. Следующим шагом будет сохранение основы модели (как она делает разбиение и каково решение при окончательном разбиении). Затем эту модель можно использовать для ненаблюдаемых данных, наблюдений без целевой переменной, чтобы сделать прогноз. Этот дополнительный шаг выходит за рамки, но информация, выделенная выше, представляет собой краткое введение, которое помогает нам понять интуицию метода.

Спасибо за чтение!