微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

data$update_params(params = params) 中的错误:[LightGBM] [Fatal] 构造数据集句柄后无法更改 max_bin

如何解决data$update_params(params = params) 中的错误:[LightGBM] [Fatal] 构造数据集句柄后无法更改 max_bin

我在 RStudio 上下载了 lightgbm 包并尝试使用它运行模型。 基于 Retip 的脚本。

功能是这样的:

> fit.lightgbm
function (training,testing) 
{
  train <- as.matrix(training)
  test <- as.matrix(testing)
  coltrain <- ncol(train)
  coltest <- ncol(test)
  dtrain <- lightgbm::lgb.Dataset(train[,2:coltrain],label = train[,1])
  lightgbm::lgb.Dataset.construct(dtrain)
  dtest <- lightgbm::lgb.Dataset.create.valid(dtrain,test[,2:coltest],label = test[,1])
  valids <- list(test = dtest)
  params <- list(objective = "regression",metric = "rmse")
  modelcv <- lightgbm::lgb.cv(params,dtrain,nrounds = 5000,nfold = 10,valids,verbose = 1,early_stopping_rounds = 1000,record = TRUE,eval_freq = 1L,stratified = TRUE,max_depth = 4,max_leaf = 20,max_bin = 50)
  best.iter <- modelcv$best_iter
  params <- list(objective = "regression_l2",metric = "rmse")
  model <- lightgbm::lgb.train(params,nrounds = best.iter,verbose = 0,max_bin = 50)
  print(paste0("End training"))
  return(model)
}

但是,当我尝试运行 Retip 中的函数

lightgbm <- fit.lightgbm(training,testing)

有这个致命错误

Error in data$update_params(params = params) : 
  [LightGBM] [Fatal] Cannot change max_bin after constructed Dataset handle. 

只有将 max_bin 改为 max_bin=255 时才没有错误

浏览文档:

What is the right way for hyper parameter tuning for LightGBM classification? #1339

[Python] max_bin weird behaviour #1053

对应该做什么有任何想法\建议吗?

解决方法

此问题已交叉发布到 https://github.com/microsoft/LightGBM/issues/4019 并已在那里得到答复。

LightGBM 中 Dataset 对象的构建处理了一些重要的预处理步骤(参见 this prior answer),这些步骤发生在训练之前,并且在构建之后所有 Dataset parameters 都不能更改。

在原始帖子的代码中将 max_bin=50 传递到 lgb.Dataset() 而不是 lgb.cv() / lgb.train() 将导致成功训练而不会出现此错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。