如何加载通过Sagemaker XGBoost(latest版本容器)训练的模型并查看特征重要性
如何加载通过Sagemaker XGBoost(latest版本容器)训练的模型并查看特征重要性
我来帮你解决这个问题,你遇到的XGBoostError: basic_string::resize大多是因为本地XGBoost版本和Sagemaker容器里的版本不匹配导致的——毕竟你用的是latest标签的容器,它对应的XGBoost具体版本可能和你本地安装的不一样。下面是一步步的解决方法:
第一步:确认Sagemaker容器里的XGBoost具体版本
你需要先搞清楚训练模型时容器用的是XGBoost哪个版本,有两种简单方法:
- 查看训练作业日志:在AWS控制台的Sagemaker训练作业详情里,找到日志输出,里面会明确打印出XGBoost的版本号;
- 拉取镜像查看版本:如果本地有Docker环境,可以运行这条命令(记得替换命令里的
{accountid}为你的AWS账号ID):
要是没有Docker,也可以在Sagemaker Notebook里启动一个基于该镜像的终端,执行docker run --rm {accountid}.dkr.ecr.us-east-1.amazonaws.com/xgboost:latest xgboost --versionxgboost --version就能得到版本号。
第二步:安装对应版本的XGBoost到本地环境
根据上一步得到的版本号,用pip安装完全匹配的XGBoost,比如版本是1.7.6的话:
pip install xgboost==1.7.6
第三步:加载模型并获取特征重要性
版本匹配后,就可以正常加载模型并调用get_score了,代码示例如下:
import xgboost as xgb # 替换为你解压后xgboost-model文件的实际路径 model_path = "path/to/your/xgboost-model" # 加载模型 booster = xgb.Booster() booster.load_model(model_path) # 获取特征重要性,importance_type可选weight、gain、cover等,按需选择 feature_importance = booster.get_score(importance_type="weight") # 按重要性从高到低打印结果 for feature, score in sorted(feature_importance.items(), key=lambda x: x[1], reverse=True): print(f"{feature}: {score}")
额外注意点
如果你的模型输出里只有特征索引(比如f0、f1)而不是特征名,那说明训练时没有把特征名传入模型。这种情况下,你需要手动把这些索引映射到你原始数据集的特征列名上——比如你原始数据的列顺序是["feat1", "feat2", ...],那f0就对应feat1,以此类推。
备注:内容来源于stack exchange,提问作者Nikhil Kumar AV
相关产品推荐
相关产品推荐

