В этом посте мы рассмотрим основные концепции, лежащие в основе Random Forest, обсудим практические проблемы реализации, такие как сильно коррелированные функции, разреженность функций, несбалансированные классы. Затем сравните концепции и производительность случайного леса с деревьями повышения и деревом решений! Если вы хотите что-то обсудить или найти ошибку, напишите мне на [email protected] :)
Базовые концепты
Как строится лес? Случайный лес построен на деревьях решений посредством упаковки (сокращение от bootstrapping-aggregation). «Случайность» состоит из двух частей:
- Самостоятельная загрузка - это общий инструмент для оценки точности моделирования с повторной выборкой. В структуре Random Forest бутстрэппинг используется для создания случайных вариаций между каждым деревом. В качестве самого первого шага мы делаем выборку из обучающих данных с заменой. Каждый образец имеет те же точки данных, что и исходные данные обучения. Строим дерево с каждым образцом. Почему выборка с заменой? На практике выборка без замены может привести к очень небольшому количеству данных для каждого дерева, например, построение 100 деревьев из 5000 точек данных дает нам только пять точек данных на дерево. Это подразумевает высокую предвзятость. Теоретически выборка с заменой помогает сохранить низкую дисперсию случайного леса и предотвращает переобучение.
- Случайный выбор части функций для каждого Дерева решений. Это снова увеличивает случайную вариацию между деревьями и предотвращает переобучение. Эмпирическое правило начинается с sqrt (количество функций), а затем настраивается количество случайных функций для каждого дерева с помощью оптимизаторов, таких как поиск градиента.
После того, как деревья построены, мы вводим точку данных через каждое дерево и принимаем большинство голосов за проблемы классификации или вычисляем среднее значение выходных данных каждого дерева для проблем регрессии. Это называется агрегированием.
Боковая панель: упаковка и упаковка
Пакетирование, как обсуждалось выше, представляет собой метод ансамбля (начальная загрузка, затем агрегация). Вам не обязательно использовать дерево в системе упаковки. Однако сложенное дерево использует все функции дерева.
Характеристики с высокой степенью корреляции
Можем ли мы по-прежнему использовать случайный лес, когда функции очень похожи? Это зависит. Особенности с высокой корреляцией могут вызвать проблемы в исследованиях причинно-следственных связей. Если вы позволите Random Forest оценивать важность функции по тому, сколько примесей они удаляют, два сильно коррелированных объекта будут оцениваться по-разному, потому что примеси, удаленные первой функцией, не будут удалены снова второй функцией. Таким образом, заявленная важность второй функции будет значительно ниже, чем важность первой функции, хотя они тесно связаны с точки зрения их взаимосвязи с целевыми переменными. Эта ситуация может быть немного улучшена путем случайного выбора функций, но не решена полностью. Кроме того, высокая корреляция не может быть проблемой в исследованиях машинного обучения. Когда наша цель - делать прогнозы, высокая корреляция между функциями редко ухудшает оценки прогнозов. Дружественное напоминание: когда у вас много избыточных функций и большой набор данных, время выполнения будет довольно долгим.
Разреженность / плотность функции
Разреженность / плотность функций означает, что у вас несбалансированный набор данных, например, нулевое (одно) значение доминирующих двоичных функций называется разреженным (плотным). Редкость / плотность объектов - серьезная проблема, которая отрицательно влияет на производительность Random Forest. В примере с нулевыми значениями преобладают двоичные объекты, деревья будут расти в направлении нуля. Неинформативные разбиения приводят к длительному времени выполнения, большой глубине деревьев и высокому уровню ошибок.
Если вы не учитываете среду выполнения, построение большего количества деревьев может немного помочь решить эту проблему, поскольку каждое дерево имеет другой набор случайно выбранных функций. Однако этот метод не рекомендуется, поскольку случайный лес по своей природе склонен к разреженности / плотности. Если вы предпочитаете использовать древовидные алгоритмы, XGBoost нечувствителен к разреженным / плотным данным, и его тоже стоит попробовать.
Несбалансированные классы
Несбалансированные классы означают, что один или несколько классов составляют большую часть выборки. В крайнем случае вы предсказываете двоичный класс, и почти все обучающие образцы принадлежат нулевому классу. Затем ваше дерево решений может спрогнозировать, что все обучающие выборки попадут в нулевой класс, и достичь «ложной» (или «завышенной») высокой точности на этапе обучения. Это может вызвать у вас проблемы, когда невидимые тестовые данные действительно часто попадают в один класс. Вы можете обобщить этот крайний случай и на классификацию с несколькими метками.
Чтобы определить, повлияли ли несбалансированные классы на производительность модели:
- Используйте модифицированный показатель точности. Обычно точность = количество правильно спрогнозированных выборок / количество всех выборок. Чтобы он отражал влияние дисбаланса классов, используйте точность * = 1/2 * (точность положительного прогноза + точность отрицательного прогноза). Когда ваш классификатор не работает одинаково хорошо для каждого класса (другими словами, класс большинства завышает производительность модели), модифицированная точность * будет ниже, чем обычная точность; когда у вас нет проблемы с несбалансированным классом, точность * = точность.
Решить эту проблему можно двумя простыми способами:
- Параметр «class_weight»: это необязательный гиперпараметр, который вы можете указать в моделях «Дерево решений» или «Случайный лес». Для несбалансированных классов вы можете установить «class_weight» = «сбалансированный». Этот режим автоматически регулирует веса, обратно пропорциональные частотам классов во входных данных как n_samples / (n_classes * np.bincount (y)).
- Избыточная выборка недостаточно представленных классов: делая копии выборок, относящихся к классам меньшинств, мы увеличиваем частоту классов для классов меньшинств и, таким образом, продвигаемся к разделению частоты классов 50/50 (для двоичной классификации). Однако мы должны убедиться, что исходные данные не являются предвзятыми. Если снова подумать о крайнем двоичном случае, когда у нас есть 10000 образцов в классе A и 10 образцов в классе B, мы хотим убедиться, что эти 10 образцов действительно содержат информацию о популяции в классе B. На самом деле характеристики 10 образцов редко могут предложить вся информация класса B; они могут быть просто выбросами.
Случайный лес и дерево решений
Случайный лес - это метод ансамбля, построенный на дереве решений. С образцами начальной загрузки и случайно выбранными функциями для каждого дерева, а затем агрегированным решением (большинством голосов или средним) по окончательному результату всех деревьев, случайный лес должен лучше справляться с проблемами переобучения и шума, чем дерево решений. Из курса «Введение в статистику» мы знаем:
Среднеквадратичная ошибка = дисперсия + смещение².
Случайный лес в большинстве случаев может уменьшить ошибку в части дисперсии (переобучения). Random Forest действительно превзошел Дерево решений в моих проектах Прогноз продаж продуктов питания в Walmart и Прогноз цен на жилье в Айове. Но может ли дерево решений превзойти случайный лес? Действительно да! Поскольку случайный лес сосредоточился на решении дисперсионной части приведенной выше формулы, вы можете представить, что, когда дело доходит до предсказания обучающих данных без большого шума, дерево решений не обязательно работает хуже - его смещение не имеет быть выше, чем случайный лес по замыслу. Другая причина заключается в том, что производительность Random Forest стабилизируется по количеству деревьев. Другими словами, когда у вас действительно большой набор обучающих данных и действительно небольшое количество функций, одного дерева решений может быть достаточно. (Опять же, думая о крайнем случае, когда у вас есть 10 000 образцов и две функции. Какую магию может здесь творить ваш случайный лес?)
Случайный лес и деревья повышения градиента
Повышение - это последовательный процесс, при котором вы постоянно обновляете веса слабых классификаторов на предыдущем этапе и в конечном итоге получаете набор стабильных максимизированных классификаторов. Думая о классификаторах как о разделах, вы присваиваете больший вес разделам, образцы которых должны находиться в другом месте. Этапы построения последовательности M Gradient Boosting Trees:
- Инициализируйте оптимальную постоянную модель: одно дерево терминальных узлов с начальным весом 1 / N для каждой выборки, предполагая всего N выборок.
- Для каждого из следующих деревьев:
1. Вычислить градиентный спуск для каждой из N точек выборки (поэтому усиление градиента занимает очень много времени: /); затем установите дерево с соответствующими параметрами градиента.
2. Вычислите вес, который минимизирует функцию потерь с текущим деревом.
Этот вес будет применяться как часть следующего дерева:
- Выведите прогноз из последнего дерева. Готово!
Простое сравнение показывает, что Gradient Boosting Trees, в отличие от Random Forest, не использует дополнительный метод выборки, строит деревья последовательно, а не параллельно, и в конце не использует стратегию агрегирования. Интуитивно понятно, что Gradient Boosting Trees справляются со смещениями намного лучше, чем Random Forest, если вы внимательно измените параметры. Эмпирические исследования показали, что деревья с градиентным усилением почти всегда превосходят произвольный лес, когда количество деревьев достаточно велико - стабилизированные деревья с градиентным усилением часто лучше, чем стабилизированный случайный лес. Однако, как упоминалось выше, Random Forest довольно хорош, когда в ваших данных много шума. В этом случае деревья с усилением градиента имеют большую вероятность переобучения.
Примечание. Если вас интересует подробное объяснение базовых моделей машинного обучения, я рекомендую «Элементы статистического обучения» Хасти, Тибширани и Фридмана.