Сатья Кришнан Суреш, Шунмугаприя П.

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

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

На приведенном выше рисунке DT сначала классифицирует образцы на основе условия, что длина лепестка должна быть меньше или равна 2,45. Если входной вектор удовлетворяет этому условию, он, вероятно, принадлежит к классу setosa. Мы можем подтвердить это, взглянув на набор данных ниже, где мы ясно видим, что образцы с длиной лепестка менее 2,45 относятся к классу 0 (сетоза).

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

Так что же такое Джини?

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

«p» в приведенной выше формуле — это вероятность того, что точка данных принадлежит этому листу. Как только значения Джини рассчитаны для листьев, средневзвешенное значение примесей Джини становится значением Джини узла. Описанный выше процесс повторяется для других случайно выбранных значений, и выбирается значение, для которого значение Джини является наименьшим. Если параметр «max_depth» не указан, этот процесс повторяется до тех пор, пока все листья не будут содержать только один класс или пока не будет найдена новая точка принятия решения.

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

Еще одна проблема с DT заключается в том, что он может легко заменить данные, если его не проверить. Существует ряд параметров регуляризации для DT, и мы рассмотрим 3 из них.

Регуляризация:
1. max_depth
2. min_samples_split
3. min_samples_leaf

  1. max_depth:
    Этот параметр указывает глубину DT. Значение по умолчанию — None в scikit-learn. Если вы обучаете DT с max_depth как None, тогда модель будет строить дерево до тех пор, пока листья не будут содержать образцы, принадлежащие одному конкретному классу, и, следовательно, это приведет к переоснащению. Чтобы решить эту проблему, вы можете настроить параметр max_depth так, чтобы он имел низкое значение, чтобы модель не соответствовала данным. На следующих графиках сравниваются две модели с разными значениями max_depth, и вы можете ясно видеть, что модель слева является переобученной и не сможет хорошо обобщать, тогда как модель справа допускает одну или две неправильные классификации и хорошо обобщается.

2. min_samples_split:
Иногда, если узел содержит 10 семплов, принадлежащих к двум разным классам, из, скажем, 1 миллиона семплов, DT все равно попытается разделить этот узел, если значение max_depth не достигнуто. Разделять этот узел бессмысленно, так как это всего лишь небольшая часть всего обучающего набора данных. Чтобы предотвратить такие ситуации, можно использовать параметр min_samples_split, который указывает минимальное количество сэмплов, которое должен иметь узел, если он будет разбиваться дальше. Это в сочетании с max_depth значительно уменьшит эффект переобучения. Еще раз заговор сделан, чтобы поддержать вышеупомянутые заявления.

3. min_samples_leaf:
Этот гиперпараметр следует из рассмотренного выше параметра min_samples_split. min_samples_leaf указывает минимальное количество выборок листа, которое должно быть, тем самым предотвращая разделение узла, если условие не подразумевается.

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

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