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

XgBoost中fit()传入eval_metric参数报错的解决方法咨询

解决XGBoost fit()报错"unexpected keyword argument 'eval_metric'"

这个问题我之前也碰到过,核心原因是**eval_metric并不是fit()方法的参数**,得把它放在正确的位置才行,分两种常用场景给你解决方案:

场景1:使用Scikit-learn兼容接口(XGBClassifier/XGBRegressor)

如果你用的是XGBoost封装好的 sklearn 风格模型(比如分类用XGBClassifier,回归用XGBRegressor),eval_metric需要在初始化模型的时候传入,而不是放到fit()里。

错误示例(就是你现在的写法):

from xgboost import XGBClassifier

model = XGBClassifier()
# 这里把eval_metric传给fit会报错
model.fit(X_train, y_train, eval_metric='auc')

正确写法:

from xgboost import XGBClassifier

# 初始化模型时直接指定评估指标
model = XGBClassifier(eval_metric='auc')
model.fit(X_train, y_train)

如果需要在训练时监控验证集的指标,配合eval_set使用的话,可以这么写:

model = XGBClassifier(eval_metric='auc')
# 定义训练集和验证集的监控列表
eval_set = [(X_train, y_train), (X_val, y_val)]
model.fit(X_train, y_train, eval_set=eval_set, verbose=True)

场景2:使用XGBoost原生接口(Booster)

要是你用的是XGBoost原生的DMatrix和train()方法,那eval_metric是作为参数放到训练配置里的,原生接口本身就没有fit()方法:

import xgboost as xgb

# 把数据转换成DMatrix格式
dtrain = xgb.DMatrix(X_train, label=y_train)
dval = xgb.DMatrix(X_val, label=y_val)

# 定义训练参数,这里包含eval_metric
params = {
    'objective': 'binary:logistic',  # 根据你的任务调整,比如回归用'reg:squarederror'
    'eval_metric': 'auc'
}

# 定义监控列表
watchlist = [(dtrain, 'train'), (dval, 'val')]
# 调用train方法训练
model = xgb.train(params, dtrain, num_boost_round=100, evals=watchlist)

额外提示

如果你的XGBoost版本比较旧,可能会有参数支持不全的问题,建议升级到最新稳定版:

pip install --upgrade xgboost

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:47:54