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

Обучение по классификации дерева решений имеет следующие ключевые особенности:

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

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

  1. Индекс Джини
  2. Энтропия

Прежде чем продолжить, я настоятельно рекомендую вам прочитать это полное руководство по древовидному моделированию с нуля (на R и Python).

Мы будем использовать эти две метрики в следующем примере:

Примечание. Мы используем только категориальные переменные для лучшей иллюстрации. Однако возможны и непрерывные переменные. В случае категориальных переменных нам нужно найти пороговое значение для разделения. Например, возраст ≤ 18 и возраст ›18 можно разделить, если возраст является непрерывной переменной.

Индекс Джини

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

Более высокое значение индекса Джини указывает на большую однородность подузлов.

Индекс Джини для сплита рассчитывается в два этапа:

  1. Для каждого подузла рассчитайте Джини как p² + q², где p - вероятность успеха, а q - вероятность неудачи.
  2. Тогда для разделения коэффициент Джини равен средневзвешенному баллов Джини подузлов.

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

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

Тогда Джини для подузла "Мужской" = 0,5² + 0,5² = 0,5.

Джини для подузла "Женский" = 0,33² + 0,67² = 0,56

Наконец, Джини для разделения по полу = (20 x 0,5 + 30 x 0,56) / 50 = 0,536.

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

Подузел Джини для взрослых = 0,48² + 0,42² = 0,4068

Джини для второстепенного подузла = 0,32² + 0,68² = 0,5648

Таким образом, Джини для разделения по возрасту = (25 x 0,4068 + 25 x 0,5648) / 50 = 0,4856.

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

Вы можете встретить термин примесь Джини. Это определяется как:

Примесь Джини = 1 -Джини

Таким образом, мы должны найти функцию, которая минимизирует примеси Джини при расщеплении.

Мы можем легко реализовать деревья решений с помощью индекса Джини, используя библиотеку sklearn в Python. Это делается путем указания значения атрибута критерия как gini’ в функции DecisionTreeClassifier ().

Энтропия

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

Энтропия (p, q) = -plog2 (p) -qlog2 (q), где log2 (.) - это журнал с основанием 2.

Поскольку мы хотим, чтобы наши подузлы были однородными, мы хотим разделить объект с минимальным значением энтропии.

Вот как вы рассчитываете значение энтропии расщепления:

  1. Для каждого подузла вычислите энтропию по указанной выше формуле.
  2. Тогда энтропия для разделения является средневзвешенным значением энтропии для всех подузлов.

Давайте рассчитаем значения энтропии для нашего примера.

Разделение по полу:

Энтропия для мужского подузла = -0,5 x log2 (0,5) -0,5 x log2 (0,5) = 1

Энтропия для женского подузла = -0,33 x log2 (0,33) -0,67 x log2 (0,67) = 0,91

Тогда энтропия для разделения по полу = (20 x 1 + 30 x 0,91) / 50 = 0,946.

По возрасту:

Энтропия для подузла Взрослый = -0,48 x log2 (0,48) -0,42 x log2 (0,42) = 1,033

Энтропия для второстепенного подузла = -0,32 x log2 (0,32) -0,68 x log2 (0,68) = 0,904

Тогда энтропия для разделения по возрасту = (25 x 1,033 + 25 x 0,904) / 50 = 0,968.

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

Как и Gini, DecisionTreeClassifer () может использовать критерий энтропии для определения разделения.

Конечные заметки

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

  1. Минимизация примесей Джини = 1- (p² + q²)
  2. Минимизировать энтропию = -plog2 (p) -qlog2 (q)

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