Я пишу информационный бюллетень для учащихся под названием Mighty Knowledge. Каждый новый выпуск содержит ссылки и основные уроки из самого лучшего контента, включая цитаты, книги, статьи, подкасты и видео. Каждый выбран специально для того, чтобы научиться жить более мудрой, счастливой и полной жизнью. Зарегистрируйтесь здесь.

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

Деревья решений в реальной жизни

Вы, вероятно, использовали дерево решений раньше, чтобы принимать решения в своей жизни. Возьмем, к примеру, решение о том, чем вы должны заниматься в эти выходные. Это может зависеть от того, хотите ли вы пойти куда-нибудь с друзьями или провести выходные в одиночестве; в обоих случаях ваше решение также зависит от погоды. Если солнечно и ваши друзья свободны, вы можете поиграть в футбол. Если пойдет дождь, ты пойдешь в кино. А если ваши друзья вообще не появляются, что ж, тогда вам нравится играть в видеоигры, независимо от погоды!

Это наглядный пример реального дерева решений. Мы построили дерево для моделирования набора последовательных иерархических решений, которые в конечном итоге приводят к какому-то окончательному результату. Обратите внимание, что мы также выбрали наши решения достаточно «высокоуровневыми», чтобы дерево оставалось небольшим. Например, что, если мы настроим много возможных вариантов погоды, таких как 25 градусов солнечно, 25 градусов дождя, 26 градусов солнечно, 26 градусов дождя, 27 градусов солнечно…. и т.д., наше дерево было бы огромным! Точная температура на самом деле не слишком важна, мы просто хотим знать, можно ли находиться на улице или нет.

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

Деревья решений в машинном обучении

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

Индукция

На высоком уровне индукция дерева решений проходит через 4 основных шага для построения дерева:

  1. Начните с набора обучающих данных, который должен содержать некоторые переменные характеристик и выходные данные классификации или регрессии.
  2. Определите «лучший объект» в наборе данных для разделения данных; подробнее о том, как мы определяем «лучшую функцию» позже
  3. Разделите данные на подмножества, которые содержат возможные значения для этой лучшей функции. Это разделение в основном определяет узел в дереве, то есть каждый узел является точкой разделения на основе определенной функции из наших данных.
  4. Рекурсивно генерируйте новые узлы дерева, используя подмножество данных, созданных на шаге 3. Мы продолжаем разбиение до тех пор, пока не достигнем точки, в которой мы в какой-то мере оптимизировали максимальную точность при минимальном количестве разбиений / узлов.

Шаг 1 прост, просто возьмите свой набор данных!

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

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

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

Где pk - это доля обучающих экземпляров класса k в конкретном узле прогнозирования. Узел должен в идеале иметь нулевое значение ошибки, что означает, что каждое разбиение выводит один класс в 100% случаев. Это именно то, что мы хотим, потому что тогда мы знаем, как только мы доберемся до этого конкретного узла принятия решения, каким именно будет наш результат, независимо от того, находимся мы на одной стороне границы принятия решения или на другой.

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

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

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

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

Обрезка

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

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

Простой, но очень эффективный метод отсечения - это пройти по каждому узлу в дереве и оценить влияние его удаления на функцию стоимости. Если это не сильно изменится, то подрежьте!

Пример в Scikit Learn

Деревья решений как для классификации, так и для регрессии очень просты в использовании в Scikit Learn с помощью встроенного класса! Сначала мы загрузим наш набор данных и инициализируем дерево решений для классификации. Тогда беговая тренировка станет простой однострочкой!

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

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

  • max_depth: максимальная глубина дерева, на которой мы прекратим разбивать узлы. Это похоже на управление максимальным количеством слоев в глубокой нейронной сети. Нижнее значение сделает вашу модель более быстрой, но не такой точной; более высокое значение может дать вам точность, но рискует переобучиться и может быть медленным.
  • min_samples_split: минимальное количество выборок, необходимое для разделения узла. Мы обсудили этот аспект деревьев решений выше и то, как установка более высокого значения поможет уменьшить переобучение.
  • max_features: количество функций, которые следует учитывать при поиске наилучшего разделения. Более высокое означает потенциально лучшие результаты за счет более длительного обучения.
  • min_impurity_split: Порог для ранней остановки роста дерева. Узел разделится, если его примесь превышает пороговое значение. Это может быть использовано для компромисса в борьбе с переобучением (высокое значение, маленькое дерево) и высокой точностью (низкое значение, большое дерево).
  • предварительная сортировка: следует ли предварительно отсортировать данные, чтобы ускорить поиск наиболее подходящих разбиений. Если мы заранее отсортируем наши данные по каждой функции, нашему алгоритму обучения будет намного легче найти подходящие значения для разделения.

Советы по практическому применению деревьев решений

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

Плюсы

  • Легко понять и интерпретировать. На каждом узле мы можем видеть точно, какое решение принимает наша модель. На практике мы сможем полностью понять, откуда берутся наши погрешности и ошибки, с какими типами данных модель справится и как на результат влияют значения характеристик. Инструмент визуализации Scikit learn - отличный вариант для визуализации и понимания деревьев решений.
  • Требуется очень небольшая подготовка данных. Многие модели машинного обучения могут потребовать предварительной обработки больших объемов данных, например нормализации, и сложных схем регуляризации. С другой стороны, деревья решений работают довольно хорошо сразу после настройки нескольких параметров.
  • Стоимость использования дерева для вывода логарифмически равна количеству точек данных, используемых для обучения дерева. Это огромный плюс, поскольку означает, что больший объем данных не обязательно сильно повлияет на скорость вывода.

Минусы

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

Любите учиться?

Следуйте за мной в твиттере, где я публикую все о новейших и величайших достижениях искусственного интеллекта, технологий и науки! Присоединяйтесь и ко мне в LinkedIn!