You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mlr框架中无法识别classif.lightgbm学习者的解决求助

解决方案

问题根源

mlr核心包并未内置LightGBM的学习器实现,需要安装并加载专门的mlr扩展包mlrLightGBM,才能让makeLearner识别classif.lightgbm。

具体步骤

  1. 安装mlrLightGBM包
    优先从CRAN安装:

    install.packages("mlrLightGBM")
    

    若CRAN版本不可用,从GitHub安装:

    # 先确保安装devtools工具包
    install.packages("devtools")
    devtools::install_github("Laurae2/mlrLightGBM")
    
  2. 加载扩展包
    在脚本顶部或函数代码开头添加:

    library(mlrLightGBM)
    

额外参数修正提示

你的代码存在参数使用错误:lgbm_param_grid是超参数调优的候选值列表,不能直接传入makeLearner的par.vals参数(par.vals仅用于设置固定参数)。若要实现超参数调优,需要用makeParamSet定义参数空间,结合makeTuneWrapper包装学习器,示例如下:

# 定义调参空间
lgbm_param_set <- makeParamSet(
  makeDiscreteParam("learning_rate", values = c(0.01, 0.05, 0.1, 0.5)),
  makeDiscreteParam("num_leaves", values = c(3, 5, 10, 20)),
  makeDiscreteParam("max_depth", values = c(-1, 5, 10)),
  makeDiscreteParam("bagging_fraction", values = c(0.5, 0.8, 1)),
  makeDiscreteParam("feature_fraction", values = c(0.5, 0.8, 1))
)

# 定义调参控制器
tune_control <- makeTuneControlRandom(maxit = 50)

# 包装学习器用于调参
tuned_lgbm <- makeTuneWrapper(lgbm_learner, 
                              resampling = makeResampleDesc("CV", iters = 5),
                              par.set = lgbm_param_set, 
                              control = tune_control)

修改后的完整代码示例

library(mlr)
library(mlrLightGBM)
library(randomForest)

ensemble_learner <- function(data, n_models = 10, cpus = 32) {
  
  train <- data[[1]]
  test <- data[[2]]
  
  # 定义LightGBM固定参数
  lgbm_fixed_params <- list(objective = "binary",
                            boosting_type = "gbdt",
                            verbose = FALSE,
                            num.trees = 1000,
                            early.stopping.rounds = 50,
                            early.stopping.margin = 0.01,
                            nthread = cpus)
  
  # 初始化LightGBM学习器
  lgbm_learner <- makeLearner("classif.lightgbm",
                              predict.type = "prob",
                              fix.factors.prediction = TRUE,
                              par.vals = lgbm_fixed_params)
  
  # 定义超参数调优空间
  lgbm_param_set <- makeParamSet(
    makeDiscreteParam("learning_rate", values = c(0.01, 0.05, 0.1, 0.5)),
    makeDiscreteParam("num_leaves", values = c(3, 5, 10, 20)),
    makeDiscreteParam("max_depth", values = c(-1, 5, 10)),
    makeDiscreteParam("bagging_fraction", values = c(0.5, 0.8, 1)),
    makeDiscreteParam("feature_fraction", values = c(0.5, 0.8, 1)),
    makeDiscreteParam("alpha", values = c(0, 1, 3, 7)),
    makeDiscreteParam("lambda", values = c(0, 1, 3, 7)),
    makeDiscreteParam("gamma", values = c(0, 1, 3, 7))
  )
  
  # 包装学习器实现超参数调优
  tuned_lgbm <- makeTuneWrapper(lgbm_learner, 
                                resampling = makeResampleDesc("CV", iters = 5),
                                par.set = lgbm_param_set,
                                control = makeTuneControlRandom(maxit = 30),
                                show.info = FALSE)
  
  # 随机森林元学习器参数(排除目标变量CR)
  rf_params <- list(mtry = floor(sqrt(ncol(train) - 1)),
                    importance = TRUE)
  
  parallelStartSocket(cpus = cpus)
  
  rf_learner <- makeLearner("classif.randomForest",
                            predict.type = "prob",
                            fix.factors.prediction = TRUE,
                            verbose = FALSE,
                            par.vals = rf_params)
  
  # 构建堆叠学习器
  stack_learner <- makeStackedLearner(learners = list(tuned_lgbm),
                                      meta.learner = rf_learner,
                                      predict.type = "prob",
                                      fix.factors.prediction = TRUE,
                                      verbose = FALSE)
  
  # 训练堆叠模型
  stacked_model <- train(stack_learner,
                         task = makeClassifTask(data = train, target = "CR"),
                         verbose = FALSE)
  
  parallelStop()
  
  return(stacked_model)
}

内容的提问来源于stack exchange,提问作者Programming Noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:15:10