用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
相关产品推荐
相关产品推荐

