В чем разница между lgb.train() и lightgbm() в r?

Я пытаюсь построить модель регрессии с 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)

Заранее спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

в чем разница между 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).

Другие вопросы по теме