Деревья решений задача регрессии

Основы деревьев решений

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

Например, глядя на изображение выше, корневой узел Work to do? и расщепляется на дочерние узлы Stay in а также Outlook основанный на том, есть или нет работа, чтобы сделать. Outlook Узел далее делится на три дочерних узла.

Итак, как мы узнаем, какова оптимальная точка расщепления в каждом узле?

Начиная с корня, данные разделяются на функцию, которая приводит к наибольшемуПолучение информации(И.Г.) (объяснено более подробно ниже). В итерационном процессе мы затем повторяем эту процедуру расщепления на каждомдочерний узелдо тех пор, пока листья не станут чистыми — то есть все образцы в каждом узле принадлежат одному и тому же классу.

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

Максимизация получения информации

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

Вот,еэто функция для выполнения раскола,Dp,Dleft, а такжеDrightнаборы данных родительского и дочернего узлов,яэтомера загрязненности,Npобщее количество выборок в родительском узле, иNleftа такжеNRightколичество выборок в дочерних узлах.

Читайте также:  Грех ли пилить деревья

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

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

Деревья классификации

Мы начнем с разговора о деревьях решений классификации (также известных какдеревья классификации). Для этого примера мы будем использовать Ирис набор данных, классика в области машинного обучения. Он содержит измерения 150Ирисцветы из трех разных видов —Setosa,радужный, а такжеVirginica, Это будут нашицели, Наша цель — предсказать, какая категорияИрисцветок принадлежит. Длина и ширина лепестка в сантиметрах хранятся в виде столбцов, которые мы также называемфункциииз набора данных.

Давайте сначала импортируем набор данных и назначим функции как X и цель как y :

Вот,р (я | т)доля образцов, принадлежащих к классусдля конкретного узлаT, Следовательно, энтропия равна 0, если все выборки в узле принадлежат одному и тому же классу, и энтропия максимальна, если мы имеем равномерное распределение классов.

Для более наглядного понимания энтропии построим индекс примесей для диапазона вероятностей [0, 1] для класса 1. Код выглядит следующим образом:

Как видите, энтропия равна 0, еслиp (i = 1 | t) = 1, Если классы распределены равномерно сp (i = 1 | t) = 0,5Энтропия равна 1.

Теперь вернемся к нашемуИрисНапример, мы визуализируем наше обученное дерево классификации и увидим, как энтропия решает каждое разделение.

Читайте также:  Какие деревья любят попугаи

Хорошая особенность в scikit-learn является то, что это позволяет нам экспортировать дерево решений в виде .dot файл после тренировки, который мы можем визуализировать, используя GraphViz, например. В дополнение к GraphViz, мы будем использовать библиотеку Python под названием pydotplus , который имеет возможности, аналогичные GraphViz и позволяет нам конвертировать .dot файлы данных в файл изображения дерева решений.

Вы можете установить pydotplus а также graphviz выполнив следующие команды в вашем терминале:

pip3 install pydotplus
apt install graphviz

Следующий код создаст изображение нашего дерева решений в формате PNG:

Глядя на результирующую фигуру дерева решений, сохраненную в файле изображения tree.png Теперь мы можем хорошо проследить разбиения, которые дерево решений определило из нашего обучающего набора данных. Мы начали с 150 выборок в корне и разделили их на два дочерних узла с 50 и 100 выборками, используяширина лепесткаотсечка ≤ 1,75 см. После первого разделения мы видим, что левый дочерний узел уже чист и содержит только выборки из setosa класс (энтропия = 0). Дальнейшие расщепления справа затем используются для отделения образцов от versicolor а также virginica учебный класс.

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

Деревья регрессии

Мы будем использовать Бостон Жилье набор данных для нашего примера регрессии. Это еще один очень популярный набор данных, который содержит информацию о домах в пригороде Бостона. Есть 506 образцов и 14 атрибутов. Для простоты и наглядности мы будем использовать только два — MEDV (средняя стоимость домов, занимаемых владельцами, в 1000 долл. США) в качестве цели и LSTAT (процент от более низкого статуса населения) как особенность.

Читайте также:  Березовый деготь опрыскивание деревьев

Давайте сначала импортируем необходимые атрибуты из scikit-learn в pandas DataFrame.

Давайте использовать DecisionTreeRegressor реализовано в scikit-learn обучить дерево регрессии:

Вот,Ntколичество обучающих выборок в узлеT,Dtэто обучающее подмножество в узлеT,у (я)является истинным целевым значением, иYTЯвляется прогнозируемой целевой величиной (выборочное среднее):

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

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

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

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

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

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

Источник

Оцените статью