Предыдущие темы

1. Линейная регрессия https://medium.com/@the.data.yoga/linear-regression-all-you-need-to-know-de44f93bc5fe

2. Логистическая регрессия https://medium.com/@the.data.yoga/moving-ahead-with-logistic-regression-654f77c76d60

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

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

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

Дерево решений — это, по сути, блок-схема с решением в каждом узле в структуре «если-то-иначе».

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

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

Здесь важно понимать, как генерируется дерево, алгоритм генерации дерева можно записать так —

  1. Подмножество данных на основе различных переменных, доступных рекурсивно
  2. Выберите переменную и ее правило подмножества, которое дает максимальный выигрыш
  3. Применить разделение
  4. Повторите вышеуказанные шаги для созданных подмножеств.
  5. Продолжайте этот процесс, пока не будет достигнут критерий остановки.
  6. Для задач классификации используйте класс большинства, для задач регрессии используйте среднее значение в качестве прогнозируемого значения.

Поняв изложенный выше алгоритм, необходимо задать два вопроса

  1. как рассчитать выигрыш
  2. как проверить критерии остановки

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

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

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

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

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

Теперь мы рассмотрим пример, чтобы понять, как рассчитать каждую из этих мер примесей. Предположим, у нас есть набор данных из 100 наблюдений с независимой переменной время_упражнения(минуты)ивес(кг)и зависимая переменная здоровая со значениями 1 и 0. Распределение классов 1 и 0 для переменной здоровой составляет 60:40. т. е. P (0) = 0,4 и P (1) = 0,6

Ошибка классификации = 1- (0,6) = 0,4

Индекс Джини = 0,4 * (1–0,4) + 0,6 * (1–0,6) = 0,24 + 0,24 = 0,48.

Энтропия = -(0,4*log2(0,4) + 0,6*log2(0,6)) = 0,97

Теперь рассмотрим другой пример, где распределение классов 50:50 (полностью нечисто), т.е. P(0)=0,5 и P(1)=0,5, давайте снова рассчитаем значения примесей.

Ошибка классификации = 1- (0,5) = 0,5

Индекс Джини = 0,5 * (1–0,5) + 0,5 * (1–0,5) = 0,25 + 0,25 = 0,5.

Энтропия = 0,5*log2(0,5) + 0,5*log2(0,5) = 1

В другом примере, где распределение классов равно 100:0 (полностью чистое), т. е. P(0)=0 и P(1)=1, давайте снова рассчитаем значения примесей.

Ошибка классификации = 1- (1) = 0

Индекс Джини = 0 * (1–0) + 1 * (1–1) = 0

Энтропия = 0*log2(0) + 1*log2(1) = 0

Как вы можете видеть, для чистого класса все три показателя равны 0, а для нечистого класса с соотношением классов 50:50 значения ошибки классификации и индекса Джини равны 0,5, тогда как для энтропии он равен 1. Поэтому принято делить значение энтропии на 2, чтобы стандартизировать шкалу всех показателей загрязнения от 0 до 0,5. Эта версия энтропии также известна как масштабированная энтропия.

Уменьшение примеси, когда мы применяем критерии подмножества в дереве решений для разделения узлов, известно как получение информации (IG). Алгоритм использует IG в качестве основы для определения правильного разделения, которое даст максимальный IG.

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

Вычислите индекс Джини на корневом узле без разделения.

Р(0) = 0,4 и Р(1) = 0,6

gini_before_split = 0,4*(1–0,4) + 0,6*(1–0,6) = 0,24 + 0,24 = 0,48

Сплит с вариантом 1: время_упражнения > 40 минут

P(0|да) = 5/64 и P(1|да) = 59/64

P(0|нет) = 35/36 и P(1|нет) = 1/36.

gini_left = (5/64)*(1-(5/64)) + (59/64)*(1-(59/64)) = 0,144

Джини_право = (35/36)*(1-(35/36)) + (1/36)*(1-(1/36)) = 0,054

gini_after_split = gini_left+gini_right = 0,198

IG = gini_before_split — gini_after_split = 0,48 — 0,198 = 0,282

Сплит с опцией 2: вес ‹ 80 кг

Давайте вычислим индекс Джини после применения опции разделения 2 к корневому узлу.

P(0|да) = 4/54 и P(1|да) = 50/54

P(0|нет) = 36/46 и P(1|нет) = 10/46.

gini_left = (4/54)*(1-(4/54)) + (50/54)*(1-(50/54)) = 0,137

Джини_право = (36/46)*(1-(36/46)) + (10/46)*(1-(10/46)) = 0,340

gini_after_split = gini_left+gini_right = 0,477

IG = gini_before_split — gini_after_split = 0,48–0,477 = 0,003

Поскольку мы могли бы сравнить варианты 1 и 2 для разделения, IG для варианта 1, т. е. 0,282, больше, чем для варианта 2, т. е. 0,003, поэтому для построения дерева решений мы бы выбрали вариант 1 на этом этапе.

Узлы дерева перестанут разделять узел и будут расти, когда между до и после разделения узла не будет прироста информации.

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