如何解决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)
}
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 举报,一经查实,本站将立刻删除。