Я пытаюсь запустить xgboost для проблемы с очень шумными функциями и заинтересован в остановке числа раундов на основе пользовательского eval_metric, который я определил.stop xgboost на основе eval_metric
Основываясь на знаниях домена, я знаю, что когда eval_metric (оцененный на данных обучения) выходит за определенное значение, xgboost перерабатывает. И я хотел бы просто взять подогнанную модель в этом конкретном количестве раундов, а не продолжать дальше.
Что было бы лучшим способом достичь этого?
Это будет несколько соответствовать критериям ранней остановки, но не точно.
В качестве альтернативы, если есть возможность получить модель из промежуточного раунда?
Вот пример, чтобы лучше объяснить вопрос. (На примере игрушка, которая поставляется с xgboost помощи документации и использование eval_metric по умолчанию)
library(xgboost)
data(agaricus.train, package='xgboost')
train <- agaricus.train
bstSparse <- xgboost(data = train$data, label = train$label, max.depth = 2, eta = 1, nthread = 2, nround = 5, objective = "binary:logistic")
Вот выход
[0] train-error:0.046522
[1] train-error:0.022263
[2] train-error:0.007063
[3] train-error:0.015200
[4] train-error:0.007063
Теперь давайте говорить от области знания, которые я знаю, что когда-то ошибка поезд идет ниже 0,015 (третий раунд в этом случае), любые дальнейшие раунды только приводят к перестановке. Как остановить процесс обучения после третьего раунда и получить подготовленную модель, чтобы использовать ее для прогнозирования по другому набору данных?
Мне нужно запустить процесс обучения по множеству разных наборов данных, и я не знаю, сколько раундов он может предпринять для обучения, чтобы получить ошибку ниже фиксированного числа, поэтому я не могу установить аргумент nrounds на предопределенный стоимость. Только интуиция, которую я имею, заключается в том, что после того, как ошибка обучения будет ниже числа, мне нужно прекратить дальнейшие тренировочные раунды.
Спасибо за ваш ответ. Если я правильно понимаю, код, который у вас есть, включает в себя повторное обучение модели с увеличением числа раундов и прекращение, когда ошибка становится ниже отсечки. Есть ли способ запустить модель только один раз, вычисляя eval_metric после каждого раунда, а затем сохраняя модель, когда eval_metric идет ниже отсечки. –
Возможно, вам потребуется перечитать документацию xgboost. Xgboost использует итеративный подход для получения полезной модели. Каждый раунд приближается к некоторому уровню ошибки, с которым вам удобно: баланс времени для создания модели и сложности модели, соответствующей вашей ситуации. Я не думаю, что вы можете заранее знать «правильную» модель. Опять же, в отсутствие какого-либо из вашего кода или какого-либо образца набора данных мне сложно знать, что вы спрашиваете –
Я добавил пример на мой вопрос - надеюсь, он объясняет мой вопрос лучше –