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

MLFlow加载XGBoost模型后调用plot_importance无特征名如何解决?

问题原因

这不是你存储方式的错误,是MLflow对XGBoost模型的默认序列化逻辑导致的特性:
XGBoost模型存储预测必需的权重参数时,不会主动把feature_names属性纳入默认序列化字段,MLflow的mlflow.xgboost.log_model默认仅保留模型预测所需的核心内容,你从MLflow加载回来的模型可以正常执行预测逻辑,但feature_names属性为空,因此xgboost.plot_importance只能用f0、f1这类自动生成的编号代替原始特征名。

修复方案

你可以通过调整存储、加载逻辑解决该问题,不需要修改原有模型训练逻辑:

  • 存储阶段,在调用mlflow.xgboost.log_model的同时,额外把训练使用的特征名列表存入MLflow:
# 训练时的特征名列表示例
feature_names = ["col_1", "col_2", "col_3"]
# 原有模型存储逻辑
mlflow.xgboost.log_model(model, "model")
# 新增:存储特征名,可选择存为参数或者独立的文本/JSON artifact
mlflow.log_param("train_feature_names", ",".join(feature_names))
  • 加载阶段,读取模型后手动把特征名赋值回模型对象即可:
model = mlflow.xgboost.load_model("models:/model_uri")
# 读取当前run下存储的特征名
run = mlflow.get_run(RUN_ID)
loaded_feature_names = run.data.params["train_feature_names"].split(",")
# 赋值回模型属性
model.feature_names = loaded_feature_names
# 此时可正常绘制带特征名的重要性图
xgboost.plot_importance(model)

如果你使用的是scikit-learn接口的XGBClassifier/XGBRegressor,需要确保训练时在fit方法中传入了feature_names参数,否则原生模型本身也不会保留特征名属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:30:01