Databricks中XGBModel报无feature_types属性错误,求排查原因
XGBoost模型加载后出现'feature_types'缺失的原因及解决办法
模型保存方式不规范
XGBoost官方不建议直接用pickle保存模型,pickle容易丢失模型元数据(比如feature_types),尤其是跨环境或版本迁移时。正确的做法是用XGBoost自带的save_model()和load_model()方法:# 重新保存模型(训练环境中执行) model.save_model('/.../model.json') # 加载模型(当前Databricks环境中执行) import xgboost as xgb # 注意要和原模型类型一致,比如原模型是XGBClassifier就用这个类初始化 model = xgb.XGBClassifier() model.load_model('/.../model.json')模型加载时类型不匹配
如果原模型是XGBClassifier或XGBRegressor这类具体子类,但你直接用pickle加载后当成泛型XGBModel使用,就可能出现属性缺失。加载时必须明确初始化对应的模型类,再加载权重。Databricks数据类型冲突
在Databricks中,若输入的df[features]是Spark DataFrame列,其数据类型可能和训练时的特征类型(比如numpy数组、Pandas列)不匹配,触发XGBoost内部对feature_types的校验。可以先把数据转成Pandas DataFrame再预测:model.predict_proba(df[features].toPandas())同时检查特征列的数据类型,确保和训练集的dtype完全一致。
环境依赖的细微版本差异
即使指定了XGBoost版本,若训练环境和当前Databricks环境的其他依赖(比如scikit-learn、numpy)版本不一致,也可能导致pickle加载的模型不完整。解决办法要么完全对齐所有依赖版本,要么改用XGBoost官方的模型保存方式彻底规避版本问题。
内容的提问来源于stack exchange,提问作者Mikee
相关产品推荐
相关产品推荐

