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

давайте начнем прямо и проверим пошаговый метод построения дерева из этого набора данных.

1. Вычислить загрязнение набора данных

Набор данных считается нечистым, если его метки состоят из разных классов. Представленный выше набор данных подпадает под эту категорию (нечистые), поскольку он состоит из разных видов фруктов. Для расчета примеси мы используем показатель под названием Джини. Джини находится в диапазоне от 0 до 1; при этом ноль считается совершенно чистым, а один — совершенно нечистым.

Коэффициент Джини, равный 0,64, должен дать вам представление о том, насколько нечистым является набор данных, учитывая, что Джини находится в диапазоне от 0 (совершенно чистый) до 1 (совершенно нечистый).

2. Создать вопросы типа "Верно/Неверно" из набора данных

Следующая цель — сделать набор данных «чище». Эта цель достигается путем создания списка верных/неверных вопросов, которые будут служить пороговыми значениями для разделения набора данных. Чтобы знать, какие вопросы задавать, мы перебираем каждое значение для каждой характеристики набора данных.

  1. цвет == желтый? - Цвет плода желтый?
  2. диаметр › = 3? - «Диаметр плода больше или равен 3?»
  3. масса ›= 65? - «Масса плода больше или равна 65?»
  4. цвет == красный? - Цвет плода красный?

Обратите внимание, что вопросы были сгенерированы из значений признаков набора данных. Стоит повторить, что вопросы должны генерироваться из «каждого» значения для «каждого» признака набора данных. У нас должно получиться 10 вопросов, если учитывать каждое значение.

3. Решите, какой вопрос использовать в первую очередь

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

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

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

Как было сказано выше, лучше всего задать вопрос с «наибольшей» прибавкой информации. Среди сгенерированных вопросов четыре имели информационный прирост (IG) 0,37, один имел IG 0,17, три имели IG 0,14 и два вопросы были отброшены, потому что они не привели к расколу. Далее мы выбрали любой из вопросов с IG 0,37 (наивысший прирост информации) в качестве порога разделения.

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

Набор C считается «чистым», поскольку его этикетки состоят из одного типа фруктов (виноград). На этом этапе мы добавляем конечный узел в конце ветки.

Мы можем заметить, что значения массы для примеров множества C различны. Это означает, что мы могли бы генерировать дополнительные вопросы для разделения данных; например, «масса › = 10?» или «масса ›= 7?». Стоит помнить, что основной целью создания вопросов является создание «чистых ярлыков». Поскольку эта цель была достигнута, мы завершаем процесс разделения на этой ветви и добавляем конечный узел.

Набор B по-прежнему «нечист». В результате мы должны генерировать вопросы на основе значений его признаков, чтобы дополнительно разделить набор данных.

Было бы очень полезно, если бы вы заменили набор данных или внесли в него изменения, а затем попытались решить его.

Надеюсь, это поможет кому-то. Вы можете проверить канал разработчиков Google на YouTube (Джош Гордон, «Давайте напишем дерево решений с нуля») для большей ясности. Спасибо за чтение!