Этот пост будет немного более техническим, чем предыдущий, так что давайте добавим эти старые ограничения мышления.

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

Что нас больше всего беспокоит и что волнует большинство гуру прогнозирования, так это старые добрые классификаторы дерева решений. Мы не будем рассматривать здесь какой-либо код, но я прикрепил ссылку на страницу классификатора дерева решений scikit learn, где вы можете найти некоторый псевдокод о том, как использовать класс дерева решений библиотек для создания вашего собственного объекта на python и предсказывать крутые вещи.

Многие люди, которые еще не окунулись в мир данных, полагают, что деревья решений - это простой пример операторов if / else. Хотя это касается идеи ветвей и листьев, в этих моделях все еще упускается многое из того, что находится под капотом. Мы БУДЕМ рассматривать энтропию, получение информации и некоторые из наиболее важных гиперпараметров, которые можно использовать при тюнинге модели.

Что вообще такое энтропия?

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

Давайте возьмем пример системы, в которой у нас есть сумка с двумя разными типами цветных шариков: синим и красным. Если у нас есть m красных шаров и n синих шаров, мы хотим начать с определения вероятности выбора каждого цвета. случайным образом в указанной последовательности. проще говоря, m / (m + n) для красного и наоборот для синего.

Итак, если у нас есть вероятность 0,75 для красного и 0,25 для синего, и мы хотим выбрать 3 красных и 1 синий. Мы можем найти шанс выбрать правильные шары, найдя вероятность (0,75³ * 0,25 = 0,105). Обратите внимание, что мы рассматриваем систему, в которой мы возвращаем каждый шар обратно в мешок, чтобы наши вероятности не менялись после каждого выбора.

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

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

В чем же тогда выгода информации?

Отличный вопрос. А теперь посмотрим, насколько хорошо я могу на него ответить ...

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

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

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

Получение информации = энтропия (родитель) - средняя энтропия (дети)

Итак, какими гиперпараметрами мы можем манипулировать?

Оказывается, есть целый ряд гиперпараметров, которые мы можем настроить при построении наших моделей и попытках повысить показатели оценки нашей модели.

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

Класс scikit learn позволяет нам определять max_depth, который помогает контролировать, сколько узлов может быть создано на любом единственном пути нашего дерева. В противном случае наше дерево разрасталось бы до тех пор, пока каждый «лист» не стал бы чистым. Это не только усложнило бы вычисления, но и поставило бы нас под угрозу переобучения и увеличения сложности модели.

Еще один ключевой атрибут объекта дерева решений - min_samples_leaf. Этот конкретный атрибут помогает избежать создания слишком большого количества ветвей на каком-либо конкретном узле. Так, например, если бы у нас была функция, которую мы хотели бы разделить, которая имела 8 различных категориальных значений, наша модель могла бы изначально разделиться на несколько ветвей до такой степени, что конкретный узел имеет только 5% родительских данных. Мы можем избежать этого, определив для нашего min_samples_leaf значение 0,1, которое потребует, чтобы не менее 10% данных существовали в новом листе, иначе они не будут созданы.

И сейчас?

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

До скорого.