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

Что такое дерево решений?

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

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

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

Примечание. Дерево решений может содержать категориальные данные (ДА / НЕТ), а также числовые данные.

Зачем использовать деревья решений?

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

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

Терминология дерева решений

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

Как работает алгоритм дерева решений?

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

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

  • Шаг 1. Начните дерево с корневого узла, говорит S, который содержит полный набор данных.
  • Шаг 2. Найдите лучший атрибут в наборе данных с помощью меры выбора атрибута (ASM).
  • Шаг 3. Разделите S на подмножества, содержащие возможные значения лучших атрибутов.
  • Шаг 4. Создайте узел дерева решений, который содержит лучший атрибут.
  • Шаг 5. Рекурсивно создайте новые деревья решений, используя подмножества набора данных, созданного на шаге -3. Продолжайте этот процесс до тех пор, пока не будет достигнута стадия, на которой вы не сможете далее классифицировать узлы и назовете последний узел как листовой узел.

Пример. Предположим, есть кандидат, у которого есть предложение о работе, и он хочет решить, следует ли ему принять это предложение или нет. Итак, чтобы решить эту проблему, дерево решений начинается с корневого узла (атрибут Salary ASM). Корневой узел далее разделяется на следующий узел принятия решения (расстояние от офиса) и один листовой узел на основе соответствующих меток. Следующий узел решения далее разделяется на один узел принятия решения (средство Cab) и один листовой узел. Наконец, узел решения разделяется на два конечных узла (принятые предложения и отклоненные предложения). Рассмотрим диаграмму ниже:

Меры выбора атрибутов

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

  • Получение информации
  • Индекс Джини

1. Получение информации:

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

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

Entropy(s)= -P(yes)log2 P(yes)- P(no) log2 P(no)

Где,

  • S = общее количество образцов
  • P (да) = вероятность утвердительного ответа
  • P (нет) = вероятность того, что нет

2. Индекс Джини:

  • Индекс Джини - это мера примеси или чистоты, используемая при создании дерева решений в алгоритме CART (Дерево классификации и регрессии).
  • Атрибут с низким индексом Джини должен быть предпочтительнее по сравнению с высоким индексом Джини.
  • Он создает только двоичные разбиения, а алгоритм CART использует индекс Джини для создания двоичных разбиений.
  • Индекс Джини можно рассчитать по следующей формуле:
Gini Index= 1- ∑jPj2

Обрезка: получение оптимального дерева решений

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

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

  • Сокращение сложности затрат
  • Уменьшение количества ошибок при сокращении.

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

  • Четкая визуализация: алгоритм прост для понимания, интерпретации и визуализации, поскольку идея в основном используется в нашей повседневной жизни. Вывод дерева решений может быть легко интерпретирован людьми.
  • Просто и легко понять: дерево решений выглядит как простые операторы if-else, которые очень легко понять.
  • Дерево решений можно использовать как для задач классификации, так и для задач регрессии.
  • Дерево решений может обрабатывать как непрерывные, так и категориальные переменные.
  • Не требуется масштабирование функций: масштабирование функций (стандартизация и нормализация) не требуется в случае дерева решений, поскольку оно использует подход на основе правил вместо расчета расстояния.
  • Эффективно обрабатывает нелинейные параметры: нелинейные параметры не влияют на производительность дерева решений, в отличие от алгоритмов на основе кривых. Таким образом, если существует высокая нелинейность между независимыми переменными, деревья решений могут превзойти другие алгоритмы на основе кривых.
  • Дерево решений может автоматически обрабатывать отсутствующие значения.
  • Деревья решений обычно устойчивы к выбросам и могут обрабатывать их автоматически.
  • Меньший период обучения: период обучения меньше по сравнению со случайным лесом, потому что он генерирует только одно дерево, в отличие от леса деревьев в случайном лесу.

Недостатки дерева решений

  • Переоснащение: это основная проблема дерева решений. Как правило, это приводит к переобучению данных, что в конечном итоге приводит к неверным прогнозам. Чтобы соответствовать данным (даже зашумленным данным), он продолжает генерировать новые узлы, и в конечном итоге дерево становится слишком сложным для интерпретации. Таким образом, он теряет свои обобщающие возможности. Он очень хорошо работает с обученными данными, но начинает делать много ошибок с невидимыми данными.
  • Высокая дисперсия: как упоминалось в пункте 1, дерево решений обычно приводит к переобучению данных. Из-за переобучения очень высока вероятность большого разброса выходных данных, что приводит к множеству ошибок в окончательной оценке и показывает высокую неточность результатов. Чтобы добиться нулевого смещения (переобучения), это приводит к большой дисперсии.
  • Нестабильно: добавление новой точки данных может привести к повторной генерации всего дерева, и все узлы придется пересчитывать и воссоздавать.
  • На него влияет шум: небольшой шум может сделать его нестабильным, что приведет к неверным прогнозам.
  • Не подходит для больших наборов данных: если размер данных большой, одно дерево может стать сложным и привести к переобучению. Поэтому в этом случае мы должны использовать случайный лес вместо одного дерева решений.

Реализация дерева решений в Python

Использование SKLearn

  1. #Import the DecisionTreeClassifier
  2. из sklearn.tree импорт DecisionTreeClassifier
  3. # Импорт набора данных
  4. dataset = pd.read_csv ('zoo.csv', names = ['имя_ животного', 'волосы', 'перья', 'яйца', 'молоко', 'воздушная кость', 'водный', 'хищник', 'зубастый' , 'позвоночник', 'дышит', 'ядовитый', 'плавники', 'ноги', 'хвост', 'домашний', 'кошачий размер', 'класс',])
  5. # Мы опускаем имена животных, так как это не очень хорошая функция для разделения данных на
  6. dataset = dataset.drop (‘animal_name’, axis = 1)

7. train_features = dataset.iloc [: 80,: - 1]

8.test_features = dataset.iloc [80:,: - 1]

9.train_targets = dataset.iloc [: 80, -1]

10.test_targets = dataset.iloc [80:, - 1]

11. дерево = DecisionTreeClassifier (критерий = «энтропия»). Fit (train_features, train_targets)

12.prediction = tree.predict (test_features)

13.print («Точность прогноза:«, tree.score (test_features, test_targets) * 100, «%»)

Результат, который я получил:

Точность прогноза: 80,95238095238095%.

Вывод:

Спасибо за чтение! В будущем я тоже буду писать больше статей по машинному обучению. Подпишитесь на меня на Medium, чтобы быть в курсе о них. К тому же я фрилансер. Если есть какая-то внештатная работа над проектами, связанными с данными, не стесняйтесь обращаться к Linkedin. Ничто не сравнится с работой над реальными проектами!

Хлопайте, если статья вам понравилась!