Исчерпывающее руководство по классификации дерева решений в Python 3.x

Сквозное руководство по классификации с использованием деревьев решений

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

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

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

Как решения принимаются в дереве решений?

Как я обсуждал в своих предыдущих статьях, алгоритм дерева решений - это простой, но эффективный алгоритм обучения с учителем, в котором точки данных непрерывно разделяются в соответствии с определенными параметрами и / или проблемой, которую алгоритм пытается решить. Деревья решений также обычно называют КОРЗИНА (что означает деревья классификации и регрессии).

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

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

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

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

  • Оценка на экзамене GATE должна быть не менее 60.
  • Оценки за выпускной, 10-й и 12-й классы должны быть больше 60.

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

  • Если кандидат набрал меньше порогового балла по GATE / Graduation, но имеет опыт работы, то заявка включается в список.
  • Если кандидат набрал более 75 баллов в классе 12, но меньше минимально необходимого балла в классе 10, его заявка должна быть в списке.

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

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

Как деревья принятия решений используются в классификации?

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

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

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

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

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

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

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

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

Разбивается в дереве решений

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

Другие параметры, которые можно использовать для управления разделением дерева решений, включают min_samples_split, min_samples_leaf и max_features.

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

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

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

Шаг 1. Импорт необходимых библиотек и наборов данных

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

import numpy as np
import pandas as pd
import seaborn as sns

import matplotlib.pyplot as plt
%matplotlib inline

Для начала импортируем популярные библиотеки, такие как Pandas и NumPy. Pandas - это быстрый, мощный, гибкий и простой в использовании инструмент для анализа и обработки данных с открытым исходным кодом, созданный на основе языка программирования Python. NumPy, с другой стороны, состоит из набора объектов многомерных массивов и процедур для обработки этих массивов NumPy.

В отличие от C / C ++, Python дает нам возможность импортировать библиотеки по мере продвижения программы. Matplotlib - это многоплатформенная библиотека визуализации данных, построенная на массивах NumPy и предназначенная для работы с SciPy.

Другая библиотека, которая удовлетворяет аналогичные потребности, - это библиотека Seaborn, которая построена на основе matplotlib и тесно интегрирована со структурами данных pandas. Визуализация - это центральная часть Seaborn, которая помогает в исследовании и понимании данных, а также в исследовательском анализе данных и инсайтах.

import warnings
warnings.filterwarnings('ignore')
data = 'car_evaluation.csv'
df = pd.read_csv(data, header=None)

После импорта всех этих библиотек следующим шагом будет выборка набора данных, необходимого для обучения и тестирования прогнозной модели. Метод read_csv () используется для загрузки набора данных в файл / записную книжку python. Набор данных, используемый для построения этой модели классификатора дерева решений, можно скачать здесь.

Шаг 2. Исследовательский анализ данных и разработка функций

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

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

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.33, random_state = 42)
encoder = ce.OrdinalEncoder(cols=['buying', 'maint', 'doors', 'persons', 'lug_boot', 'safety'])
X_train = encoder.fit_transform(X_train)

X_test = encoder.transform(X_test)

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

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.33, random_state = 42)

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

Шаг 3. Подбор модели, оценка результатов и визуализация деревьев

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

from sklearn.tree import DecisionTreeClassifier
clf_en = DecisionTreeClassifier(criterion='entropy', max_depth=3, random_state=0)
clf_en.fit(X_train, y_train)
y_pred_en = clf_en.predict(X_test)

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

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

from sklearn.metrics import accuracy_score
print('Model accuracy score with criterion entropy: {0:0.4f}'. format(accuracy_score(y_test, y_pred_en)))
y_pred_train_en = clf_en.predict(X_train)
y_pred_train_en
plt.figure(figsize=(12,8))
from sklearn import tree
tree.plot_tree(clf_en.fit(X_train, y_train))

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

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred_en
print('Confusion matrix\n\n', cm)

Матрица путаницы имеет четыре возможных результата: истинно положительный, истинно отрицательный, ложноположительный и ложноотрицательный. Матрица неточностей обычно представлена ​​как результат в табличной форме. Другие методы оценки классификаторов включают оценку точности, оценку f1, отзывчивость и оценку поддержки.

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

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

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

Ограничения алгоритма дерева решений

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

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

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

Применение классификаторов дерева решений

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

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

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

На этом мы подошли к концу статьи. Я надеюсь, что эта статья помогла вам получить представление о том, как работает классификатор дерева решений. Если у вас есть вопросы или вы считаете, что я допустил ошибку, не стесняйтесь обращаться ко мне. Свяжитесь со мной через Электронную почту или LinkedIn. Удачного обучения!