如何在Amazon SageMaker的XGBoost训练任务中添加多评估指标?
在Amazon SageMaker XGBoost中配置多个评估指标
场景1:使用SageMaker预构建XGBoost Estimator
SageMaker的XGBoost容器通过命令行接口传递超参数,因此多个评估指标需以空格分隔的字符串形式传入,而非Python列表。示例代码:
from sagemaker.xgboost import XGBoost # 初始化XGBoost Estimator xgb_estimator = XGBoost( entry_point="your_train_script.py", role="your_sagemaker_role_arn", instance_count=1, instance_type="ml.m5.xlarge", framework_version="1.7-1", hyperparameters={ "eval_metric": "mae merror", # 多个指标用空格分隔 "objective": "binary:logistic", # 根据任务类型调整 "num_round": 100, # 其他超参数... } ) # 启动训练任务 xgb_estimator.fit({"train": "s3://your-train-data-path", "validation": "s3://your-val-data-path"})
场景2:自定义训练脚本中调用原生XGBoost
如果在训练脚本内直接使用xgb.train(),按照XGBoost官方要求,直接传入字符串列表即可(旧版本可能需要元组列表,新版本已支持字符串列表)。示例代码:
import xgboost as xgb import os # 加载训练和验证数据(SageMaker会将数据下载到指定路径) train_data_path = os.environ["SM_CHANNEL_TRAIN"] val_data_path = os.environ["SM_CHANNEL_VALIDATION"] dtrain = xgb.DMatrix(f"{train_data_path}/train.csv?format=csv&label_column=0") dval = xgb.DMatrix(f"{val_data_path}/val.csv?format=csv&label_column=0") # 定义训练参数 params = { "objective": "binary:logistic", "eval_metric": ["mae", "merror"], # 直接传入字符串列表 "num_round": 100 } # 启动训练,指定评估数据集 evals = [(dtrain, "train"), (dval, "validation")] model = xgb.train(params, dtrain, evals=evals, verbose_eval=10) # 保存模型到SageMaker指定路径 model.save_model(os.environ["SM_MODEL_DIR"] + "/xgboost-model")
关键注意点
- 评估指标需与任务类型匹配(比如
merror适用于分类任务,mae适用于回归任务,避免混用不兼容指标)。 - 建议使用
1.5-1及以上的XGBoost稳定版本,语法兼容性更好。
内容的提问来源于stack exchange,提问作者Luis Leal
相关产品推荐
相关产品推荐

