Классификация по дереву решений, пожалуй, один из самых интуитивно понятных и простых для интерпретации алгоритмов классификации, которые у нас есть сегодня. Он может легко моделировать нелинейные отношения и создавать достаточно точные и стабильные прогнозные модели.
Обучение по классификации дерева решений имеет следующие ключевые особенности:
- Мы рекурсивно разделяем нашу популяцию на две или более подгруппы на основе особенности. Это можно представить в виде дерева, корневой узел которого представляет всю популяцию, а его подузлы представляют субпопуляции.
- С каждым подузлом, добавленным к дереву, однородность или чистота увеличивается по отношению к целевой переменной (или классу).
- Листовые узлы полностью чистые и содержат объекты одного класса.
В этой статье я расскажу о следующих показателях, используемых для принятия решения о том, на какую функцию разделить:
- Индекс Джини
- Энтропия
Прежде чем продолжить, я настоятельно рекомендую вам прочитать это полное руководство по древовидному моделированию с нуля (на R и Python).
Мы будем использовать эти две метрики в следующем примере:
Примечание. Мы используем только категориальные переменные для лучшей иллюстрации. Однако возможны и непрерывные переменные. В случае категориальных переменных нам нужно найти пороговое значение для разделения. Например, возраст ≤ 18 и возраст ›18 можно разделить, если возраст является непрерывной переменной.
Индекс Джини
Индекс Джини используется с двоичными разбиениями, где один класс можно считать успешным, а другой - неудачным.
Более высокое значение индекса Джини указывает на большую однородность подузлов.
Индекс Джини для сплита рассчитывается в два этапа:
- Для каждого подузла рассчитайте Джини как p² + q², где p - вероятность успеха, а q - вероятность неудачи.
- Тогда для разделения коэффициент Джини равен средневзвешенному баллов Джини подузлов.
Давайте посчитаем баллы Джини для нашего примера.
Здесь наш успех класс определяется как ежедневное использование компьютера. Соответствующие вероятности успеха и неудачи вычисляются для обоих подузлов, как показано.
Тогда Джини для подузла "Мужской" = 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.
Поскольку мы хотим, чтобы наши подузлы были однородными, мы хотим разделить объект с минимальным значением энтропии.
Вот как вы рассчитываете значение энтропии расщепления:
- Для каждого подузла вычислите энтропию по указанной выше формуле.
- Тогда энтропия для разделения является средневзвешенным значением энтропии для всех подузлов.
Давайте рассчитаем значения энтропии для нашего примера.
Разделение по полу:
Энтропия для мужского подузла = -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- (p² + q²)
- Минимизировать энтропию = -plog2 (p) -qlog2 (q)
Это более или менее одинаково. Однако, поскольку энтропия требует вычисления логарифма, в некоторых случаях это будет медленнее. Однако, как правило, они обеспечивают аналогичную производительность.