Xgboost: Нужно ли избавляться от бесполезных функций в задаче классификации в xgboost?

Созданный на 14 мар. 2017  ·  3Комментарии  ·  Источник: dmlc/xgboost

У меня более 650 функций, и я использую xgboost, чтобы оценить важность этих функций. Функция get_score () возвращает наличие признаков при построении деревьев.

Когда я проверяю результат, я обнаруживаю, что почти 150 функций имеют рейтинг ниже 20. Некоторые из них равны нулю. Я избавляюсь от этих функций и смотрю, будет ли модель работать лучше. Но результат практически такой же, как и у предыдущего. Так нужно ли избавляться от этих неважных функций?

В результате эксперимента новый порядок важности функций не похож на предыдущий. Некоторые были не слишком важными, но стали важными. Я имею в виду, что порядок важности функций не постоянный. Почему не устойчиво?

Самый полезный комментарий

В большинстве алгоритмов машинного обучения важно выбирать функции, чтобы избежать переобучения.

При усилении, и особенно в xgboost, обучение проводится таким образом, чтобы вы максимально обобщали (слабый обучающийся, приближение Тейлора, стохастическое обучение и т. Д.), Что делает его устойчивым к чрезмерной подгонке (при этом вы можете переобучиться). подходит, если вы действительно этого хотите :) -> большое количество итераций, высокая скорость обучения, отсутствие стохастического обучения ...). Чтобы ответить на ваши вопросы, избавление от нерелевантных функций может иметь важное значение в какой-то момент. Допустим, у вас есть выбросы, вы можете начать использовать эти нерелевантные функции для классификации выбросов в процессе обучения, а это нехорошо.

Что касается вашего второго вопроса, не существует единственного способа объединить слабых учеников для достижения хороших результатов. однако для получения различных комбинаций (и разной важности функций) вы должны использовать некоторую случайность в процессе обучения, такую ​​как подвыборка, max_features ... Другая возможность состоит в том, что у вас есть избыточные функции. Вы должны проверить соотношение между ними.

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

Все 3 Комментарий

В большинстве алгоритмов машинного обучения важно выбирать функции, чтобы избежать переобучения.

При усилении, и особенно в xgboost, обучение проводится таким образом, чтобы вы максимально обобщали (слабый обучающийся, приближение Тейлора, стохастическое обучение и т. Д.), Что делает его устойчивым к чрезмерной подгонке (при этом вы можете переобучиться). подходит, если вы действительно этого хотите :) -> большое количество итераций, высокая скорость обучения, отсутствие стохастического обучения ...). Чтобы ответить на ваши вопросы, избавление от нерелевантных функций может иметь важное значение в какой-то момент. Допустим, у вас есть выбросы, вы можете начать использовать эти нерелевантные функции для классификации выбросов в процессе обучения, а это нехорошо.

Что касается вашего второго вопроса, не существует единственного способа объединить слабых учеников для достижения хороших результатов. однако для получения различных комбинаций (и разной важности функций) вы должны использовать некоторую случайность в процессе обучения, такую ​​как подвыборка, max_features ... Другая возможность состоит в том, что у вас есть избыточные функции. Вы должны проверить соотношение между ними.

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

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

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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги