Xgboost: Подход (документация) неоднозначность

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

Привет, я пытаюсь понять подход xgboost к обучению моделей. Под этим я подразумеваю следующее. Я могу либо использовать Booster и вызывать xgb.train, либо использовать API-интерфейсы sklearn для использования классификатора / регрессора. Проблема в том, что в предыдущем подходе (согласно документации xgboost) мне нужно указать количество итераций повышения и не указывать какое-либо количество деревьев, в то время как позже я указываю количество поддерживаемых деревьев, но у меня нет никакого варианта чтобы указать количество ускоренных итераций. Количество итераций повышения - это количество оценок? Может кто это прояснить?

Если я правильно прочитал код, API-интерфейсы sklearn используют внутренний бустер, поэтому я могу назначить clf._Booster своему xgb.train, где n_estimators равно количеству усиленных раундов. И мне не нужно вызывать clf.fit, если такое назначение было выполнено. Я прав? Если да, можно ли отрегулировать документацию, чтобы явно указать, что n_estimators - это то, что num_rounds используется для xgb.train.

Было бы неплохо иметь документацию, которая точно объясняет взаимосвязь между подходом низкоуровневого бустера и API-интерфейсами sklearn, я понимаю, что позже вызовет предыдущий, но было бы неплохо понять, как это делается, и уточнить это в документации, чтобы избежать путаницы в конце -пользователи.

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

Привет Владимир,

Повышение, в общем, представляет собой метаалгоритм, который итеративно (или «раундами») обучает последовательность простых / слабых учеников (или оценщиков) таким образом, чтобы вся комбинация работала лучше. Не только деревья, но и разные виды слабых учеников. Например, в xgboost есть деревья и (обобщенная) линейная модель. Любопытно, что этих слабых учеников в xgboost называют «бустерами», а вся комбинированная модель называется «учеником». Это немного озадачило меня, когда я изначально читал документацию и код xgboost, так как это было своего рода противоположностью моему собственному мысленному отпечатку терминологии.

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

Что касается вашего конкретного вопроса, вы правильно читаете, что параметр n_estimators в коде оболочки sklearn [1] отображается на num_boost_round в train [2]. Однако почему вы, как конечный пользователь, захотите таким образом взломать объект-оболочку sklearn? Чтобы сделать это управляемым образом, вам нужно достаточно хорошо знать код оболочки.

[1] https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2] https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12

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

Привет Владимир,

Повышение, в общем, представляет собой метаалгоритм, который итеративно (или «раундами») обучает последовательность простых / слабых учеников (или оценщиков) таким образом, чтобы вся комбинация работала лучше. Не только деревья, но и разные виды слабых учеников. Например, в xgboost есть деревья и (обобщенная) линейная модель. Любопытно, что этих слабых учеников в xgboost называют «бустерами», а вся комбинированная модель называется «учеником». Это немного озадачило меня, когда я изначально читал документацию и код xgboost, так как это было своего рода противоположностью моему собственному мысленному отпечатку терминологии.

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

Что касается вашего конкретного вопроса, вы правильно читаете, что параметр n_estimators в коде оболочки sklearn [1] отображается на num_boost_round в train [2]. Однако почему вы, как конечный пользователь, захотите таким образом взломать объект-оболочку sklearn? Чтобы сделать это управляемым образом, вам нужно достаточно хорошо знать код оболочки.

[1] https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2] https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12

есть такие же проблемы для R?

26 ноября 2015 г. в 11:39 Вадим Хотилович <
[email protected]> написал:

Привет Владимир,

Повышение, в общем, представляет собой мета-алгоритм, который итеративно (или в
"раундов") обучает последовательность простых / слабых учеников (или оценщиков) таким
способ, которым вся комбинация работает лучше. Могут быть разные
виды слабых учеников, а не только деревья. Например, в xgboost есть деревья и
Варианты (обобщенной) линейной модели. Любопытно, что эти слабые ученики в
xgboost называются «ускорителями», а вся комбинированная модель
называется «ученик». Это меня немного озадачило, когда я изначально
чтение документации и кода xgboost, поскольку это было как бы противоположно моему собственному умственному
отпечаток терминологии.

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

Что касается вашего конкретного вопроса, вы правильно читаете, что n_estimators
параметр в коде оболочки sklearn [1] сопоставляется с num_boost_round внутри
поезд [2]. Однако зачем, как конечному пользователю, взламывать склеарн?
объект-оболочка таким образом? Чтобы сделать это управляемым образом, вам нужно:
чтобы достаточно хорошо узнать код оболочки.

[1]
https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2]
https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/dmlc/xgboost/issues/651#issuecomment -159956213.

@khotilov , спасибо за объяснение. На мои нужды хватит, билет закрою.

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