Gradient Boosting Tree: «чем больше переменная, тем лучше»?

10

Из руководства по XGBoost я думаю, что когда каждое дерево растет, все переменные сканируются для выбора для разделения узлов, и будет выбрана та, которая имеет максимальное разделение усиления. Поэтому мой вопрос заключается в том, что, если я добавлю некоторые шумовые переменные в набор данных, будут ли эти шумовые переменные влиять на выбор переменных (для каждого растущего дерева)? Моя логика заключается в том, что поскольку эти шумовые переменные НЕ дают максимального разброса усиления, они никогда не будут выбраны, поэтому они не влияют на рост дерева.

Если ответ «да», то правда ли, что «чем больше переменных, тем лучше для XGBoost»? Давайте не будем рассматривать время обучения.

Кроме того, если ответ «да», то верно ли, что «нам не нужно отфильтровывать не важные переменные из модели».

Спасибо!

ВЦМОП
источник

Ответы:

11

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

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

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

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

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

Нил Слэйтер
источник
очень хорошо. Спасибо! Так что вы думаете, что выбор функций перед установкой XGBoost необходим на основе вашего опыта?
WCMC
@ Фрэнк: Может быть. Вы также можете начать с полного набора функций и использовать отчет о важности переменных xgboost. В целом, XGBoost не полностью избавляет вас от каких-либо обычных забот о выборе функций и разработке.
Нил Слэйтер
Привет @Neil, пожалуйста, загляни на datascience.stackexchange.com/questions/17288/… всякий раз, когда у тебя есть шанс. Спасибо.
WCMC
@Frank: я уже сделал вчера и оставил вопрос для уточнения, потому что цифры казались немного не в порядке.
Нил Слэйтер
Привет @Neil, так как предыдущий постер не ответил на твой вопрос, я опубликовал его здесь со своим собственным проектом. Я также предоставил набор данных и R-скрипт, который, я надеюсь, будет более удобным для других, чтобы понять проблему. Я ценю, если вы хотели бы оказать некоторую помощь.
WCMC