Предыдущие темы
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 является Да, мы переходим к левому узлу, в противном случае мы переходим к правому узлу и продолжаем делать это, пока не достигнем конечного узла.
Здесь важно понимать, как генерируется дерево, алгоритм генерации дерева можно записать так —
- Подмножество данных на основе различных переменных, доступных рекурсивно
- Выберите переменную и ее правило подмножества, которое дает максимальный выигрыш
- Применить разделение
- Повторите вышеуказанные шаги для созданных подмножеств.
- Продолжайте этот процесс, пока не будет достигнут критерий остановки.
- Для задач классификации используйте класс большинства, для задач регрессии используйте среднее значение в качестве прогнозируемого значения.
Поняв изложенный выше алгоритм, необходимо задать два вопроса
- как рассчитать выигрыш
- как проверить критерии остановки
Также помните первый шаг в нашем алгоритме, как вы разделяете в самом начале, т.е. корневой узел может изменить внешний вид дерева, а также окончательные результаты дерева. Поэтому алгоритм называется "жадным"по своей природе, потому что он заботится только о получении максимума на данном шаге и не учитывает, что произойдет дальше по дереву.
Теперь давайте посмотрим, как мы можем рассчитать выигрыш для заданного критерия разделения, рассматривая проблему бинарной классификации —
Понимание однородности и нечистоты узла. Вам необходимо рассмотреть, чего пытается достичь разделение, сможет ли оно полностью разделить два класса в данных или в какой степени. Узел дерева, который имеет только точки данных, принадлежащие одному классу, является чистым или однородным, а то, что не является однородным, называется примесью узла.
Рассмотрим дерево ниже, в котором есть 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 на этом этапе.
Узлы дерева перестанут разделять узел и будут расти, когда между до и после разделения узла не будет прироста информации.
Надеюсь, что концепция того, как создается дерево решений, к настоящему времени ясна, мы продолжим эту статью с последующими шагами, понимающими проблемы в деревьях решений и как выбрать гиперпараметры в дереве решений, чтобы уменьшить проблемы до определенной степени.