Я пытаюсь построить модель регрессии с R, используя lightGBM, и я немного запутался с некоторыми функциями и когда/как их использовать.
Во-первых, это то, что я написал в заголовке, в чем разница между lgb.train() и lightgbm()?
В описании в документации (https://cran.r-project.org/web/packages/lightgbm/lightgbm.pdf) говорится, что lgb.train — это «Логика для обучения с LightGBM», а lightgbm — «Простой интерфейс». для обучения модели LightGBM», в то время как их итоговое значение равно lgb.Booster, обученная модель. Одно отличие, которое я обнаружил, заключается в том, что lgb.train() не работает с valids = , а lightgbm() работает.
Второй — о функции lgb.cv(), касающейся перекрестной проверки в lightGBM. Как вы применяете вывод lgb.cv() к модели? Как я понял из документации, на которую я ссылался выше, похоже, что вывод как lgb.cv, так и lgb.train является моделью. Правильно ли использовать его, как в примере ниже?
lgbcv <- lgb.cv(params,
lgbtrain,
nrounds = 1000,
nfold = 5,
early_stopping_rounds = 100,
learning_rate = 1.0)
lgbcv <- lightgbm(params,
lgbtrain,
nrounds = 1000,
early_stopping_rounds = 100,
learning_rate = 1.0)
Заранее спасибо!
в чем разница между lgb.train() и lightgbm()?
Обе эти функции обучают модель LightGBM, это просто немного разные интерфейсы. Самая большая разница заключается в том, как готовятся обучающие данные. Для обучения LightGBM требуется специальное представление обучающих данных для LightGBM, называемое Dataset
. Чтобы использовать lgb.train()
, вы должны заранее построить один из них с помощью lgb.Dataset()
. lightgbm()
, с другой стороны, может принять фрейм данных, data.table
или матрицу и создаст для вас объект Dataset
.
Выберите тот метод, который, по вашему мнению, имеет более удобный интерфейс... оба будут создавать одну обученную модель LightGBM (класс "lgb.Booster"
).
что lgb.train() не работает с valids = , а lightgbm() работает.
Это неправильно. Обе функции принимают аргумент ключевого слова valids
. Запустите ?lgb.train
и ?lightgbm
для получения документации по этим методам.
Как вы применяете вывод lgb.cv() к модели?
Я не уверен, что вы имеете в виду, но вы можете найти пример использования lgb.cv()
в документах, которые появляются при запуске ?lgb.cv
.
library(lightgbm)
data(agaricus.train, package = "lightgbm")
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label = train$label)
params <- list(objective = "regression", metric = "l2")
model <- lgb.cv(
params = params
, data = dtrain
, nrounds = 5L
, nfold = 3L
, min_data = 1L
, learning_rate = 1.0
)
Это возвращает объект класса "lgb.CVBooster"
. В этом объекте есть несколько объектов "lgb.Booster"
(обученные модели, которые производят lightgbm()
или lgb.train()
).
Вы можете извлечь любой из них из model$boosters
. Однако на практике я не рекомендую использовать модели из lgb.cv()
напрямую. Цель перекрестной проверки — получить оценку ошибки обобщения для модели. Таким образом, вы можете использовать lgb.cv()
, чтобы выяснить ожидаемую ошибку для данного набора данных + набора параметров (посмотрев на model$record_evals
и model$best_score
).