Я знаю, как реализовать линейную целевую функцию и линейные усиления в XGBoost. Мой конкретный вопрос: когда алгоритм соответствует остаточному (или отрицательному градиенту), использует ли он один элемент на каждом шаге (т.е. одномерную модель) или все признаки (многомерная модель)?
Будем благодарны за любые ссылки на документацию о линейных бустах в XGBoost.
РЕДАКТИРОВАТЬ: Линейные усиления могут быть реализованы в XGBoost, установив параметр 'Booster' в 'gblinear'. См. Http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3885826/ для получения полезной информации о линейном повышении. Обратите внимание, что я говорю не о целевой функции (которая может быть также линейной), а об усилении самого себя.
Спасибо!
regression
machine-learning
boosting
xgboost
Escachator
источник
источник
Ответы:
Краткий ответ на ваш вопрос:
Алгоритм использует одну функцию, или все функции зависят от вашей настройки. В моем длинном ответе, указанном ниже, в примерах решений и линейных учащихся они используют все функции, но при желании вы также можете использовать подмножество функций. Столбцы выборки (функции) рассматриваются как уменьшающие дисперсию модели или повышающие «надежность» модели, особенно если у вас большое количество функций.
В случае с
xgboost
учеником по древовидной базе вы можете выбратьcolsample_bytree
образцы объектов, подходящие для каждой итерации. Для линейного базового ученика таких вариантов нет, поэтому он должен соответствовать всем функциям. Кроме того, не так уж много людей используют линейного ученика в xgboost или для повышения градиента в целом.Длинный ответ для линейного как слабый ученик для повышения:
В большинстве случаев мы не можем использовать линейного ученика в качестве базового ученика. Причина проста: сложение нескольких линейных моделей все равно будет линейной моделью.
В продвижении нашей модели есть сумма базовых учеников:
которая является простой линейной моделью! Другими словами, модель ансамбля обладает «одинаковой силой» с базовым учеником!
Поэтому люди хотели бы использовать другие модели, кроме линейной модели, в качестве базового обучающегося. Дерево - хороший вариант, так как добавление двух деревьев не равно одному дереву. Я продемонстрирую это на простом примере: пень решения, представляющий собой дерево только с 1 разбиением.
Теперь проверьте первые четыре итерации.
Обратите внимание, что в отличие от линейного ученика, модель в 4-й итерации не может быть достигнута за одну итерацию (один отдельный пень решения) с другими параметрами.
Итак, я объяснил, почему люди не используют линейного ученика в качестве базового ученика. Однако ничто не мешает людям делать это. Если мы используем линейную модель в качестве базового обучающегося и ограничиваем количество итераций, это равносильно решению линейной системы, но ограничивает количество итераций в процессе решения.
Тот же пример, но на трехмерном графике красная кривая - данные, а зеленая плоскость - окончательное совпадение. Вы можете легко увидеть, что конечная модель - это линейная модель,
z=mean(data$label)
параллельная плоскости x, y. (Вы можете подумать, почему? Это потому, что наши данные "симметричны", поэтому любой наклон плоскости увеличит потери). Теперь проверьте, что произошло в первых 4 итерациях: подобранная модель медленно поднимается до оптимального значения (среднее значение).Окончательный вывод, линейный ученик не широко используется, но ничто не мешает людям использовать его или внедрить в R-библиотеку. Кроме того, вы можете использовать его и ограничить количество итераций для регуляризации модели.
Связанный пост:
Повышение градиента для линейной регрессии - почему это не работает?
Является ли пень решения линейной моделью?
источник