xgboost.cv调用报TypeError:dtrain参数被多次赋值该如何解决?
报错原因
你遇到的TypeError: cv() got multiple values for argument 'dtrain'报错,本质是xgb.cv()的位置参数匹配错误:
xgb.cv()的第一个位置形参为超参字典params,第二个位置形参就是dtrain- 你的代码前两个位置参数分别传了
{'disable_default_eval_metric': 1}和自定义的params字典,第二个位置的params已经被自动识别为dtrain的入参,后续你又显式指定了dtrain=dtrain,就出现了同一个参数被传两次的冲突。
修复方案
把两组超参配置合并到同一个字典作为第一个入参即可,同时注意xgb.cv本身不支持自动遍历超参组合,不需要把eta的值放到列表里,修改后代码如下:
import xgboost as xgb dtrain = xgb.DMatrix(X, label=y) # 合并所有超参到同一个字典 params = { 'eta': 0.1, 'disable_default_eval_metric': 1 } xgb_cv = xgb.cv( params, dtrain=dtrain, seed=1, nfold=5, custom_metric=f1_score )
如果你需要测试多组超参数效果,自行编写循环遍历参数列表,每次调用xgb.cv传入单组参数即可。
内容的提问来源于stack exchange,提问作者Tomward Matthias
相关产品推荐
相关产品推荐

