Руководство для начинающих по построению и визуализации дерева решений в Python

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

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

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

Как работают деревья решений?

Корень — это начальная точка дерева, как перевернутое дерево. Верхние корневые узлы разбиваются на два или более узлов решений на основе условий if/else, которые далее разбиваются на большее количество узлов решений, и этот процесс повторяется до тех пор, пока дерево не достигнет нижних листовых узлов. Листовые узлы — это точки, в которых мы назначаем метку класса (для классификации) или числовое значение (для регрессии) данным.

Корневой узел — это место, где у нас есть весь набор данных. Внутренние узлы — это точки, в которых мы проверяем атрибут (или функцию) данных и разбиваем их на две или более ветвей на основе некоторого правила.

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

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

Чтобы построить дерево решений, нам нужно ответить на два вопроса:

  • Как выбрать лучший атрибут или функцию и каким должно быть правило (вопрос) для разделения данных в каждом узле?
  • Как измерить качество разделения?

Существуют различные методы и показатели для ответа на эти вопросы, в зависимости от типа и цели проблемы. Вот некоторые из наиболее распространенных:

  • Получение информации и энтропия: это меры того, насколько информация или неопределенность уменьшается за счет разделения данных на основе атрибута. Чем выше прирост информации, тем лучше разделение. Энтропия — это мера беспорядка или случайности в данных. Чем ниже энтропия, тем более однородны данные.
  • Индекс Джини: это мера того, насколько много примеси или разнообразия в данных. Чем ниже индекс Джини, тем однороднее данные.
  • Среднеквадратическая ошибка (MSE) и средняя абсолютная ошибка (MAE): это меры того, насколько велика ошибка или отклонение в прогнозах по сравнению с фактическими значениями. Чем ниже MSE или MAE, тем лучше прогнозы.

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

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

Сложность деревьев решений

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

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

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

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

Есть несколько методов, которые могут быть применены для предотвращения переобучения, например:

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

Алгоритм дерева классификации и регрессии

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

Библиотека Scikit-learn использует алгоритм CART (дерево классификации и регрессии) для двоичных деревьев (двоичная классификация) и другие алгоритмы, такие как алгоритм ID3, для более чем двух классов (многоклассовая классификация). Итак, давайте узнаем больше об алгоритме CART.

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

Выбор функции и порога осуществляется с использованием прироста информации, энтропии или индекса Джини. Он ищет пару (функция, пороговое значение/условие), которая создает самые чистые подмножества, минимизируя функцию стоимости. Выбор наиболее чистых подмножеств продолжается рекурсивно, пока не будет достигнута максимальная глубина.

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

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

Регуляризация

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

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

Чем глубже дерево решений, тем сложнее и точнее модель, но это часто приводит к переоснащению.

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

Чтобы преодолеть проблему переобучения, мы можем уменьшить сложность модели, уменьшив свободу дерева решений (глубину дерева) во время обучения. Это известно как регуляризация.

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

В Scikit-learn это контролируется гиперпараметром max_depth. Дерево решений с одним max_depth называется пнем решения.

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

  • min_sample_split — минимальное количество выборок, которое должен иметь узел, прежде чем его можно будет разделить.
  • min_sample_leaf - Минимальное количество выборок, которое должен иметь конечный узел.
  • min_weight_fraction_leaf — то же, что и min_sample_leaf, но выражается в виде доли от общего количества взвешенных экземпляров.
  • max_leaf_node - Максимальное количество листовых узлов.
  • max_features - максимальное количество признаков оценивается для разделения в каждом узле.

Увеличение min_* гиперпараметров или уменьшение max_* гиперпараметров приведет к упорядочению модели.

Преимущества и недостатки деревьев решений

Деревья решений имеют ряд преимуществ, таких как:

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

Однако деревья решений также имеют некоторые недостатки, такие как:

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

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

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

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

Я надеюсь, что эта статья поможет вам узнать о работе деревьев решений. О практической реализации деревьев решений с использованием Python и Scikit-learn можно прочитать здесь.

Большое спасибо за чтение.

Ресурсы —

1. Наука о данных с нуля: книга «Первые принципы с Python»

2. Практическое машинное обучение с помощью книги Scikit–Learn и TensorFlow, второе издание

3.Введение в машинное обучение с помощью книги Python

4. Обучение дерева решений от Википедии