Что ж, в этом блоге я очень рад начать с этой концепции дерева решений. Я рассмотрю комплексное понимание дерева решений. Итак, давайте сначала разберемся с этим, а также реализуем его с помощью 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
- #Import the DecisionTreeClassifier
- из sklearn.tree импорт DecisionTreeClassifier
- # Импорт набора данных
- dataset = pd.read_csv ('zoo.csv', names = ['имя_ животного', 'волосы', 'перья', 'яйца', 'молоко', 'воздушная кость', 'водный', 'хищник', 'зубастый' , 'позвоночник', 'дышит', 'ядовитый', 'плавники', 'ноги', 'хвост', 'домашний', 'кошачий размер', 'класс',])
- # Мы опускаем имена животных, так как это не очень хорошая функция для разделения данных на
- 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. Ничто не сравнится с работой над реальными проектами!