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

