В настоящее время я использую XGBoost для набора данных с 21 функцией (выбранной из списка из 150 функций), а затем горячо закодировал их, чтобы получить ~ 98 функций. Некоторые из этих 98 функций несколько избыточны, например: переменная (функция) также отображается как и .
Мои вопросы:
- Как ( если? ) Деревья ускоренного принятия решений справляются с мультиколлинеарностью?
- Как повлияет существование мультиколлинеарности на предсказание, если оно не обрабатывается?
Из того, что я понимаю, модель изучает более одного дерева, и окончательный прогноз основан на чем-то вроде «взвешенной суммы» отдельных прогнозов. Так что, если это правильно, тогда деревья принятия решений должны быть в состоянии обрабатывать взаимозависимость между переменными.
Кроме того, на заметку о том, как работает объект переменной важности в XGBoost?
feature-selection
correlation
xgboost
gbm
user140323
источник
источник
Ответы:
Деревья решений по своей природе невосприимчивы к мультиколлинеарности. Например, если у вас есть 2 объекта, которые коррелированы на 99%, при выборе разделения дерево выберет только один из них. Другие модели, такие как логистическая регрессия, будут использовать обе функции.
Поскольку ускоренные деревья используют отдельные деревья решений, они также не подвержены влиянию мультиколлинеарности. Однако хорошей практикой является удаление любых избыточных функций из любого набора данных, используемого для обучения, независимо от алгоритма модели. В вашем случае, поскольку вы получаете новые функции, вы можете использовать этот подход, оценить важность каждой функции и сохранить только лучшие функции для вашей окончательной модели.
Матрица важности модели xgboost на самом деле представляет собой объект data.table с первым столбцом, в котором перечислены имена всех функций, фактически используемых в повышенных деревьях. Второй столбец - это метрика усиления, которая подразумевает относительный вклад соответствующего объекта в модель, рассчитанный путем учета вклада каждого объекта для каждого дерева в модели. Более высокое значение этого показателя по сравнению с другим признаком означает, что он важнее для создания прогноза.
источник
Мне было любопытно по этому поводу и сделал несколько тестов.
Я натренировал модель на наборе данных об алмазах и заметил, что переменная «х» наиболее важна для прогнозирования того, будет ли цена на алмаз выше определенного порога. Затем я добавил несколько столбцов, сильно коррелированных с x, запустил одну и ту же модель и наблюдал те же значения.
Кажется, что когда корреляция между двумя столбцами равна 1, xgboost удаляет дополнительный столбец перед вычислением модели, поэтому на важность это не влияет. Однако при добавлении столбца, который частично коррелирует с другим, то есть с более низким коэффициентом, важность исходной переменной x уменьшается.
Например, если я добавлю переменную xy = x + y, значение x и y уменьшится. Точно так же важность x уменьшается, если я добавляю новые переменные с r = 0,4, 0,5 или 0,6, хотя чуть-чуть.
Я думаю, что коллинеарность не является проблемой для повышения, когда вы вычисляете точность модели, потому что дерево решений не заботится о том, какая из переменных используется. Однако это может повлиять на важность переменных, поскольку удаление одной из двух коррелированных переменных не оказывает большого влияния на точность модели, учитывая, что другая содержит аналогичную информацию.
Оценить модель по данным алмазов
Мы прогнозируем, будет ли цена выше 400, учитывая все доступные числовые переменные (карат, глубина, таблица, x, y, x)
Обратите внимание, что х - самая важная переменная с показателем прироста значимости 0,375954.
Модель обучена на Diamonds, добавив переменную с r = 1 к x
Здесь мы добавляем новый столбец, который, однако, не добавляет никакой новой информации, так как он идеально соотносится с x.
Обратите внимание, что эта новая переменная отсутствует в выходных данных. Кажется, что xgboost автоматически удаляет идеально коррелированные переменные перед началом расчета. Прирост важности х такой же, 0,3759.
Модель обучена на Алмазах, добавление столбца для х + у
Мы добавляем новый столбец xy = x + y. Это частично связано как с х, так и с у.
Обратите внимание, что значение x и y немного уменьшено: с 0,3759 до 0,3592 для x и с 0,116 до 0,079 для y.
Модель обучена на данных Алмазов, изменено добавление избыточных столбцов
Мы добавляем три новых столбца, которые связаны с x (r = 0,4, 0,5 и 0,6) и посмотрим, что произойдет.
Обратите внимание, что значение x уменьшается с 0,3759 до 0,279.
источник
Есть ответ от Tianqi Chen (2018).
Подводя итог, можно сказать, что Xgboost не использует случайным образом коррелированные функции в каждом дереве, а модель случайного леса страдает от такой ситуации.
Ссылка :
Тяньци Чен, Микаэль Бенести, Тонг Хе. 2018. «Узнайте ваш набор данных с помощью Xgboost». Https://cran.r-project.org/web/packages/xgboost/vignettes/discoverYourData.html#numeric-vs-categorical-variables .
источник
Замечание по поводу ответа Сандипа: если предположить, что 2 из ваших функций являются высоко коллинеарными (скажем, равны 99% времени). На самом деле, только 1 функция выбрана при каждом разделении, но для следующего разделения, xgb может выбрать другую функцию. Таким образом, ранжирование объектов xgb, вероятно, будет одинаково ранжировать 2 коллинеарных объекта. Без каких-либо предварительных знаний или обработки других функций у вас почти нет средств из этого предоставленного ранжирования, чтобы обнаружить, что эти 2 функции являются коллинеарными.
Теперь, что касается относительной важности, которую выводит xgboost, он должен быть очень похож (или, может быть, в точности похож) на ранжирование дерева с градиентом склеарна. Смотрите здесь для объяснений.
источник