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

用R实现引力搜索算法调优Xgboost时遭遇非函数调用错误求助

问题分析与解决

错误原因

你遇到的错误是因为xgb_model对象并没有set_params方法——使用caret包的train函数调优XGBoost时,不需要提前实例化模型对象来设置参数,你的代码逻辑在这里出现了偏差。

修正方案

直接将粒子位置对应的参数构建为参数列表,传入train函数即可,删除无效的xgb_model$set_params调用。具体修改如下:

修正后的代码

# Evaluate the initial particle positions
for (i in 1:n_particles) {
  # 将当前粒子位置转为XGBoost参数列表
  xgb_params <- as.list(particle_positions[i, ])
  
  resampling <- trainControl(method = "repeatedcv", number = 5, repeats = 5, verboseIter = FALSE)
  model_fit <- train(
    x = as.matrix(train[, -15]), 
    y = train[, 15],
    method = "xgbTree", 
    trControl = resampling,
    metric = "Accuracy", 
    tuneLength = 0,  # 关闭自动调参,使用自定义参数
    maximize = TRUE,
    tuneGrid = data.frame(xgb_params)  # 传入粒子对应的参数
  )
  best_positions[i, ] <- particle_positions[i, ]
  best_values[i] <- model_fit$results[1, "Accuracy"]
}

额外注意事项

  • 确保particle_positions的列名与xgbTree要求的参数名完全匹配,比如nrounds、max_depth、eta、gamma等,参数名不匹配会导致train函数报错。
  • tuneLength = 0是关键设置,用于告知caret不要自动生成调参网格,完全使用你传入的自定义参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:05:25