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

如何修复Xgboost中Pass `evals` as keyword args的FutureWarning

触发警告的根本原因

这个警告和你定义的模型超参数(包括你之前怀疑的eval_metric)完全无关,触发源是你调用XGBoost训练接口时,evals(验证集)参数的传参方式不符合新版本要求。

从XGBoost 1.3版本开始,训练接口不再支持evals参数按位置顺序传入,必须显式作为关键字参数传递。你之前写训练代码时,大概率是直接把验证集列表按参数位置传到了训练函数里,没有加evals=的关键字前缀,就会弹出这个警告。

比如你之前的代码大概率是这种写法:

# 会触发警告的错误写法
xgb.train(params, dtrain, num_boost_round=100, [(dtrain, 'train'), (dtest, 'test')])

上面代码最后传入的验证集元组列表,就是evals对应的参数,因为没写evals=关键字,属于位置传参,就会触发警告。

修复方法

你不需要修改任何已经定义好的模型超参数,只需要调整训练函数的传参写法,给验证集参数显式加上evals=关键字声明即可:

# 适配未来版本的正确写法,无警告
xgb.train(
    params=params,
    dtrain=dtrain,
    num_boost_round=100,
    evals=[(dtrain, 'train'), (dtest, 'test')]  # 显式声明evals关键字参数
)

如果你用的是XGBoost的Scikit-Learn风格接口(XGBClassifier/XGBRegressor),调用fit()方法传入验证集时也要注意,这个接口里的验证集参数名是eval_set,同样不能位置传参,要显式写关键字:

# Sklearn接口错误写法
model.fit(X_train, y_train, [(X_val, y_val)])

# Sklearn接口正确写法
model.fit(X_train, y_train, eval_set=[(X_val, y_val)])
补充说明

你之前调整eval_metric参数没效果是正常的,这个参数是定义评估指标的模型超参,属于params字典里的合法配置项,和传参方式类的警告没有任何关联,不需要改动。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:15:43