Эта статья предназначена для абсолютных новичков в машинном обучении, которые хотят понять один из простейших алгоритмов, но при этом один из самых важных из-за его интерпретируемости, мощности прогнозирования и использования в различных вариантах, таких как Random Forest или Gradient Boosting Trees.
Эта статья также предназначена для всех тех, кто занимается машинным обучением, таких как я, которые устремились к дочерним элементам деревьев решений (случайный лес или деревья повышения градиента), потому что они обычно лучше выступали на соревнованиях Kaggle, забывая ознакомиться с деревьями решений и раскрывая всю его тайну. 🔮

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

К этой статье также прилагается блокнот, который вы можете найти здесь.

Настройка набора данных и модели

Определение цели

Чтобы прояснить деревья решений, мы воспользуемся знаменитым набором данных iris. Этот набор данных состоит из 4 характеристик: длины лепестка, ширины лепестка, длины чашелистика и ширина чашелистика. Переменная target для прогнозирования - это вид ириса. Всего их три: iris setosa, iris versicolor и iris virginica .

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

Анализ набора данных

Теперь, когда мы знаем, что ищем, давайте подробнее рассмотрим набор данных.

На картинке выше мы видим первые 10 строк набора данных радужной оболочки глаза. Первые 4 столбца - это первые 4 характеристики, которые мы будем использовать для прогнозирования цели, вида ириса, представленные последним столбцом с числовыми значениями: 0 для setosa, 1 для versicolor , 2 для virginica.
Всего у нас 150 наблюдений (150 строк), по 50 наблюдений для каждого вида ирисов: набор данных сбалансирован.

Подготовка набора данных и выбора объектов

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

Моделирование и оценка

Как вы уже поняли, выбранная модель…

…ДРЕВО РЕШЕНИЙ !!! 😉

Без оптимизации гиперпараметров (таких как глубина дерева, минимальное количество листьев в узле или разделение узла…) и только с двумя функциями мы уже получаем 93% точности на тестовом наборе.

Точность - это количество хороших прогнозов по сравнению с количеством прогнозов.

Этот показатель интересен, но он не помогает нам понять, что не так в «Дереве решений». Матрица путаницы может нам помочь.

Вышеупомянутая матрица путаницы состоит из двух осей: ось Y - это цель, истинное значение для вида ириса и ось x - это вид, предсказанный деревом решений для этой радужки. В верхнем левом квадрате мы видим, что для 5 ирисов setosa дерево решений предсказало setosa для данного вида. Вторая строка показывает, что из 16 ирисов versicolor 14 были классифицированы как versicolor, а 2 были ошибочно приняты за virginica. По этой причине у нас нет стопроцентной точности. Наконец, нижний правый квадрат показывает, что все ирисы virginica классифицированы как virginica.
Благодаря матрице путаницы мы можем получить точность: все диагональные элементы являются хорошими прогнозами, 5 + 14 + 9 = 28, а все прогнозы - это все квадраты, 5 + 14 + 2 + 9 = 30 . Находим такую ​​же точность 28/30 = 93%.

Понимание того, как было построено дерево решений

Теперь, когда мы настроили наш набор данных и модель, мы можем, наконец, погрузиться в построение дерева решений! 😜

Визуализация дерева

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

Как получить это дерево? 🌳

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

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

Узел 0: корневой узел

На приведенном выше графике показано распределение видов ирисов в соответствии с двумя выбранными характеристиками: ширина лепестка по оси x и ширина чашелистика по оси y. Цвет точек соответствует виду радужной оболочки: красный для setosa, желтый для versicolor, синий для virginica.
Корневой узел справа на картинке выше дает нам несколько сведений:
- Есть 68 радужек ('samples = 68'), ирисовых точек, которые мы можем подсчитайте на графике слева;
- 'value = [23,20,25]' описывает перераспределение этих ирисов среди древовидных возможных классов видов ирисов, т.е. 23 для setosa, 20 для versicolor и 25 для virginica;
- 'class = virginica'. Это вид ириса, предсказанный деревом решений в корневом узле. Это решение принято, поскольку virginica является самым многочисленным видом корневого узла (25 virginica по сравнению с 20 versicolor и 23 setosa). Это причина того, почему цвет фона на левом графике синий, цвет, выбранный для вида virginica.
Корневой узел также дает нам еще две части информации: petal ширина (см) ≤ 0,8 ' и' gini = 0,664 '. Обсудим, что они означают сейчас… 😃

Узел 0: начнем обучение! 😎

Этот график слева такой же, как и предыдущий, но с границей первого решения дерева: petal width = 0.8 cm.

Как была определена граница принятия решения?

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

Что такое примесь Джини?

Примесь Джини - это показатель, который измеряет вероятность того, что случайно выбранный элемент (здесь радужная оболочка) будет неправильно классифицирован, то есть вероятность выбора элемента, умноженная на вероятность ошибочной классификации. Если мы просуммируем все J возможных классов, мы получим примесь Джини:

Последнее выражение мы собираемся использовать для выполнения теста Джини.

Давайте вычислим примесь Джини для первого узла

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

Это дает нам:

Мы можем проверить это число, проверив информацию Джини на корневом узле: ‘gini = 0.664’. Для первого узла примесь Джини составляет 0,664.

Вернемся к границе первого решения

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

Но у алгоритма нет интуиции. Так как же найти лучший сплит?

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

Вернемся к первому узлу и первому разбиению

В случае корневого узла алгоритм обнаружил, что среди всех возможных разбиений разбиение с petal width = 0.8 cm дает наименьшую примесь Джини.
Примесь Джини для левого листа:

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

Примесь Джини для правого листа:

Мы находим тот же результат, что и на древовидной диаграмме. Более того, эта примесь Джини близка к 0,5, потому что ирисов virginica почти столько же, сколько ирисов versicolor.

Узел 1

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

Поскольку примесь Джини для petal width <= 0.8 cm равна 0, т.е. у нас не может быть более однородной группы, алгоритм больше не будет пытаться разделить эту часть и сосредоточится на правой части дерева.

Интуитивно дерево решений продолжает использовать функцию ширины лепестка для разделения правой части на две части. В самом деле, кажется, проще создавать однородные группы, используя ширину лепестка вместо ширины чашелистика. При разделении на petal width <= 0.8 cm создается группа только из ирисов virginica (то есть с примесью Джини, равной 0). Однако создание группы, состоящей только из одного вида, не всегда лучший вариант, как мы увидим в следующем разделении ...

Поскольку алгоритм создал узел только с virginica, этот узел больше никогда не будет разделен и будет листом.

Узел 2

Для этого узла алгоритм решил разбить дерево на petal width = 1.55 cm, создав две разнородные группы. Интуитивно мы бы разделили на petal width = 1.3 cm или sepal width = 3.1 cm, чтобы создать группу только с разноцветными радужками. В самом деле, это привело бы к созданию узла с примесью Джини, равной 0. Но на самом деле другой созданный узел более неоднороден, настолько, что примесь Джини этого узла больше, чем примесь Джини суммы двух узлов, созданных с помощью другой раскол.

Давайте проверим это:

Примесь Джини с разделением на petal width = 1.55 cm

  • Левый узел:

Проверяем этот результат на дереве.

  • Правый узел:

Снова проверим этот результат на дереве.

  • Примесь Джини для этого разделения:

Индекс Джини раскола определяется количеством баллов для каждой группы.

Примесь Джини с разделением на petal width = 1.3 cm

  • Левый узел:

  • Правый узел:

  • Примесь Джини для этого разделения:

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

Узел 3

Первое, на что следует обратить внимание, это то, что предыдущее разбиение не изменило функцию принятия решения дерева ниже и выше разбиения petal width = 1.55 cm. Действительно, для обоих созданных узлов versicolor по-прежнему остается большинством.

На этом уровне дерево решений, наконец, использует функцию ширины чашелистника. Созданы два разделения: petal width = 2.65 cm (в подразделе 0.8 cm < petal width <= 1.55 cm) и petal width = 3.15 cm (в подразделе 1.55 cm < petal width <= 1.75 cm).

Узлы 4, 5, 6

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

На графике выше мы видим, что границы решения определяются для дерева на глубине 4, 5, 6. Глубина 6 - это глубина листьев и завершает построение дерева.

Как построенное дерево принимает решение?

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

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

Например, в корневом узле, если тестируемая радужная оболочка petal width <= 0.8 cm, она переходит к левому узлу, который является листом, и классифицирует радужную оболочку как радужную оболочку setosa. В противном случае он переходит к правому узлу и продолжает тот же процесс, пока не достигнет листа.

Как мы видели на примере матрицы путаницы, два versicolor были ошибочно отнесены к virginica:

  • в области 1.75 cm < petal width: мы видим желтый крест, то есть это разноцветный ирис, на синем фоне, т.е. Дерево решений классифицирует его как virginica.
  • в регионе 1.55 cm < petal width <= 1.75 cm и sepal width <= 2.75 cm: рассуждения те же, что и выше.

Остальные тестируемые ирисы были хорошо классифицированы, что дает нам точность 0,93.

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

Заключение

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